Encryption
了解對分組密碼的中間相遇攻擊
我了解如何對 2DES/3DES 實施中間相遇攻擊,方法是計算一半所有可能的密鑰並儲存結果,然後對另一半執行相同操作,但與之前儲存的結果進行比較以查看如果某處有比賽。我知道的非常不精確的描述,但只是為了說明我知道如何為 2DES/3DES 做這件事
問題在於 Feistel 密碼,似乎無法使用相同的技術。考慮以下內容(對於糟糕的繪圖感到抱歉):
因此,對於一個簡化的範例,假設上面的 Feistel 結構在 16 位塊上執行並使用 8 位獨立輪密鑰。因此每個分支塊都是 8 位的。S-box 是一個 8 位 AES S-box。
鑑於對手知道以下內容:
- 完全訪問使用上述 Feistel 加密 16 位塊的程式碼
- 確切地知道兩個明文 - 密文對。
因此,鑑於這兩對,目的是找到將明文映射到密文的密鑰。
鑑於上述假設,這裡如何應用中間相遇攻擊?我嘗試使用與 2DES/3DES 相同的方法,但它的應用方式不同。我需要一些關於如何進行的指導。
我看不到“中間”值在哪裡,我應該從哪裡向前和向後計算以達到這樣的中間值。
**編輯:**忘了提Feistel密碼有4輪。
我們實際上只需要一個明文-密文對,但是第二個可以用作檢查候選密鑰的一種方式。
- 猜測最後的子鍵(即猜測所有子鍵)。
- 使用您的密鑰解密最後一輪密文。儲存此結果和您使用的子項。
- 對最終子鍵的所有 2^16 個候選者重複此操作。
- 猜測前三個子鍵。
- 使用這些密鑰,對明文進行前三輪加密。
- 如果您的中間加密結果和部分解密的密文之間存在衝突,那很好!你(可能)找到了鑰匙!您可以使用其他密文/明文對進行仔細檢查。
或者,如果您有足夠的儲存空間,您可以通過前兩輪解密(與最後兩輪加密相反)來建構部分解密密文的儲存。在這種情況下,您將暴力破解最後兩個子鍵的所有候選者,而不僅僅是最後一個。這需要儲存 2^(16 * 2) 個部分解密的密文,但加速比為 2^16。