2010-11-25 22 views
1

目前我正在開發一個嵌入式項目。客戶端是8位MCU,服務器端是計算機。低功耗微控制器如何根據服務器對自身進行身份驗證?

作爲目標的一部分,我想盡量減少複製產品的機會。在初始化階段,服務器發送序列號給客戶端,客戶端用序列號做一些簡單的計算,然後將結果發送回服務器。如果匹配的客戶端是可信的,服務器會將結果檢查爲預先計算的硬編碼值。

問題是發送回服務器的計算序列號始終是固定的。任何山寨公司都可以用邏輯分析儀輕鬆搞定。我想讓發送序列號看起來像是隨機位,但仍能夠解密回原來的值。 A good example using AES encryption(注意每次按對其進行加密按鈕生成一個看似隨意的文字,但你解密,然後將其恢復爲原始文本。)

由於8位ROM/RAM和加工功率限制單片機我無法在其中安裝完整的AES例程,因此AES無法解決問題。有沒有簡單而有效的算法來隨機化傳輸?

+0

服務器端編碼爲C# – wei 2010-11-25 19:57:42

回答

1

使用密鑰對。在初始化:

  • 客戶端告訴服務器「我在網上」
  • Server加密驗證消息,只在客戶端將能夠解碼
  • 客戶端發回解密的消息

應該不需要硬編碼服務器的密鑰 - 它可以基於時間戳生成(只接受在可接受範圍內的答案),或者可以根據需要生成代碼並使用超時來防止它們從長期儲存。

0

讓服務器在序列號旁邊發送單調增加的計數器或時間戳到客戶端。然後客戶將其包含在它執行的計算中。

因爲服務器總是發送不同的請求,所以響應總是不一樣的(當然,如果市場利潤豐厚,競爭對手總是可以反彙編你的MCU代碼並找出如何複製它,但是真的沒有停止那)。

0

不同的想法可能是要求8位控制器向服務器發送日期,時間和序列號的CRC。服務器可以驗證它是一個唯一的序列號,併發送帶有日期,時間和授權碼的CRC。

您也可以查看車庫門開啓器使用的滾動代碼algorythms,看看它們是否可以應用到您的應用程序。

相關問題