Tls
TLS_PSK 和 TLS 錯誤啟動的組合
我正在評估將 TLS 1.2 用於低功耗嵌入式環境。
在查看RFC 7925(物聯網的 TLS)之後,我想知道
- TLS_PSK_WITH_AES_128_CCM_8密碼套件 (RFC 6655)
- 和TLS 錯誤開始擴展 (RFC 7918)
是
- 可能/兼容和
- 除了使用 TLS_PSK_* 密碼套件已經強加的安全隱患之外,還有其他安全隱患。
RFC 7925 的第 21 節提到了使用 TLS 錯誤啟動的幾個條件。但是,沒有特別提到 TLS_PSK_* 密碼套件。
將“錯誤啟動”應用於 PSK 密碼套件並沒有真正的問題。
Finished
“錯誤開始”的事情是在確認(通過消息)對等方確實同意相同的密鑰之前開始使用協商的密鑰來加密數據。從這個意義上說,此時對等身份驗證仍然是隱式的。對於“普通”密碼套件來說,這不是一個問題。(注意:這可能是 SRP 的問題。)如果您想針對低功耗嵌入式系統,您可能需要使用比 AES 輕得多的 ChaCha20+Poly1305 密碼套件 ( RFC 7905 )(尤其是 AES/CCM,它為每個塊呼叫兩次 AES 加密常式) . 如果你還是堅持AES,AES/GCM也可以輕一些。
此外,雖然 PSK 很輕(沒有非對稱加密),但它有自己的問題,即需要共享密鑰,這不是最容易部署的東西;您可能需要考慮使用帶有證書的非 PSK 系統。如果受限系統是客戶端,那麼 RSA 密鑰交換只涉及客戶端上的公鑰加密,這是輕量級的,因為 RSA 公鑰操作使用的是短的公共指數。或者,一些橢圓曲線對於嵌入式 CPU 來說足夠輕。
無恥外掛:考慮BearSSL。它還沒有準備好用於生產(因為我還沒有對模糊的 SSL/TLS 實現進行廣泛的自動驗證),但可以體驗一下什麼是可行的。在 48 MHz Cortex-M0+ 上,我的 C 程式碼可以在大約半秒內執行 EC 點乘法(如果使用 Curve25519,則為該值的一半)。