在 MAC 的計算中包含密碼的鹽是個好主意還是壞主意?
假設有一個密碼系統,其中數據的加密和身份驗證是使用從使用者給定密碼派生的密鑰完成的,該密碼使用 PBKDF2 之類的東西。在 MAC 中加入 PBKDF2 鹽是好主意還是壞主意?
換句話說,這兩個系統哪個更好?
$$ Packet = Salt + IV + Enc(Data) $$ $$ Output = Packet + MAC(Packet) $$ 或者
$$ Packet = IV + Enc(Data) $$ $$ Output = Salt + Packet + MAC(Packet) $$ 假設 $ Output $ 是正在傳輸的值。
像這樣的真實係統顯然會更複雜。這只是為了大致了解我的意思。
對此的一個論點是它可以防止鹽在沒有通知的情況下被修改。但是您已經從派生 MAC 密鑰的鹽中得到了這個。
反對這一點的一個論點是,它允許一段 MAC’d 數據影響派生密鑰以計算所述 MAC。但是鑑於良好的 KDF 和 MAC 功能,這不應該被攻擊。
哪個更好?有區別嗎?
即使您使用的是良好的 PBKDF,向攻擊者提供足夠的資訊來對密碼進行離線攻擊似乎也是不明智的。PAKE可能會更好。
假設你有一個強鍵,你的問題仍然成立。我將其解釋為:
給定一把鑰匙 $ k_1 $ 和鹽 $ r $ 你得出 $ k_2 = KDF(k_1|r) $ . 然後你發送 $ m, r $ 和 $ MAC_{k_2}(m|r) $ . 鑑於更改為 $ r $ 兩者都會改變 $ k_2 $ 和 $ m|r $ 或者有沒有機會 $ MAC_{k_2’}(m|r’) = MAC_{k_2}(m|r) $ ?
我的回答是,這種情況不可能發生,因為它會構成偽造。給定一個好的 KDF $ k_2’ $ 將與隨機無法區分,因此該密鑰下任何內容的有效 MAC 包括 $ MAC_{k_2’}(m|r’) $ 將是偽造的。