推薦的經過身份驗證的流密碼以最小化成本?
我正在執行我的 TCP/IP 協議,方法是使用 AES128/CBC 加密每個數據包,並在該數據包上捆綁一個 SHA256 HMAC。
這會為小數據包帶來相當多的空間成本,所以起初我想在 CTR 模式下執行 AES 並仍然使用 HMAC,但是執行某種帶有集成身份驗證的流密碼會更好。
我最好的選擇是什麼?
編輯:
我應該提到,完整性檢查失敗將始終斷開連接。
這意味著重新協商加密密鑰,從而為每個新連接提供一個新的加密和簽名密鑰。
換句話說,做出錯誤的猜測並且密鑰被重置。即使有一個小的完整性校驗和,猜測正確以維持交換似乎是一個難題。
您在 IT 安全網站上問過同樣的問題。請不要交叉發帖。根據這些網站的運營規則,這是不受歡迎的。
這是你應該做的:
- 將 MAC 標記截斷為可接受的長度。您將需要選擇一個長度,以在數據包大小與防偽安全性之間提供適當的折衷。我建議您使用經過身份驗證的加密方案。有關詳細資訊,請參閱我在其他網站上的回答。
- 為了獲得額外的穩健性,您可以在 MAC 中包含所有先前數據包的執行雜湊。這樣,如果有人篡改了單個數據包,那麼它將使所有後續 MAC 標籤無效。這可能會或可能不會增加安全性,具體取決於應用程序。但是,它不會受到傷害:它根本不會增加數據包的長度,因此它是免費的,並且在某些情況下它可能有助於阻止某些攻擊(如果它們需要在流中間偽造數據包) .
例如,假設您使用 16 位 MAC 標記。這太短了,無法防止攻擊者完全靠運氣偽造數據包:如果攻擊者發送一個帶有隨機 16 位標籤的偽造數據包,那麼它將很有可能被接受 $ 1/2^{16} $ . 因此,攻擊者可以通過嘗試使單個偽造的數據包被接受 $ 2^{16} $ 次,直到他們成功。在某些應用程序中,這已經夠糟糕了,以至於應用程序被不可恢復地破壞了。但在其他情況下,偽造一個數據包本身並不是毀滅性的。在後一種情況下,我們可以繼續問:攻擊者成功偽造單個數據包後,接下來會發生什麼?如果您不添加執行雜湊,那麼攻擊者可以讓其餘數據包暢通無阻地流動,並且連接將繼續。特別是,兩個端點都可能不會注意到任何問題。但是,如果您使用正在執行的雜湊,那麼攻擊者就無法允許對話繼續進行。如果攻擊者偽造一個數據包然後允許所有後續數據包暢通無阻地流動,則接收者將拒絕所有後續數據包,因為它們沒有匹配的執行雜湊。那裡’ 攻擊者沒有辦法恢復和修復連接,因此它可以繼續長時間 - 因此成功的偽造不可避免地導致此後不久的拒絕服務。這增加了成功攻擊被注意到的機會,並使得執行需要多次成功偽造的攻擊變得更加困難。因此,在某些應用程序中,它可能會使某些攻擊更加困難(不能保證,但它可能會有所幫助)。
同樣,您可能真的應該更加認真地看待 TLS 或 DTLS。編寫自己的數據包格式會帶來麻煩。