2011-09-07 115 views
1

我正在讀「加密和網絡安全」一書,我一直在試圖編寫該程序在單音字母密碼上執行字母頻率攻擊。該程序需要生成前10個可能的純文本。字母頻率java

我有點卡住了這可能是如何工作的,我是否認爲它並不總是這樣的情況,即「可能的」純文本生成將實際上匹配原始純文本?

如果有人能夠提供一些關於程序如何流動的指導,那將是非常棒的。

到目前爲止,我有代碼;

讀取密文的文件。 掃描密文併產生與頻率百分比匹配的字母的散列圖。 將英文語言的相對頻率存儲在二維數組中。

我的下一步是嘗試按照與char的百分比最接近的匹配順序排列數組。 這是正確的方向嗎?

任何建議將是偉大的!

+0

你可以發佈你目前使用的代碼嗎? – Woot4Moo

回答

1

我不是密碼學方面的專家,但我認爲你是過於簡單化了。是的,密碼學家的一個有用的工具是字母的相對頻率表。但是,我認爲,任何給定的文件將完全匹配整體頻率的概率非常小。正如我記得的那樣,在英語中,最常見的字母是E,T,A,O,N,R,I,S,H。假設在你的加密文本中,你發現9個最常見的字母是A,B,C ,D,E,F,G和H.它是否自動遵循A必須映射到E,B到T,C到A等?當然不是。假設這個特定的文檔是關於安裝施樂打印機的。頻繁出現的「Xerox」這個詞可能會使X遠遠高於平均文檔。假設這是唯一不尋常的頻率,那麼現在你最頻繁的字母是E,T,X,A,O,N,R,I和S.假設A映射到E,B到T仍然有效。但是當X停留在序列中間時,從那裏開始,所有假定的映射都是錯誤的。

我認爲你實際上打破這種簡單的替代密碼的方式是嘗試一個或兩個字母,然後檢查結果,看看哪些是合理的。您還可以查找其他線索,例如經常一起出現的字母,或者通常出現在單詞開頭或結尾的字母(假設加密文本保留了單詞分隔符)。

作爲學習編程練習,這可能很有趣。但作爲一個嚴肅的密碼破解程序......並不那麼簡單。

+0

這正是我以爲,從我從事過我曾用過試驗和錯誤的例子,直到我得到正確的純文本。我真的不知道沒有人爲干預的情況下程序如何做到這一點(這就是問題所在) – Lunar

+1

簡短回答:是的。長的回答:我不懷疑你可以編寫一個程序來打破簡單的替代密碼而無需人工干預。它只需要更復雜。在某些時候,它將不得不在字典中試圖查看它們是否映射到真正的英語單詞,可能是進行一定程度的語法檢查等。 – Jay

+0

@Jay:你幾乎肯定不需要語法檢查。對於任何非平凡的輸入,產生大量英文單詞的錯誤映射的可能性很小。 –

1

如果它是單字母的,你最好使用蠻力來旋轉可能的組合。既然你是在做一個學習練習,我會盡力幫助你。因此,IIRC英語中最常見的兩個字母是ET(這可能是錯誤的)。所以你想要做的是用英語說出最常見的5個最常用的字符(這裏再次假設它是英語)併爲每個字符賦予一個加權值。通過這樣做,您可以獲取密文並記錄每個字符A-Z的頻率,並將它們與前5個字符及其加權值進行比較。在你有這麼多信息的時候,它是相當直接的,以破除密文的其餘部分。

延伸閱讀:attacking ciphers

+0

我已經進行了紙上的攻擊,它工作正常,我認爲單字母密碼也包含隨機字母密碼?在這種情況下,蠻力攻擊不會奏效,因爲密鑰太多了。 – Lunar

+0

有很多針對單字母密碼的攻擊。 – Woot4Moo

+1

@lunar此鏈接可能會有所幫助:http://unsecure.co.uk/attackingmonoalphabeticciphers.asp – Woot4Moo

1

理論上你可能會得到多個可能有效的英語輸出,但如果你輸入的文字是不平凡的,也幾乎可以肯定只有一個主要由英文單詞輸出(?)。

您可以從最可能的映射開始,然後通過將映射創建的輸出中的單詞與英文單詞字典進行比較來計算映射產生的英文單詞的數量。如果英語單詞的數量較少,請嘗試下一個最可能的映射等。

使用英語字典作爲控件可以讓您的算法知道它已完成。

您可以通過使用顯式的語言知識來提高算法的效率。例如,英語中只有兩個1個字母的單詞(I,a)和一個兩個字母的單詞。如果輸入文本包含一個或多個短語,則可以使用它們來包含或排除可能的映射。

+0

我不是說這就是你說的,但是:理論上,你可以嘗試每一個可能的映射,然後選擇給出最多英文單詞的那個。 (在正確的映射中,你不能指望100%英文單詞,因爲文本可能包含專有名稱或其他技術或其他不太明顯的單詞,而不在你的字典中。)但是有26個!映射,這是一個巨大的數字。即使有一臺電腦,我猜想全部嘗試都是不切實際的。 – Jay

0

假設這不僅僅是一個移位密碼(在這種情況下,前10個字符的蠻力方法可以快速揭示密鑰並允許您破解密碼) - 您最好的選擇是首先使用頻率分析猜測三個最常見的字母(標準英語中的E,T,A)。然後,您可以將其與另一個頻率分析一起用於最常見的字符對或三元組。特別是,如果你已經正確識別'T'和'E',那麼經常出現的TXE表明X可能是H.

編程這一切都是非常棘手的,手動方法可能是最好的。或者,對前6到10個字符采用暴力方法來識別字典中任何明智的字詞。考慮到密碼文本,您可以通過忽略其概率低於某個閾值的密碼字母來減少所需的計算。