现代密码学1.3--古典密码/historical cipher
現代密碼學1.3--古典密碼/historical cipher
- Caesar's cipher/凱撒密碼
- The shift cipher/移動密碼
- The mono-alphabetic substitution cipher/單字母替代密碼
- 對于shift cipher的進階版攻擊
- The Vigenere(poly-alphabetic)cipher/多字母替代密碼
- 密鑰長度已知
- 密鑰長度未知
- 總結
博主正在學習INTRODUCTION TO MODERN CRYPTOGRAPHY (Second Edition) --Jonathan Katz, Yehuda Lindell,做一些筆記供自己回憶,如有錯誤請指正。整理成一個系列現代密碼學,方便檢索。
這一篇講了一些古典密碼,思想是“設計安全的密碼方案是很難的”,所有介紹的古典密碼都已經被破解了。
Caesar’s cipher/凱撒密碼
世界上最古老的有記載的密碼之一。
加密方式:將每個字母向前移動三位,如a→D,b→Ea\rightarrow D,b\rightarrow Ea→D,b→E。
攻擊方式:沒有key,知道加密方式的都能破解。
The shift cipher/移動密碼
進階版Caesar’s cipher,加入key。
加密方式:
Gen: Gen key k∈{0,……,25}k\in \{0,……,25\}k∈{0,……,25};
Enc: Enck(m1,……ml)=c1,……,clEnc_k(m_1,……m_l)=c_1,……,c_lEnck?(m1?,……ml?)=c1?,……,cl?, where ci=[(mi+k)c_i=[(m_i+k)ci?=[(mi?+k)mod 26]26]26]
Dec: Deck(c1,……cl)=m1,……,mlDec_k(c_1,……c_l)=m_1,……,m_lDeck?(c1?,……cl?)=m1?,……,ml?, where mi=[(ci?k)m_i=[(c_i-k)mi?=[(ci??k)mod 26]26]26]
攻擊方式:密鑰空間=26,密鑰空間太小,只要從26種可能明文中找到有意義的即可。至少需要2702^{70}270大小的密鑰空間。
The mono-alphabetic substitution cipher/單字母替代密碼
進階版shift cipher,改變map方式。
加密方式:之前的map是將字母向前移x位,現在要求只要滿足雙射即可。
攻擊方式:雖然現在密鑰空間(=26!)變大了可以通過英文字母的頻率分布來破解,如e是最常見的英文字母,u通常跟在q后面,h通常跟在t、e后面。
對于shift cipher的進階版攻擊
之前對shift cipher攻擊是遍歷26種可能明文,判斷有意義的明文。但是,“有意義”是機器較難判定的。
以頻率為啟發,對于26個英文字母來說,∑i=025pi2=0.065\sum^{25}_{i=0}p^2_i=0.065∑i=025?pi2?=0.065,pip_ipi?是第iii個英文字母在正常文本段中出現的頻率。我們要找移動的位數kkk,假設移完后的頻率用字母qqq表示,那么有qi+k=piq_{i+k}=p_iqi+k?=pi?,即∑i=025pi?qi+k≈0.065\sum^{25}_{i=0}p_i\cdot q_{i+k}\approx 0.065∑i=025?pi??qi+k?≈0.065,通過這個式子我們可以找到密鑰kkk。
The Vigenere(poly-alphabetic)cipher/多字母替代密碼
進階版mono-alphabetic substitution cipher,同時對多個字母進行map。
加密方式:key是字母串,如"cafe",則對于每4個明文字母進行"cafe"
的移位。這樣可以使字母頻率變得“平滑”,通過頻率看不出是哪個字母,如"a"通過"c"移到“c”,通過"f"移到"f"。
攻擊方式:這個的攻擊比較難,要求足夠長的密文長度。
密鑰長度已知
這個比較好做一點,比如密鑰長度為t,那我們可以把密文分成t塊,每一塊可以被看作一個mono-alphabetic substitution cipher加密的密文。而且cj,cj+t,cj+2t……c_j,c_{j+t},c_{j+2t}……cj?,cj+t?,cj+2t?……是一個用密鑰key=kjk_jkj?加密的shift cipher密文,我們稱其為第j個流。
- 用暴力破解:將每個流按shift cipher遍歷,需要26次;遍歷t個流,即需要26t26^t26t次。
- 用頻率分布破解:對于每個流,我們通過對頻率的計算,得到每個流的明文;共t個流,即需要26?t26\cdot t26?t次。
密鑰長度未知
不知道密鑰長度的話,會比較難一點,我們盡量推斷出密鑰長度。
- 假設密鑰長度最大為T,即密鑰長度t∈{1,2,……,T}t\in \{1,2,……,T\}t∈{1,2,……,T},則對上述辦法遍歷T次。
- Kasiski’s method:把關注點放在長度為2或3的密文,如"the"、“you"等常見單詞。一般是會被映射成不同的結果,比如"the"通過"caf"映射成"vhj”,通過"afe"映射成"tmi",但是一旦某一次"the"對應的密鑰仍是"caf",那么還會出現相同的"vhj"。當我們找到兩個"vhj",我們可以適當推斷這不是巧合,那么這兩個"vhj"之間的距離一定是密鑰長度的整數倍。
- index of coincidence method:對于每個流,因為等同于shift cipher,所以字母頻率分布是類似的,即qi+j=piq_{i+j}=p_iqi+j?=pi?,也就是說仍有∑i=025qi2=∑i=025qi2≈0.065\sum_{i=0}^{25}q_i^2=\sum_{i=0}^{25}q_i^2\approx 0.065∑i=025?qi2?=∑i=025?qi2?≈0.065。也就是說,如果我們預測的密鑰長度是正確的,那么方差也會近似正確。我們令Sα=∑i=025qi2S_\alpha=\sum_{i=0}^{25}q_i^2Sα?=∑i=025?qi2?,如果α=t\alpha=tα=t,那么S≈0.065S\approx 0.065S≈0.065。
總結
以上密碼的密鑰長度越來越長:
- Caesar’s cipher:密鑰長度為0
- The shift cipher:密鑰長度為t∈{1,2,……26}t\in \{1,2,……26\}t∈{1,2,……26}
- The mono-alphabetic substitution cipher:密鑰長度:密文長度
- The Vigenere cipher(poly-alphabetic):密鑰長度是一個長度不定的字符串,且一直重復
可以看出,密鑰長度越長,破解該問題所需要的密文長度也應該更長。
總結
以上是生活随笔為你收集整理的现代密码学1.3--古典密码/historical cipher的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 现代密码学1.2--Kerckhoffs
- 下一篇: 现代密码学1.4--现代密码的三大原则