Encryption

K Friedman - 兩篇文字解釋

  • July 3, 2016

我讀了 $ K $ -Friedman 測試以確定 Vigenère 密文的周期,我理解這樣的事情:

$ K $ -弗里德曼測試試圖通過計算一些值來找出密碼的周期 $ K(C,C^n)n $ , 在哪裡 $ C^n $ 是密文 $ n $ 向左移動,從而確定密碼的最可能值。

但在內心深處,弗里德曼測試做了什麼?重疊兩個文本並看到一致的索引?有人可以更好地解釋這種方法嗎?

為簡單起見,我們假設您的短期“密碼”只是與明文進行了異或運算。所以我們有這樣的加密程序:

for(int i = 0; i < plaintext_len; i++){
  ciphertext[i] = plaintext[i] ^ password[i % password_len];
} 

當您通過 password_len 移動密文並將其與原始密文異或時,您將取消密碼並獲得原始明文的異或和明文的移位版本。

ciphertext[i] ^ ciphertext[i + password_len] = 
plaintext[i] ^ password[i % password_len] ^ plaintext[i + password_len] + password[ (i + password_len) % password_len] = 
plaintext[i] ^ plaintext[i + password_len] 

請注意,如果結果中有 0 字元,則明文中的相應符號是相等的。自然文本的此類事件的機率遠非統一,並且取決於明文語言(對於英語,它是 0,0644)。如果句點猜測錯誤,則結果中特定字元為 0 的機率等於 $ 1/m $ 在哪裡 $ m $ 是字母表中符號的數量,對於英語來說,它大約是 0,03856。

因此,您已經掌握瞭如何確定週期猜測是正確還是錯誤的規則 - 只需移動密文,將其與原始密文異或,計算零的頻率。如果它接近 0,0644 - 你的猜測可能是正確的,它接近 0,03856 - 你的猜測幾乎不正確。

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