單字母密碼密碼分析 下

2021-08-15 23:09:14 字數 3536 閱讀 6581

2. 演算法細節

2.1 一、二元詞試探

這個方法基於乙個假設:明文中的一元詞和二元詞都會出現在s,d集合中,如果出現了不在集合中的單詞,後面我們會做一步篩選來排除這些干擾。在這樣的前提下,我們用試探的方式逐一匹配s,d集合中的詞。

例如密文    di sygq t uspe tzsi ventzew sb st

我們找出密文中一元二元詞、,就可以假設有金鑰、,而sb-of可以得出{s-o, b-f},st-to可以得出{s-t,t-o}。將對映關係存入解碼字母表中,我們就會發現字母表存在衝突,即一元詞已經得出了{s-a},{t-i}這兩個對映關係,後面又出現了{s-t},{t-o}。

這時就要作一步取捨,假設一元詞的對映關係是正確的,放棄當前二元詞找到的對映關係。繼續在集合d中匹配下乙個單詞。這樣的匹配關係記錄下來就是一張**的形式,例如表1.1

表1.1

c\pof

toin

itnb

vnwv

假設放到解碼字母表時產生衝突,那麼{wv-in}的對應關係就要更改,以單詞頻率的先後順序方式查詢的話,下乙個可能性應該是明文單詞it,此時的對應關係表見表1.2

表1.2

c\pof

toin

itnb

vnwv

如果密文wv在遍歷了所有的二元詞都產生衝突情況下,這時我們就要考慮之前的試探配對是不是出錯了,基於我們假設的前提是篩選後的二元詞都會出現在集合d中的,所以這時要選擇放棄前乙個對映關係,這裡就是{bd-to},在解碼字母表中去除{b-t}及{d-o}的編碼。這時再讓密文wv重新查詢是否存在合適的明文與之匹配。表1.3是最後的匹配結果,找到了所有詞的合適的對映,這樣的過程類似於回溯執行,是一種試探的方法。

表1.3

c\pof

toin

itno

nbvn

wn當二元單詞都找不到合適的對應關係時,這就說明是上一部分的假設出錯了,即一開始設想的一元詞對應關係是不正確的,現在要返回去修改。一元詞密文與明文之間的對應關係如表1.4所示,類似於前面的做法,密文與明文的對映關係可以用vector或是array來儲存,回溯時修改裡面的數值即可。但不同的是一元詞沒修改一次,就繼續往下回到二元詞表中進行回溯,如果依舊衝突,則再返回一元表修改其中的對映關係。如此往復進行後,由於s,d集合十分小,這種情況我們很快就可以破解出這些詞的明文形式。

表1.4

c\pias

mkve

儘管上面破譯出來的字母可以通過篩選密文中二元詞頻率的方式來排除異常詞的干擾,如

2.2 三元詞分析

對於這樣的問題,我們就不能像二元詞頻率篩選一樣通過篩選三元詞來保證它們一定出現在t內,所以當我們遇到衝突時,例如

判斷一元二元詞分析成不成功,就可以通過計數器的大小作為標準,這裡設定乙個threshold,當threshold* 密文三元詞種類個數 > 計數器值時,我們認為前面的破譯結果就是正確的,否則返回到二元詞回溯繼續匹配。threshold可以作為破譯準確度的控制指標,不同值會影響篩查的嚴格程度,當threshold = 1時就認為密文中出現的所有三元詞都會出現在t中,這對小文字較管用。

下面就是乙個判斷條件

if (tripledecode(******cipherarray[2], letterdecode) >= cryptanalysis.threshold * ******cipherarray[2].size())
threshold = 0.8是經過後來大量的文字測試所得出來的乙個較通用的且破譯準確度高的值

2.3 最後的窮舉完整破譯

剩下的最後一步,到這裡至少60%的字母已經被破譯出來了,剩下的未知字母中大都屬於比較偏僻的字母,類似x,z等。他們在文字中出現的頻率也不高,且可以從頻率分布圖1中看出他們頻率都比較相近,這就很難再使用頻率分析的方法對它們做進一步分析。

剩下10個左右的未解秘字元其實實際看來金鑰空間並不是10!,隨機抽出乙個單詞,它可能存在的未破譯單詞是單詞長度的一半,通常乙個單詞長度不會超過10,那麼也就是5!大小的金鑰空間。所以我們完全可以直接用窮舉的方式對未破譯的單詞進行窮舉,然後到詞典中去查詢,查詢失敗則替換成另乙個k,當金鑰空間k已經遍歷一遍後依然找不到,那我們預設詞典單詞缺失,放棄這個密文單詞繼而破譯下乙個。

前面我們都無一例外的在做一件事,就是為了這一步。我們知道破譯密文最通用最有效的方法就是窮舉金鑰空間。但可不可行就需要看金鑰空間的大小了,窮舉的空間太大,我們就無法在理想時間內得到解。如密文單詞 xogokgoxu 這時可能變成xaragraxh,x從初始金鑰空間{a-z}現在變為{p,v, c},且這個單詞裡只剩下2個字母未破譯,蠻力法就顯得十分有效了。這時很快就能找到明文是paragraph。

窮舉過程

假設x-, u-,對窮舉可以用棧來儲存當前配對的字元位置,或是先前一維陣列的形式。演算法思想也是乙個回溯的過程,維護好當前的對應關係即可。

解碼效果

加密文字a1 短文本,單詞量1300 words,圖3.1

圖 3.1 a1(1300 words)

加密後密文

圖 3.1.1 a1_cipher

解碼結果

圖 3.1.2 a1_decode

準確率為93%,錯誤2個,此時threshold = 0.8。

設為

static final float threshold = 0.8f;
這時的結果見圖3.1.3,正確率100%。

圖3.1.3 a1_decode_2

選其他較大的文字再做測試

圖3.2 大文字 (400,000words)

密碼分析概述

密碼分析的方法主要有以下三種 1 窮舉攻擊 密碼分析者通過試遍所有的金鑰來進行破譯,顯然可以通過增大金鑰量來對抗窮舉攻擊。2 統計分析攻擊 密碼分析者通過分析密文和明文的統計規律來破譯密碼。對抗統計分析攻擊的方法是設法使明文的統計特性與密文的統計特性不一樣。3 解密變換攻擊 密碼分析者針對加密變換的...

82 密碼分析

82 密碼分析 問題描述 密碼分析學中常常需要統計字元出現的頻度。給定若干行短文,要求按字元出現的頻度由高到低輸出,當兩個字元出現的頻度相同時,按字元大小的順序輸出。注意 只需要統計英文本母的頻度,非英文本母一律忽略。輸入說明 輸入由多組資料組成。每組資料由一行長度不超過100的字串組成,不區分字母...

Linux下修改MySqL密碼 忘記密碼

解決mysql密碼錯誤 mysql u root p enter password error 1045 28000 access denied for user using password no 現在終於被我找到了解決方法,方法一 etc init.d mysql stop mysqld saf...