2011-07-27 15 views
4

我已經設計了一個簡單的通信協議,通過原始的TCP套接字來實現一些嵌入式設備之間的簡單消息傳遞。爲了說明問題,我的嵌入式設備是一個包含相對較小的微控制器的電子設備,它運行基本的嵌入式RTOS(基本上只提供任務優先級和消息隊列)和TCP/IP協議棧。爲TCP協議的預期用途是微控制器嵌入式設備通過TCP的簡單驗證和加密方法

  1. 啓用兩個或更多個「方框」在一個大廈
  2. 彼此通過LAN通信,從而允許一個框來通過因特網與外部的服務器進行數據交換。

我現在有一個消息協議在我很滿意的金屬箱之間工作。兩個盒子之間的基本消息傳遞過程基本上是:

  1. 框'A'啓動到'B'的套接字連接。
  2. 框'A'發送消息報告或命令序列。
  3. 框'B'以確認和/或命令響應作出響應。
  4. 框'A'關閉插座。

我現在想要做的是合併一些安全和認證級別。這裏最大的限制是我沒有任何一種操作系統或榮耀的TCP協議棧,可以爲我提供任何安全功能;我只有簡單的TCP堆棧,因此我必須在應用層面實施安全措施,並考慮到微控制器的限制。

我想滿足的目標是:

  1. 設備之間的身份驗證。爲了達到這個目的,我打算採取以下措施:

    • 保存已知IP的表格,從中只能接受連接。

    • 每次建立套接字連接時,都會首先交換唯一標識符。該號碼可能是給定設備的唯一序列號,並且必須爲其他設備所知。

  2. 加密數據,在數據包以某種方式被截取的情況下。據推測,我需要某種密碼算法,對於在小型微控制器上執行並不太「昂貴」,與編入所有設備的唯一密鑰結合使用。我見過的一個這樣的算法,看起來很緊湊,足以在我的代碼中實現,它是TEA(微型加密算法)。

我會非常感謝任何建議或指針。

+1

我強烈建議使用SSL - 也許你可以找到一個輕量級的實現。即使你堅持認爲你必須手工實現它,你幾乎可以肯定會得到一些在功能上等同於SSL但質量和密碼正確性較低的東西。 –

+0

你是否擔心中間人的攻擊? – Ariel

+3

我認爲你應該閱讀這個:http://en.wikipedia.org/wiki/Extensible_Authentication_Protocol然後做它說的。它似乎完全適用於您的情況。手動加密很難,最好複製別人的工作。 – Ariel

回答

2

茶看起來很簡單,可能會做你需要的東西。

我在github(thumb指令集模擬器,cortex-m3樣式引導)的我的thumbulator項目中添加了一個茶例子。

編譯爲拇指與-O2或類似優化:

臂-NONE-Linux的gnueabi-GCC(的Sourcery G ++精簡版2011.03-41)4.5.2 加密136個字節解密128個字節

LLVM 29個 加密92個字節解密96個字節

編譯爲通用臂...

GNU加密188字節,解密184個字節 LLVM加密112個字節,癸rypt 116字節

對於身份驗證,IP地址表和設備數量之間是否存在一對一的關係?基本上每個設備需要多個唯一的標識符?你是否想讓與嵌入式系統連接的另一端以某種形式或方式登錄?還是你在控制二進制文件/代碼的兩端,沒有用戶或沒有選擇設備(程序知道該怎麼辦)等?如果每個設備都有一個已知的IP地址,那麼該IP地址可能是加密的關鍵(加上其他所有的字節或以某種所有人都知道的方式派生)如果進入的連接1)不是來自核準列表2)當基於嵌入式系統IP地址的密鑰失敗時加密失敗,然後拒絕連接。

無論如何,你的安全性只能走得太遠,如果你需要一些非常強大的東西,你可能需要更多的嵌入式系統的功能,然後實現一個像ssl這樣的通用/標準系統。

3

檢查MatrixSSL - 它們擁有很小的尺寸和可嵌入的功能。這比自己重新開發SSL/TLS要好得多(你最終會這樣做)。

相關問題