Aes

正確的認證加密

  • March 23, 2016

我正在使用 AES-CBC,使用 HMAC-SHA512 進行身份驗證,我想知道我的思考過程和實現是否正確。

通過網路發送的消息為:HMAC(64Bytes),IV(16Bytes),Ciphertext MAC 計算如下:HMAC(sha1(secretKey),Plaintext)

  • 使用 SHA-512 而不是 SHA-256 是否有重要的理由?
  • 我應該區別對待密鑰還是完全生成一個完整的新密鑰對來驗證密文

我正在使用 AES-CBC,使用 HMAC-SHA512 進行身份驗證,我想知道我的思考過程和實現是否正確。

通過網路發送的消息為:HMAC(64Bytes),IV(16Bytes),Ciphertext MAC 計算如下:HMAC(sha1(secretKey),Plaintext)

不,這是不正確的。

HMAC 應該在 IV 和密文值上計算,而不是在明文上計算。如果您通過明文發送 HMAC,那麼攻擊者將能夠區分相同的明文。

如果這用於傳輸安全(如您所指),那麼您可能容易受到 CBC 模式 AES 上的填充預言攻擊。如果你想使用一個好的方案,你可以看看這個RFC草案

如果您想將其用作應用程序級協議,您可能(也)想了解加密和 MAC的順序。如果迫在眉睫,您當然可以使用 MAC-encrypt-MAC。

如果使用 192 或 256 位密鑰,則此方案中的 SHA-1 只會減少密鑰材料的數量。

使用 SHA-512 而不是 SHA-256 是否有重要的理由?

可能不是為 MAC 生成身份驗證標籤。請注意,在 64 位機器上,SHA-512 通常比 SHA-256,因此如果您可以節省頻寬,那麼使用 SHA-512 可能是個好主意。否則,您可以使用 SHA-512/256 - 當然,如果您的目標執行時可用。

我應該區別對待密鑰還是完全生成一個完整的新密鑰對來驗證密文

你絕對不應該把 SHA-1 混在一起。

如果您感到危險,可以使用相同的密鑰進行加密和 HMAC。這不太可能(但理論上不可能)會損害對稱密鑰。

如果你想做得很好,那麼你應該使用兩個鍵。您可以使用諸如HKDF之類的密鑰派生函式從主密鑰中計算出兩個密鑰。如果這不可用,您可以回退到用於在 TLS 中生成會話密鑰的 PRF。

引用自:https://crypto.stackexchange.com/questions/33935