Keys

暴力破解密碼時如何確保檢索到正確的密鑰?

  • January 28, 2019

想像一下一次性墊的情況。它被證明是安全的,因為密鑰可能是一切。我們無法保證此密鑰或該密鑰是加密我們數據時使用的密鑰。維基百科說:“密文可以被翻譯成任何相同長度的明文,而且所有的可能性都是一樣的。” .

像 AES、Serpent、Twofish 等分組密碼呢?

想像一下,我們發現了一個這樣的密文:0102030405060708090A0B0C0D0E0F10,我們知道這個密文來自 AES-128 加密。然後,我們想要強制破解它,強制密碼暴露自己。

假設使用密鑰 10F0E0D0C0B0A0908070605040302010,解密給我們的輸出是:“這是秘密!” 並使用密鑰 102030405060708090A0B0C0D0E0F010,解密產生“15zefD1p1wA2kvCC”。

明文是“這是秘密!” 或“15zefD1p1wA2kvCC”。我們怎麼知道?我的意思是,即使解密導致 gobbledygook,是什麼告訴我們明文不是 gobbledygook 本身?

我們如何確定我們剛剛在暴力破解密碼時嘗試過的密鑰是好的密鑰?為什麼可能有一個 ONY 鍵,而不是像一次性鍵盤那樣的無窮大?

防御者的角度來看,如果在名為 IND-CCA2 的遊戲中最知名的對手的成功機率可以忽略不計,即使對手可以選擇要利用的結構,我們也認為密碼是安全的。

這是 IND-CCA2 遊戲,是自適應選擇密文攻擊下不可區分性的縮寫:

  1. 攻擊者查詢預言機以了解他們選擇的任意密文的解密。他們選擇的密文可能取決於他們收到的較早的明文。
  2. 對手向挑戰者送出兩條消息 $ m_0 \ne m_1 $ 與他們想要的任何關係,只要消息不相等並且尚未從解密預言中獲得,並學習加密 $ c $ 的 $ m_i $ 在哪裡 $ i \in {0,1} $ 是挑戰者向對手隱瞞的公平拋硬幣的結果。
  3. 攻擊者查詢預言機以了解他們選擇的任意附加密文的解密*,*除了 $ c $ .
  4. 對手猜測 $ i $ ,擲硬幣的結果,如果猜對了就贏。

如果所有成本有限的對手贏得這場比賽的機會都微乎其微,那麼防守方在他們的消息中輸入什麼結構化數據就無關緊要了。如果對手可以利用任何結構,例如 US-ASCII 文本,那麼該對手可以利用它以不可忽略的機率贏得比賽,並且密碼將無法具有 IND-CCA2 安全性。

從嘗試(比如說)恢復密鑰的攻擊者的角度來看,我們必須利用有關明文的附加資訊來驗證猜測。 如果防御者加密了一個統一的 128 位隨機字元串 $ P $ 並透露 $ C = \operatorname{AES-256}_k(P) $ 對攻擊者來說,攻擊者沒有辦法區分 $ k $ 從 $ k’ \ne k $ 因為每一個密文都是一些明文的加密。但是,如果分佈可能是不均勻的並且其不均勻性是可預測的,例如,如果防御者加密了 US-ASCII 文本或 XML 文件或你有什麼,那麼攻擊者可以利用該資訊。

通常,這些消息上的許多非均勻分佈會導致(比如說)八位字節的非均勻分佈,我們可以用本科統計學家最喜歡(或唯一)的工具輕鬆區分: $ \chi^2 $ 針對八位字節上均勻分佈的原假設進行檢驗。還有許多其他統計測試可能有能力將錯誤密鑰產生的隨機雜訊與正確密鑰產生的防御者明文區分開來。

但是,在密碼學中一般沒有什麼可以說的,因為我們設計了密碼,因此防御者使用什麼分佈*並不重要。*攻擊者仍然沒有希望區分不同明文的密文,即使他們可以選擇明文來最大化他們獲勝的機會。

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