維吉尼亞密碼
維吉尼亞密碼(Vigenere Cipher)是使用一系列凱撒密碼組成密碼字母表的加密算法,屬於多表密碼的一種簡單形式。
在開始學習維吉尼亞密碼前,首先複習一下凱撒密碼。
凱撒密碼
凱撒密碼是一種比較簡單的古典密碼,僅僅將明文的每個字符偏移相同的偏移量,自然這種方式的加密破譯起來是非常簡單的。
因爲在密文較多的情況下,可以通過字頻統計找出每個字母出現的頻率,然後根據對應的字頻統計圖直接找出密文字母對應的明文,然後計算出偏移量,對所有字符統一進行解密即可。
針對凱撒密碼的這個弱點:字母出現的頻率易被統計
,於是衍生出了維吉尼亞密碼。
加密原理
核心原理
凱撒密碼因爲字母出現的'頻率特徵'易被統計分析
所以維吉尼亞密碼加密的核心就在於:
`通過多套字符加密明文來混淆字母出現的頻率`
例子分析
明文:aaa
加密方式:凱撒/維吉尼亞密加密
1.凱撒加密
明文 | 偏移量 | 密文 |
---|---|---|
a | +3 | d |
a | +3 | d |
a | +3 | d |
密文:ddd
2.維吉尼亞加密
明文 | 偏移量 | 密文 |
---|---|---|
a | +1 | b |
a | +2 | c |
a | +3 | d |
密文:bcd
在例子1中:
加密字符'a'所使用的的偏移量都是一樣的
所以字母'a'出現的頻率並沒有變
則可以通過字頻統計直接找到字母之間的對應關係
但在例子2中:
加密字符'a'使用的偏移量不同
'a'被分別替換成了'b'、'c'、'd'
所以字母'a'出現的頻率沒法直接統計了
則字頻分析的方法就暫時失效了
以上便可以簡單瞭解到兩種加密方式之間的關係,甚至可以發現,其實維吉尼亞密碼就像是採用不同偏移量進行加密的多套凱撒密碼的組合
。
加密方法(表格法)
在學習加密方法之前,必須先看懂該表格
用來加密解密的維吉尼亞表格
這一表格包括了26行字母表,每一行都由前一行向左偏移一位得到。
- 加密公式:
C=(P+K)%26
- C:密文(Ciphertext)
- P:明文(Plaintext)
- K:密鑰(Key)
下文默認 字母表行號=密鑰=Key(0~25), 首行爲明文
具體使用哪一行字母表進行編譯是基於密鑰(0~25)進行的,在加密過程中會不斷地變換。
例子:
明文:abcde
密鑰:owlow(由關鍵詞重複生成,這裏使用:owl)
#密鑰:14,22,11,14,22(對應行號)
1.使用維吉尼亞表格進行加密:
明文 | 密鑰 | 密文 | 說明 |
---|---|---|---|
a | o(14) | o | a列與o行相交處,即爲密文o |
b | w(22) | x | b列與w行相交處,即爲密文x |
c | l(11) | n | c列與l行相交處,即爲密文n |
d | o(14) | r | d列與o行相交處,即爲密文r |
e | w(22) | a | e列與w行相交處,即爲密文a |
所以得到密文:oxnra
。
2.使用同餘進行加密:
用數字0~25代替a ~ z,則維吉尼亞的加密方式可用同餘的表示爲:
解密原理
解密的過程與加密相反。
這裏簡單以一個例子說明:
密文:oxn
密鑰:owl
1.使用維吉尼亞表格解密:
密文 | 密鑰 | 明文 | 說明 |
---|---|---|---|
o | o | a | 看o行,找密文o所在列,其列首即爲明文a |
x | w | b | 看w行,找密文x所在列,其列首即爲明文b |
n | l | c | 看o行,找密文n所在列,其列首即爲明文c |
解密得到明文:abc
2.使用同餘解密:
用數字0~25代替a ~ z,則維吉尼亞的解密方式可用同餘的表示爲:
解密方法
卡希斯基試驗
基本原理:
類似the這樣的常用單詞
如果它們被同樣的密鑰字母進行了加密
那麼它們在密文中會重複出現
可利用該點破譯出密鑰的長度
特點:
對於更長的段落此方法更爲有效
因爲通常密文中重複的片段會更多
詳解見卡希斯基試驗
弗裏德曼試驗(重合指數法)
基本原理:
使用重合指數
描述密文字母頻率的不勻性
從而可估計密鑰長度
特點:
只是一種估計,會隨着文本長度的增加而更爲精確
詳解見弗裏德曼試驗
頻率分析
基本原理:
一旦能夠確定密鑰的長度
密文就能重新寫成多列,列數與密鑰長度對應
這樣的每一列其實就是一個凱撒密碼
而此密碼的密鑰則對應於維吉尼亞密碼密鑰的相應字母
詳解見頻率分析