Encryption
AEAD 是向協議添加加密 + HMAC 的推薦方法嗎?
假設您正在與一個稱職的開發人員/團隊打交道,並且您建議為他們的協議增加安全性。同樣暫時不要擔心密鑰建立和驗證協議的另一端方面。
你會推薦 AEAD,特別是 AES-GCM over AES 256 + HMAC with SHA2?
我問是因為這裡提到的 AES-GCM 有實現/使用注意事項。
我認為您對這裡的分解和抽象層有點不清楚。正確設計的 AES + HMAC 結構是AEAD。這是因為 AEAD 是關於密碼學應該向其呼叫者公開什麼介面和契約;而 GCM 與 encrypt-then-HMAC 之間的選擇是implementations之間的選擇。理想情況下,呼叫 AEAD 的程式碼將通過一個抽像出您建議的兩種實現之間差異的介面來執行此操作,並且實現您的 AES + HMAC 構造的程式碼將公開與 AES-GCM 相同的呼叫者介面。
如果您正在尋找自己的 AES + HMAC 組合,我建議您花一些精力尋找現成且經過嚴格審查的第三方庫。無論是使用 AES-GCM 還是 AES + HMAC 結構都不是最重要的。俗話說,不要自己動手。
您可以使用這個提議 AES-CBC + HMAC 作為 AEAD 密碼的網際網路草案。但它從未獲得批准,並且有兩個密鑰,實現效率不高,最重要的是沒有明確的安全證明。但是,它確實使用 encrypt-then-MAC,並在“密文”中包含 IV,因此包含 MAC。
GCM 有使用注意事項,但 CBC-HMAC 也有。我自己會選擇 EAX 模式;它僅在加密模式下依賴 AES,並在 CTR 和 CMAC 中執行 AES。它非常靈活且結構良好,只使用一個鍵。然而,對於正常操作,它可能不如 GCM 高效,而且對於小消息,它的成本相對較高。