Classical-Cipher
在重複密鑰 XOR 密碼中查找密鑰長度
在一個舊的密碼學常見問題解答中,我發現了以下步驟,用於確定密碼反复異或的密鑰長度:
- 通過計算巧合發現密鑰的長度。(見蓋恩斯$$ GAI44 $$, 辛科夫$$ SIN66 $$.)**嘗試密文對自身的每個位移,**計算那些相等的字節。如果兩個密文部分使用了相同的密鑰,則超過 6% 的字節將相等。如果他們使用了不同的密鑰,那麼小於 0.4% 將是相等的(假設隨機 8 位字節的密鑰覆蓋正常的 ASCII 文本)。指示相等鍵的最小位移是重複鍵的長度。
粗體文本的措辭是我感到困惑的部分。鑑於我的明文等於字元串“這是一條秘密消息”,我是否會將前 n 個字節與從第一個偏移的第二組 n 個字節進行比較(例如,xor’d 版本的“Th " 與 “is”,如果我將 2 字節的密碼塊與自身進行比較)?
如果不是,那麼解釋這段經文的正確方法是什麼?謝謝你。
這看起來像是一種計算重合指數的滑動視窗方法。所以你會有類似的東西:
ABCDE FGHIJ KLMNO OACBD EFGHI JKLMN
給定足夠的密文,您會發現 IC 的長度很高;這是密文的候選密鑰長度,因為您已將兩個文本移動了一個密鑰長度。這種大小的倍數也將返回高 IC。
另一種通過迭代不同長度的密鑰大小、計算該長度的相鄰密文塊的漢明距離、將距離標準化為密鑰長度並將最小值作為密鑰長度來強制 Vigenère 密碼的密鑰長度的另一種方法。在這種情況下,給定密文:
CYPHERCYPHERCYPHERCYPHER
對於 keysize 4 的猜測,您會將文本拆分為
CYPH ERCY PHER CYPH ERCY PHER
並以這種方式獲得漢明距離。您將繼續使用更多的鍵大小,最終應該“解決”在 6 上(至少在這個高度人為的範例中)。