Hash

從單個主密鑰派生單獨的加密和 MAC 密鑰的安全方法?

  • October 24, 2014

我想從一個 256 位主密鑰中派生一個 256 位加密密鑰和一個 256 位 MAC 密鑰,用於經過身份驗證的加密方案。

我正在考慮以下構造,以使用安全的 256 位雜湊算法(例如 Keccak)派生兩個密鑰:

  1. 用於加密的密鑰 1 = H(主密鑰 | ‘0’)
  2. MAC 的密鑰 2 = H(主密鑰 | ‘1’)

這樣做的好處是,如果 MAC 密鑰被洩露,它不會導致消息解密,因為很難找到單向雜湊的原像來確定主密鑰,從而確定派生的加密密鑰。

此外,如果只有加密密鑰被洩露,那麼這也不會洩露主密鑰,因此攻擊者應該無法確定 MAC 密鑰並能夠偽造未來的傳輸。

這是從一個密鑰派生兩個密鑰的安全方法嗎?如果沒有,有什麼更安全的方法?

是的,這應該是安全的,因為它在很大程度上與KDF1 和 KDF2兼容,它們基本上使用計數器的 4 字節大端編碼而不是直接將 ASCII 轉換為字節。請注意,此構造適用於主密鑰(短長度,高熵),但如果允許更大的輸入,則可能容易受到長度擴展攻擊。

但是,如果您想使用最新最好的,您可以使用 HKDF,甚至可能為會話密鑰添加鹽。


NIST SP800-108 中的 HKDF 和 KDF 通常具有更好的安全證明和提供方法,可以在從輸入中提取密鑰材料後*擴展密鑰材料的數量。*它們還包含提供顯式標籤和其他資訊的方法(使用“enc”和“mac”而不是“1”/“2”)。不幸的是,它們並不經常出現在密碼庫中,它們更難實現,它們的定義很糟糕,而且它們似乎比 KDF1 和 2 等更簡單的方案提供的好處相對較少。

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