Xor

明文 XOR’d 與 keylength-shifted 明文

  • January 2, 2015

在本週解決(簡單…)Project Euler 密碼問題時,我在將密鑰長度確定為後反复看到破解密碼的說明:

‘將密文移動該密鑰長度並將其與自身進行異或。這將刪除密鑰並為您留下明文 XORed,明文移動了密鑰的長度’

所以我可以理解這是如何將密鑰從等式中刪除的,但我看不出明文 XORd 與由 keylength 移位的明文是如何更易於處理的。在我看到的許多關於此的參考資料中,沒有人跟進如何解決 plaintext^shiftedPlaintext 片段。它似乎與plaintext^keyPhrase 真的沒有什麼不同。

關於為什麼這會使問題更容易解決,我缺少什麼?什麼方法可以處理這部分問題?

好吧,如果我們有plaintext^shiftedPlaintext,我們擁有的是值 $ P_i \oplus P_{i+k} $ , 在哪裡 $ k $ 是班次的長度。

這意味著什麼?好吧,如果我們考慮這些值 $ P_i \oplus P_{i+k} $ , $ P_{i+k} \oplus P_{i+2k} $ , $ P_{i+2k} \oplus P_{i+3k} $ , … 我們得到一個鏈,如果我們猜測其中一個值 $ P_{i+nk} $ 對於一些 $ n $ ,我們可以立即重構鏈中的所有其他明文字節;從而給我們每個正確的值 $ k $ 明文字節。

這可以通過多種方式加以利用。一種方法是拖拽嬰兒床;我們猜測一個常見的詞(英語的規範嬰兒床是“the”)出現在一個特定的位置,並看看這對明文中的其他地方意味著什麼;如果有意義,那麼它可能是正確的(我們有大量的明文;這為其他嬰兒床提供了有用的上下文);如果它沒有意義,我們會在別處嘗試我們的嬰兒床。

此外,如果明文包含空格,那麼 ASCII 的一個有用事實可能是有用的;字母有第 6 位設置,空格有第 6 位清除(雖然數字和標點符號也有第 6 位清除,但這些比較少見)。所以,如果我們看到 $ P_i \oplus P_{i+k} $ 設置了第 6 位,那麼一個很好的猜測是 $ P_i $ 或者 $ P_{i+k} $ 是一個空間;充當 1 個字元的嬰兒床。

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