Hmac
如果我選擇密文或純文字作為消息,HMAC 是否重要?
我正在使用 HMAC 創建消息身份驗證程式碼。我的問題是,我使用
cipher text + encryption key
or有關係plain text + encryption key
嗎?我查看了一個實現,據我所知,它們只是連接值(消息和加密密鑰)並散列它們。
有 3 個與 MAC 使用相關的術語:encrypt-then-mac、mac-then-encrypt 和 encrypt-and-mac。最後一個不適用於 HMAC,它指的是單個算法同時進行加密和身份驗證的情況。
在我看來,Encrypt-then-mac 總是更可取,原因如下:
- 您可以拒絕偽造,而無需解密它們。
- 如果您的 MAC 算法洩漏了有關消息的資訊(通過側通道),那麼洩漏的消息只是密文,即已經“公開”的資訊。
- 需要擔心的“活動元件”更少。您不需要加密 mac 結果。您可以使用不需要隨機數的 MAC 算法來防止洩露某人是否兩次發送相同的消息。*
如果每個實現細節都完美完成,那麼這三個選項中的任何一個都可以工作。特別是對於 HMAC… 1 是一個很好的理由。2 可能不是 HMAC 特別關注的問題,因為可能沒有在沒有物理訪問或接近的情況下無法利用的側通道。對於 3,我注意到你寫的是“plaintext + key”而不是“plaintext + nonce + key”。這是一個重要的缺陷。HMAC 是確定性的,因此如果明文1 = 明文2,則兩個消息標籤將相等。
密碼末日原則也可能是一本有趣的讀物。
- 但是,如果您通過網路發送隨機數,則無論如何都應該包含它。如果同一個密鑰加密多條消息,您的加密算法應該始終使用隨機數。