最近我試圖用Python Twisted設計物聯網設備的自定義協議。由於大多數物聯網設備(終端節點)的功能不足以支持TLS,因此我必須實施經過修改的輕量級傳輸安全性。但是,與standrad TLS相同,AES128/256用於數據加密。我應該使用AES加密的TCP流實現數據包分隔符嗎?
衆所周知,TCP是一個流,並且傳遞的消息可能需要在TCP流中分隔符。在面向文本的消息如HTTP/FTP中,使用\ n \ r。在二進制消息中,我們應該定義自己的結構,如TLV,V代表有效載荷數據。這可以通過Java中的Netty,Python中的Twisted實現。
當TCP被加密時,情況變得複雜。理論上,純文本應該用AES加密,然後在TCP流上進行。文本消息很容易,但是在二進制消息中,類型/長度字段也被加密。此外,AES是面向塊的算法,這意味着消息可能需要下一條消息來進行加密/解密。儘管AES可以是透明傳輸,但是對於二進制消息分片和解析來說很難實現。還有另一種方法,我們可以將TLV中的TL字段保留爲純文本,同時保持AES加密的V加密。但它只適用於二進制數據。並且它也需要AES中的填充。
是否有任何建議或參考,包括代碼或項目?謝謝!
以塊大小的倍數讀取數據並僅填充最後一個塊。 – zaph
現在,我明白了。與AES,事情變得更加簡單。接收器只是讀取塊大小的塊(如16B/32B)。而填充方法甚至可以幫助接收者分割數據包流! –