Authenticated-Encryption

為什麼未經驗證的明文發佈如此糟糕?

  • June 12, 2018

最近我遇到了未經驗證的明文發布。有人告訴我這是一件壞事,但我真的不明白為什麼。未經驗證的明文發布不就是胡說八道嗎?在經過身份驗證的加密的情況下如何攻擊?

如果你不關心明文的真實性,你為什麼要先聽它呢?你可以在耳朵塞住的情況下當場編造明文,也一樣好!

這是一個傳統的例子:你是一位將軍。您收到一條消息,內容為,Attack at dawn!。由於已經是深夜,您的密碼專家決定在驗證身份驗證器之前將其匆忙交給您。唉,那是贗品。你那位將軍發來的密信,竟然是Attack at dusk!。該消息由一次性密碼器加密,在傳輸過程中被截獲,其密文與Attack at dawn!xor 異或Attack at dusk!

那是:

  • 原始明文 $ P $ 是Attack at dusk!
  • 修改後的明文 $ P’ $ 是Attack at dawn!
  • 原來的密文是 $ C = P \oplus K $ 在哪裡 $ K $ 是一次性墊子;
  • 修改後的密文為 $$ \begin{align*} C’ &= P’ \oplus K \ &= 0 \oplus P’ \oplus K \ &= P \oplus P \oplus P’ \oplus K \ &= P \oplus P’ \oplus P \oplus K \ &= P \oplus P’ \oplus C. \end{align*} $$

這聽起來可能有點做作和愚蠢,但今天仍然會發生這樣的錯誤——而且速度要快得多,因為你的密碼學家實際上是一台每秒做出數百萬個決定並將你加密電子郵件的內容洩露給攻擊者的電腦。

“但是,但是,”你說,“你設計了這個例子,讓攻擊者很容易通過使用異或來修改消息。像CBC這樣眾所周知的運營模式肯定會阻止這種情況嗎?它不是。事實上,CBC 的額外不必要的複雜性使得其他攻擊成為可能。帶有一次性驗證器的一次性便箋本可確保保密性可忽略的偽造機率;CBC對偽造沒有任何保證——**每一個塊串都是CBC 中的有效密文,因此密碼學無法區分有效消息和無效消息。

為了使一次性密碼和驗證器實用,通過像 ChaCha 或 AES-CTR 這樣的偽隨機函式從短密鑰生成一次性密碼和一次性驗證器密鑰被廣泛認為是一種沒有人可能的好方法打破。 更好的是,當您和您的對等方共享一個密鑰並且您想在可能受到威脅的通道上交換秘密消息時,只需使用 NaCl crypto_secretbox_xsalsa20poly1305。 (在順序對話中,使用消息序列號作為隨機數;在非順序對話中,隨機均勻地選擇隨機數並將其附加到消息中。)

未經身份驗證的數據是純粹的邪惡——不要碰它!

未經驗證的明文發布不就是胡說八道嗎?

你從人類的角度來看它,並假設胡言亂語是無害的,因為循環中有一個人會發現它。但是解密是由電腦執行的,這些電腦通常會根據解密的數據執行程序化操作,而對他們的程式碼的先決條件已被不真實的密文違反這一事實視而不見。

一個非常具體的例子是,如果 GnuPG 沒有發布未經驗證的明文,那麼最近的 Efail 漏洞將是不可能的。因為它確實如此,電子郵件客戶端然後顯示設計為包含違規 HTML 的消息,並且作為呈現的一部分,它向包含純文字的 URL 發出 HTTP 請求。更一般地說,任何在沒有人工監督的情況下解密數據並自動對其進行操作的電腦程序都可能被密文延展性攻擊所利用。

還有一個事實是,如果對手看到未經驗證的明文或其標籤,一些經過身份驗證的密碼很容易受到密碼分析攻擊,但我的觀點是,即使我們有一個不弱的密碼,發布未經驗證的明文仍然是危險的。

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