Playfair 密碼的密碼分析是如何工作的?
我有一組 Playfair 加密的數據,我試圖在沒有密鑰的情況下破解它們。我知道我需要分析二元組;我目前已經計算出解密為
th
、er
、in
和的內容he
,並弄清楚了網格中的位置th
和位置。he
然而,現在我被難住了。我查看了“Polygraphic Substitution Systems 解決方案”欄位手冊,但沒有幫助。如何完成對 Playfair 的密碼分析,解密了幾個 bigrams 並知道其中兩個在網格中的位置?
有幾種可用的算法可以攻擊 Playfair 密碼。
爬山可能是一種選擇。基本上它從一個隨機密鑰開始(假設它是最好的)並解密密碼。使用適應度函式對生成的明文進行評分。然後將小的更改應用於密鑰,如果修改後的密鑰的結果明文得分更高,則將修改後的密鑰視為最佳密鑰,重新開始對密鑰應用微小更改的過程,直到找不到更好的密鑰.
有時爬山算法找不到最佳解決方案,算法會卡在局部最大值。解決此問題的一種有效方法是使用 Shotgun 爬山(請參閱上面提供的 Wikipedia 連結)。
或者您可以使用遺傳算法。該算法模仿自然選擇的過程。
如果您對線上 Playfair 破壞者感興趣。我認為這裡使用了爬山算法。它是用 Javascript 編碼的,因此可以研究原始碼。
如果您對如何對明文進行評分感興趣: Quadgram Statistics as a Fitness Measure。
這並不優雅,但蠻力方法是編寫一個程序,創建一個 25x25 有向圖的表(假設 i=j),產生 625 行。我還將添加一個列,列出每個有向圖的相對頻率(給定足夠的密文,您可以使用它來辨識頻繁的替換,正如您已經完成的那樣)。你從 625 開始!可能的解決方案,但在辨識出 n 個有向圖後,它會下降到 (625-n)!但是,如果語言中最長的單詞是 N 個有向圖,那麼取一個 2N 的部分並對其進行解碼(最好使用已經解碼了一些有向圖的部分)。我在想整體的複雜性變成了選擇類似的東西 $ \frac{(625-n)!}{(625-2N-n)!} $