Hmac
支持在密文中插入MAC但不支持Authenticated Encryption的解決方案
從我們應該 MAC-then-encrypt 還是 encrypt-then-MAC?,我知道我應該做Encrypt-than-MAC,其中MAC包含IV和密文等所有資訊。
看完為什麼選擇認證的加密方式而不是單獨的MAC?,我知道在加密和 MAC 中重複使用密鑰可能會觸發不必要的弱點。所以我有一個問題,如果我使用的語言不支持經過身份驗證的加密,我應該如何插入 MAC?答案的作者建議使用 KDF 來解決問題,但 KDF 需要鹽,否則將無法正常工作。如果我將 salt like 放置
salt||hmac||IV||ciphertext
,因為salt
不受 MAC 保護,使用 EtM 和/或觸發另一個弱點是否毫無意義?我也讀過的文章:
如果鹽完全用於基於密鑰的密鑰派生函式 (KBKDF),則可以以明文形式發送。通常沒有理由對鹽保密。
正如 SEJPM 在評論中已經指出的那樣,KBKDF 沒有直接需要鹽。但是,您可以使用它來加強 KBKDF 的安全性。HKDF RFC(第 3.1 節)很好地解釋了您可能想要提供鹽的原因。
筆記:
- 如果您使用鹽(使用另一個
Info
參數,例如"IV"
),您也可以從 KBKDF 派生一個 IV - 在這種情況下,您不需要將其與密文一起發送;- 通常,身份驗證標籤(HMAC 值)放在密文的末尾,但這與安全性無關。