事件
在阅读到关于密码学加解密的时候,突然间想到是否在未知iv值的情况下手工破译ROT密文。
于是觉得利用频率分析来破解也许可行,以下是我的思路。
示例 “FRQJUDWXODWLRQVBRXJRWLW”
1.绘制索引表格
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
2.频率分析
在英文中 E,T,A,O,N,R,I,S,H 这些字母使用频率是最高的
1 |
2 | 3 | 4 | 5 |
6 | 7 | 8 |
9 |
10 | 11 | 12 | 13 | 14 |
15 |
16 | 17 | 18 |
19 |
20 |
21 | 22 | 23 | 24 | 25 | 26 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
A |
B | C | D | E |
F | G | H |
I |
J | K | L | M | N |
O |
P | Q | R |
S |
T |
U | V | W | X | Y | Z |
1.统计字符串中出现的最高次数频率的字符
"FRQJUDWXODWLRQVBRXJRWLW"
字母 | 出现次数 |
---|---|
B | 1 |
D | 2 |
F | 1 |
J | 2 |
L | 2 |
O | 1 |
Q | 2 |
R |
4 |
U | 1 |
V | 1 |
W |
4 |
X | 2 |
3.假定向量iv
定义一个iv
向量,X
为加密字符串中出现的最高次数频率的字符的索引
i v = [ X − 5 X − 20 X − 1 X − 15 X − 14 X − 18 X − 9 X − 19 X − 18 ] \mathbf{iv} = \begin{bmatrix} X - 5 \\ X - 20 \\ X - 1 \\ X - 15 \\ X - 14 \\ X - 18 \\ X - 9 \\ X - 19 \\ X - 18 \end{bmatrix} iv= X−5X−20X−1X−15X−14X−18X−9X−19X−18
本次示例中R
的索引(18
)作为X
带入计算得
iv=[13,−2,17,3,4,0,9,−1,0]
4.连贯性猜解
密文:"FRQJUDWXODWLRQVBRXJRWLW"
F | R | Q | J | U | D | W | X | O | D | W | L | R | Q | V | B | X | J | R | W | L | W |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
6 | 18 | 17 | 10 | 21 | 4 | 23 | 24 | 15 | 4 | 23 | 12 | 18 | 17 | 22 | 2 | 24 | 10 | 18 | 23 | 12 | 23 |
将密文索引逐一带入Pi
,并且每一个索引值都要减去假定iv
值
S i , j = ( ( ( P i − i v j ) m o d 26 ) + 26 ) m o d 26 S_{i,j} = (((P_i - iv_j) \mod 26) + 26) \mod 26 Si,j=(((Pi−ivj)mod26)+26)mod26
先获取前三个字母
P_i (F=6) |
6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 |
---|---|---|---|---|---|---|---|---|---|
iv_j |
13 | -2 | 17 | 3 | 4 | 0 | 9 | -1 | 0 |
S_{0,j} |
19 | 8 | 15 | 3 | 2 | 6 | 23 | 7 | 6 |
对应字母 | S | H | O | C | B | F | W | G | F |
P_i (R=18) |
18 | 18 | 18 | 18 | 18 | 18 | 18 | 18 | 18 |
---|---|---|---|---|---|---|---|---|---|
iv_j |
13 | -2 | 17 | 3 | 4 | 0 | 9 | -1 | 0 |
S_{1,j} |
5 | 20 | 1 | 15 | 14 | 18 | 9 | 19 | 18 |
对应字母 | E | T | B | O | N | S | I | T | S |
P_i (Q=17) |
17 | 17 | 17 | 17 | 17 | 17 | 17 | 17 | 17 |
---|---|---|---|---|---|---|---|---|---|
iv_j |
13 | -2 | 17 | 3 | 4 | 0 | 9 | -1 | 0 |
S_{2,j} |
4 | 19 | 0 | 14 | 13 | 17 | 8 | 18 | 17 |
对应字母 | D | S | A | N | M | R | I | S | R |
根据相同的 iv_j
进行整理,我们按照 iv_j
的顺序 逐列组合 得到最终字符串(寻找具有单词连贯性的字符):
iv_j |
第 1 行 (F=6 ) |
第 2 行 (R=18 ) |
第 3 行 (Q=17 ) |
---|---|---|---|
13 | S | E | D |
-2 | H | T | S |
17 | O | B | A |
3 |
C |
O |
N |
4 | B | N | M |
0 | F | S | R |
9 | W | I | I |
-1 | G | T | S |
0 | F | S | R |
5.解密
仅仅取iv_j=3
继续依次计算解密
明文:CONGRATULATIONSYUGOTIT
"CONGRATULATIONS YOU GOT IT"
最终iv=3