使用標準問候等的已知明文攻擊
在所有現代密碼中,即使一位輸入發生變化,那麼由於擴散,一半的輸出也會發生變化。考慮到這一點,知道標準稱呼等(“Hello Alice”或消息的其他已知部分)究竟將如何用於發起攻擊。您不知道整個純文字,而只知道純文字的一部分。那麼它到底有什麼幫助呢?
已知明文攻擊 (KPA) 是低於選擇明文攻擊 (CPA) 的安全級別,我們希望所有密碼中至少有 CPA。實際上,我們在現代密碼學中想要更多;工業註冊會計師。
經典密碼學時代包含大量可以通過 KPA 攻擊輕鬆破解的範例;移位、排列、Vegenere 和Hill密碼就是一些例子。
在現代,KPA 可用於如下鍵搜尋。
- 蠻力攻擊; 搜尋所有鍵
# c = E(k,m) for some key k we are looking for for i in keys: if c == E(i,m): return i
歷史上一個有趣的例子是RSA 的 DES 挑戰,其中包含給定的部分資訊**。未知的資訊是:**在完整的明文上,參賽者需要在給定完整密文的情況下找到密鑰。他們使用類似於上述的蠻力攻擊。由於 DES 的密鑰大小為 56 位,因此攻擊成功。
以上仍然可以認為是一種經典的尋找鑰匙的方法,技術進步有助於尋找鑰匙。1992 年,Matsui 和 Yamagish 在他們的小說論文上發起了一場現代小說攻擊
這現在稱為線稿攻擊。在攻擊 DES 時,它需要 $ 2^{43} $ 松井在 1994 年已知的明文。
如果您想了解線性攻擊,Heys的教程是一個很好的起點。
現在回到你的具體問題;
(“Hello Alice”或消息的其他已知部分)用於發起攻擊。您不知道整個純文字,而只知道純文字的一部分。那麼它到底有什麼幫助呢?
首先,根據Kerckhoff 原理,我們假設除了我們假設的所有關於目標系統的密鑰,例如消息如何轉換為字節進行加密。
- 如果該位置在 RSA DES 挑戰中是已知的,那麼如果適合一個塊,則該知識可以很容易地轉換為已知明文。AES 至少需要 16 個字元,DES 至少需要 8 個字元。
為DES和
Hello Alice
形成多個塊。如果您對 DES 進行暴力破解,那麼第一個塊可用於查找關鍵候選者,是的,候選者不止一個。然後可以使用下一個塊的解密來查明消息。Hello Al``ice?????
# c = E(k,m) for some key k # we are looking for the possibele key for full known message block m for i in keys: if c == E(i,m): m' = D(i,c') # c' is the other message blocks if m' is a valid string # check the validity of m' return i
- 一種特殊情況,如果我們沒有完整的塊,則通過解密執行暴力破解,並且對於包含部分資訊的每個可能的候選者,通過解密其餘密文來查找有意義的字元串。這可以使用 Linux
string
命令之類的工具自動化,並且可能在最後檢查 PKCS#5 填充將消除大多數候選者。
- 如果位置未知
與蠻力相比,這是一個需要解決的小問題,並且實際上取決於消息的大小。如果消息大小為 $ t $ 並且已知的消息部分是 $ l $ 然後需要尋找 $ t-l $ 職位。因此,蠻力的成本乘以 $ t-l $ . 對於短消息,這不是一個真正的問題,但是當消息大小超過 $ 2^{32} $ 那麼蠻力成本就變成了 $ 2^{80} $ 對於 DES 和 $ 2^{160} $ 對於 AES。