Cryptanalysis
在攻擊鍵控算法時,如何知道輸出何時正確?
我一直在閱讀一些關於密碼分析的文章,我想知道如何執行對密鑰起作用的攻擊算法。
很明顯,像 MD5 這樣的算法是如何被攻擊的,在虛擬碼中:
hashed = 'blablabla' while guess != hashed: guess = md5(inc(guess)) print('{hashed} is {guess}')
但是我看不出你會如何對例如 XTEA 執行類似的攻擊。要通過解密過程攻擊它,您將沒有什麼可以比較的猜測,並且通過加密過程攻擊它,您必須猜測 if
encipher(key, data) == enciphered_data
,即猜測數據的內容和密鑰,看起來像它將花費無法計算的時間,尤其data
是在 64 位塊的情況下。暴力破解這麼大的空間真的是唯一的選擇嗎?
通常,蠻力攻擊是使用已知明文執行的,其中消息 $ m $ 及其密文 $ c = \operatorname{XTEA}(k,m) $ 可用。事實上,一個人可能需要不止一個才能準確找到密鑰,因為一個密鑰選擇排列並且在這一點上 $ m $ 映射到相同密文的不同密鑰可以選擇多個排列。
在僅密文攻擊中,您可能需要一些額外的資訊來測試結果,即候選明文。選項是;
- 編碼:例如在 ASCII 編碼中,MSB 通常為 0。
- 填充:塊密碼如果不用於 CTR 模式等流模式,則需要填充。填充可用於辨識正確性。填充可以是 PKCS#5,就像在RSA DES 挑戰中一樣,這是一種已知的明文攻擊和暴力破解。
- 語言:如果在搜尋過程中目標語言比目前明文已知,則可以
string
在 Linux 中測試類似命令的單詞每個選項都可以增加您的更改。擁有更多的密文消息可以消除更多的錯誤候選者。但是請記住,如果選項不是 100% 正確,則可能會導致找到密鑰。
如果沒有選項,則不測試候選鍵的有效性。
在學術歷史上,T.Siegenthaler 使用 ASCII 破解組合 LFSR 與僅密文攻擊。
暴力破解這麼大的空間真的是唯一的選擇嗎?
如果算法沒有弱點,以上是唯一的方法。對於 XTEA 中的攻擊,來自 Wikipeida
- 2004 年,Ko 等人。對 64 輪 XTEA 中的 27 輪進行了相關密鑰差分攻擊,要求 $ 2^{20.5} $ 選擇明文和時間複雜度 $ 2^{115.15} $ (Ko 等人,2004 年)。
- 2009 年,Lu 提出了對 36 輪 XTEA 的相關密鑰矩形攻擊,打破的輪數比之前發布的任何 XTEA 密碼分析結果都多。本文提出了兩種攻擊,一種沒有和有弱密鑰假設,對應於 $ 2^{64.98} $ 字節的數據和 $ 2^{126.44} $ 操作,和 $ 2^{63.83} $ 字節的數據和 $ 2^{104.33} $ 分別操作。
這些需要遠不止一個已知的明文來執行攻擊,如果您正在執行暴力攻擊,這很常見。
最後一點
如果加密算法或方案可以通過僅密文攻擊破解,則返回執行。
在現代密碼學中,我們至少需要 CPA 安全密碼。