Encryption

了解對分組密碼的中間相遇攻擊

  • July 22, 2015

我了解如何對 2DES/3DES 實施中間相遇攻擊,方法是計算一半所有可能的密鑰並儲存結果,然後對另一半執行相同操作,但與之前儲存的結果進行比較以查看如果某處有比賽。我知道的非常不精確的描述,但只是為了說明我知道如何為 2DES/3DES 做這件事

問題在於 Feistel 密碼,似乎無法使用相同的技術。考慮以下內容(對於糟糕的繪圖感到抱歉):

費斯特爾

因此,對於一個簡化的範例,假設上面的 Feistel 結構在 16 位塊上執行並使用 8 位獨立輪密鑰。因此每個分支塊都是 8 位的。S-box 是一個 8 位 AES S-box。

鑑於對手知道以下內容:

  • 完全訪問使用上述 Feistel 加密 16 位塊的程式碼
  • 確切地知道兩個明文 - 密文對。

因此,鑑於這兩對,目的是找到將明文映射到密文的密鑰。

鑑於上述假設,這裡如何應用中間相遇攻擊?我嘗試使用與 2DES/3DES 相同的方法,但它的應用方式不同。我需要一些關於如何進行的指導。

我看不到“中間”值在哪裡,我應該從哪裡向前和向後計算以達到這樣的中間值。

**編輯:**忘了提Feistel密碼有4輪。

我們實際上只需要一個明文-密文對,但是第二個可以用作檢查候選密鑰的一種方式。

  1. 猜測最後的子鍵(即猜測所有子鍵)。
  2. 使用您的密鑰解密最後一輪密文。儲存此結果和您使用的子項。
  3. 對最終子鍵的所有 2^16 個候選者重複此操作。
  4. 猜測前三個子鍵。
  5. 使用這些密鑰,對明文進行前三輪加密。
  6. 如果您的中間加密結果和部分解密的密文之間存在衝突,那很好!你(可能)找到了鑰匙!您可以使用其他密文/明文對進行仔細檢查。

或者,如果您有足夠的儲存空間,您可以通過前兩輪解密(與最後兩輪加密相反)來建構部分解密密文的儲存。在這種情況下,您將暴力破解最後兩個子鍵的所有候選者,而不僅僅是最後一個。這需要儲存 2^(16 * 2) 個部分解密的密文,但加速比為 2^16。

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