使用 SHA1(AES_key) 作為 HMAC 密鑰是否存在任何已知問題或攻擊?
請參閱解釋以下操作序列的此答案:
CipherText = IV|| AES(key1,iv,message) tag = hmac(key2,ciphertext)
這個答案說,
您應該為 HMAC 使用不同的密鑰。在實踐中,跟踪加密密鑰的 sha1 總和就足夠了。
SHA1(key1)
使用as真的可以key2
嗎?我的大多數建議都是這樣說的,key1
並且key2
必須是獨立的key2 = SHA1(key)
,但key2
取決於key1
.是否有任何已知的
key2 = SHA1(key)
用作HMAC
密鑰的理論或實際問題或攻擊?
我們不知道。儘管當第二個密鑰依賴於第一個密鑰時,有某種數學方程變得更容易求解似乎不太可能,但我們可能無法證明這一點。所以這就是理論問題。
一個實際問題是,當攻擊者(例如通過側通道攻擊)獲得機密性密鑰時,HMAC 密鑰也被獲得。畢竟,對手只需對其執行 SHA-1 計算。這取決於案例有多少實際問題 - 如果機密性是主要目標,那麼它並不重要,但如果消息的真實性或完整性更重要,那麼這可能是一個很好的思考理由另一種方案(或交換密鑰,並使加密密鑰依賴於 MAC 密鑰)。
密鑰上的 SHA-1 可以被認為是一個可憐的 KBKDF(基於密鑰的密鑰派生函式)。再次作為 KDF,我們無法證明 SHA-1 是一種強大的方法,但由於單個 SHA-1 幾乎與例如KDF1 或 KDF2相同,因此我們通常認為它是可以的。
有時,密鑰上的雜湊值也被用作差人密鑰檢查值 (KCV)。KCV 被認為是公共知識。當然,如果您在同一協議中的同一密鑰上同時使用窮人 KDF 和窮人 KCV,那麼您會遇到嚴重的問題。
當我們現在進入我們通常用來實現從一個生成兩個鍵的目標的構造領域時:通常我們執行以下操作:
$$ K_\textit{mac} =\operatorname{KDF}(k_\textit{master}, \texttt{“mac”}) $$ $$ K_\textit{enc}=\operatorname{KDF}(k_\textit{master}, \texttt{“enc”}) $$
在哪裡 $ k_\textit{master} $ 具有原始加密密鑰的值。 $ \texttt{“mac”} $ 和 $ \texttt{“enc”} $ 是標籤的一部分 $ \textit{info} $ 有助於使 MAC 和加密密鑰相互偏離的字元串。
例如,您可以使用 HKDF-expand 作為 KDF。這是一個更強大的結構,因為 HKDF 在內部使用 HMAC。它還消除了 HMAC 密鑰對加密密鑰的依賴;他們現在都只依賴於現在稱為主密鑰的原始密鑰,之後協議中不再使用該密鑰。
通常,KDF 每個會話只執行一次,它不應該對協議的性能產生太大影響。因此,通常安全地使用它而不是使用僅採用 SHA-1 的快速而骯髒的方法是有意義的。
這類結構與(我假設是 CBC)加密和 HMAC 一起提出的事實使我對生產協議的人的知識保持警惕。在這種情況下,該計劃實際上源於提出您所連結問題的人。
通常我們現在對新協議使用經過身份驗證的 (AEAD) 方案,並且大多數 AEAD 方案從一開始就只需要一個密鑰,從而使整個討論和額外的計算變得不必要。