Stream-Cipher

與三個不同的密文和重複密鑰進行異或密碼,密鑰長度已知。如何找到明文?

  • February 1, 2015

假設我們有三種不同的明文(所有字母,AZ): $ x $ , $ y $ 和 $ z $ , 每個長度 $ 21 $ . 讓鑰匙, $ a $ , 也是有長度的 $ 21 $ .

現在,我們擁有的是 $ x \oplus a $ , $ y \oplus a $ 和 $ z \oplus a $ . 我們怎樣才能知道 $ x $ , $ y $ 和 $ z $ 由此?

我環顧了網路,發現打破這種情況的常用方法是對類型的值進行統計分析和字典攻擊 $ x \oplus y $ 我們可以從中得到 $ {(x \oplus a)} \oplus {(y \oplus a)} $ . 我為此使用了 xortool,從中獲得的密鑰為明文提供了隨機垃圾,因此,這不起作用。

我不禁想到,由於我們有三種不同的密文(而不是大多數字典攻擊中使用的兩種),我們必須有一些額外的約束,我們可以對可能的密鑰集施加一些額外的約束,但我做不到. 任何幫助表示讚賞。如果您可以提供任何工具的連結,那也很棒。

您正在使用字節異或和三個明文 $ x,y,z $ 帶有一個小字母(AZ,我假設它的意思是 ASCII 值 0x41-0x5a)。然後知道 $ a \oplus x $ ,在某個索引處,我們知道所有可能的值 $ a $ ,在相同的指數,即 $ {0x41 \oplus (a \oplus x),\ldots, 0x5a \oplus (a \oplus x)} $ . 但是我們還有兩個約束來自 $ a \oplus y $ 和 $ a \oplus z $ 在那個索引。這三個集合的交集是選項的集合 $ a $ 在那個索引。這可能已經減少了每個索引的選項。

然後你必須使用可能的明文,說’THE’(如果你有英文文本)。您可以在所有位置嘗試“THE”作為文本的一部分 $ x $ , 計算 $ a $ 在這些對應的地方,然後計算 $ y $ 和 $ z $ 也是。檢查結果是否看起來像(部分)英語單詞,並嘗試擴展其他文本中的單詞。也可以在文本中嘗試“THE” $ y $ 和 $ z $ 在所有位置。您可以立即中止所有嘗試 $ a $ 不在我們上面計算的集合中。Google“深度閱讀”。使用三個文本,這應該會產生相當快的結果。所有這些都很容易自動化。

我認為,僅對 21 個字元進行統計不會一路走好。您確實需要對純文字的語言等有所了解。

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