Encryption

如果我已經擁有 SHA1(M),我可以拋棄 MAC 嗎?

  • February 19, 2015

我目前正在將 SSL 與 AES-CBC 和 HMAC 一起用於包含字元串 M 的文件傳輸。現在假設 Alice 已經知道 SHA1(M)(而對手不知道),並且她****僅使用AES-CBC從 Bob 下載 M而沒有蘋果電腦。

通常這是不明智的,但由於她可以在下載完成後檢查 SHA1(M),這還不安全嗎?

**簡短的回答:**不。它不安全。

**細節。**要正確回答這個問題,我們首先必須確定“安全”的含義。在這種情況下,我假設安全性意味著機密性和完整性。所以讓我們分別談談。

  • **完整性:**是的,根據您的假設,這提供了完整性。@poncho 解釋了原因。
  • **機密性:**不,這不提供強大的機密性保護。有選擇密文攻擊可能允許主動攻擊者學習關於 M 的部分資訊。

這種攻擊的細節和可行性將取決於您使用的填充方案、已知明文是否可用等等。然而,基本概念是:攻擊者用精心構造的密文代替 Bob 的傳輸,並觀察 Alice 的反應。在許多系統中,Alice 的反應將揭示解密的消息是否與 Alice 的雜湊匹配。因此,攻擊者從 Alice 的反應中學習了 1 位資訊。而且,在某些情況下,攻擊者可以通過巧妙地選擇密文來利用這一點來了解有關 M 的部分資訊。

閱讀有關填充 oracle 攻擊的內容以了解更多資訊。

**概括。**在 encrypt-then-authenticate 模式下使用消息驗證碼,或使用經過驗證的加密。這東西既棘手又微妙。不要試圖走捷徑。打開一個不明顯的安全漏洞太容易了。

更多細節:(7/29 添加)我看到有些人不相信機密性攻擊是可能的。對不可能發生此類攻擊的錯誤信心是一個有趣的評論,即人們對安全的信念如何不一定與實際安全相關,但我想我應該提供進一步的參考來證明此類攻擊的可能性,因為它們是不明顯,違反直覺,而且相當令人驚訝。要了解更多資訊,請參閱,例如,

專業提示:您可能需要確保您了解這些論文中的攻擊,然後才能對這裡提出的方案絕對可以抵抗這些攻擊充滿信心。

**範例攻擊:**對於那些閱讀過論文的人,這裡是針對此處提出的方案的範例攻擊的草圖。

讓我們做一些假設以使範例保持簡單。假設,在加密之前,消息 M 通過附加任意字節被填充到 16 字節的倍數,然後是一個指示應該刪除多少字節的填充的單個字節。為簡單起見,假設消息 M 總是正好 1 個字節長。這意味著 M 在加密之前將被填充到 16 個字節,方法是附加 14 個隨機字節,然後附加 1 個字節的值0x0F。假設攻擊者之前已經擷取了大量已知的明文及其相應的加密,現在攻擊者已經截獲了 M 的加密並想了解 M 的一些資訊。

現在,假設攻擊者對消息的值有一個猜測 G(G 是單個字節),並且攻擊者想要確認 M = G 與否。以下是攻擊者如何確認他的猜測。

讓 $ IV $ 表示加密 M 時使用的 IV;注意 $ IV $ 攻擊者知道。攻擊者查看他的配對集合 $ (P_i,C_i) $ AES 的已知輸入-輸出對(每個都是一個塊寬度);這些可以從已知的明文和密文中導出,用於 CBC 模式加密。攻擊者尋找這樣的一對 $ (P_i,C_i) $ 這樣 $ IV \oplus P_i $ 以 G 作為其第一個字節,並以 G 作為0xF其最後一個字節。攻擊者將 Bob 發送的密文替換為密文 $ (IV, C_i) $ 等著看愛麗絲的反應。如果 Alice 拒絕了這個消息,那麼攻擊者就會知道 $ M\ne G $ . 如果 Alice 接受了這個消息,攻擊者就會知道 $ M=G $ .

因此,這種攻擊的可能性意味著這個問題中提出的方案沒有提供語義安全:它不是 IND-CCA2 安全的。用非技術術語來說,它沒有提供我們對加密方案所期望的保密保護級別。在實踐中,這樣的漏洞可能非常嚴重,並且很容易被壞人利用。

如果您閱讀過我上面引用的研究文獻,那麼這些都不是特別新穎或新穎的。當然,如果你不熟悉那些研究文獻,這些東西是完全令人驚訝和出乎意料的。因此,即使一切對您來說似乎都很好,也請將此作為偏離公認實踐的危險的教訓。如果你不是這方面的專家,你可能沒有資格判斷你的方案是否安全——如果你是專家,我懷疑你可能會特別害怕偏離公認的做法,因為過去發現的令人驚訝的攻擊數量。

很容易看出這是安全的,因為攻擊者無法讓 Alice 接受除了 Bob 最初發送的文件之外的任何下載。

即使攻擊者知道加密 (CBC) 密鑰(或者,Alice 和 Bob 根本不費心加密消息),並且如果攻擊者也知道正確的 $ SHA1(M) $ 值,只要攻擊者不能選擇文件 $ M $ .

這是因為如果攻擊者可以使 Alice 可以接受另一條消息 $ M’ \ne M $ ,那是因為 $ SHA1(M) = SHA1(M’) $ ,因此攻擊者有效地找到了消息的第二個原像 $ M $ . 據我們所知,這對 SHA1 來說是不可行的。

就個人而言,我建議使用(比如說)SHA256 而不是 SHA1;這樣,我們甚至不必假設攻擊者無法影響 $ M $ .

現在,您可能會問“如果這可行,我們為什麼還要為 MAC 煩惱”?嗯,我相信很大一部分原因是 Alice 知道 $ SHA1(M) $ 獨立於下載;在大多數情況下,接收者沒有消息內容的先驗資訊。

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