实验六 古典密码与破译
保密通讯在军事、政治、经济斗争和竞争中的重要性是不言而喻的.
在斗争或竞争中,一方要将信息传递给己方的接收者,同时又要防止其他人(特别是敌方)知道信息的内容.他采用的一种方式是:将原来的信息(称为明文)经过加密,变成密文之后发送出去,使敌方即使得到密文也读不懂,而合法的接收者收到密文之后却可以按照预先约定好的方法加以解密,再翻译成明文.而敌方却要千方百计从密文破译出明文来.一方如何编制密码使之不易被破译,另一方则要找到其弱点加以破译,这就构成了密码学的主要内容.
从密码学的发展来看,密码可分为古典密码(即以字符为基本加密单元的密码),以及现代密码(即以信息块为基本加密单元的密码).这里我们将介绍古典密码的加密和破译原理.
本实验主要涉及代数,利用模运算意义下的矩阵乘法、求逆矩阵、线性无关、线性空间与线性变换等概念和运算,学习古典密码体制的加密、解密和破译过程.
1.input('一些提示语句'):由键盘输入表达式.
注:a=input(''),对不同的变量类型a,输入时要注意相应的格式,若a为字符则要加' ',若a为矩阵则要加[ ]等.
2.length(a):给出数组a的长度.
3.mod(m, n):求m被n整除后的余数.
4.det(a):求矩阵a的行列式.
5.inv(a):求矩阵a的逆矩阵.
6.reshape(a, m, n):将矩阵a重排成m*n的矩阵.
例如:
a=1:10; b=reshape(a, 2, 5)
b= 1 3 5 7 9
2 4 6 8 10
7.double('字符'):将'字符'内的字符转化成ASCII码.
8.char(a):将a的每个数值转化为字符.
例如:
c=double('love')
c = 108 111 118 101
char(c)
ans = love
9.[m, n]=size(a):求矩阵a的维数.
10.gcd(m, n):求m, n的最大公约数.
11.fprintf(fid, format, A, ...):以指定格式将数据写入文件,若无参数fid,则输出到屏幕.
1.Hill2密码的两个实际问题:
实际问题(甲):甲方收到与之有秘密通信往来的乙方的一个密文信息,密文内容:
W K V A C P E A O C I X G W I Z U R O Q W A B A L O H D K C E A F C L W W C V L E M I M C C
按照甲方与乙方的约定,他们之间的密文通信采用Hill2密码,密钥为二阶矩阵且汉语拼音的26个字母与0~25之间的整数建立一一对应的关系,称之为字母的表值,具体的表值见表1.问这段密文的原文是什么?
表1明文字母的表值
A
B
C
D
E
F
G
H
I
J
K
L
M
1
2
3
4
5
6
7
8
9
10
11
12
13
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
14
15
16
17
18
19
20
21
22
23
24
25
0
实际问题(乙):甲方截获了一段密文:
M O F A X J E A B AU C R SX J L U Y H Q A T C Z H W B C S C P
经分析这段密文是用Hill2密码编译的,且这段密文的字母U C R S依次代表字母T A C O,问能否破译这段密文的内容?
2. Hill2密码的数学模型
一般的加密过程是这样的:
明文加密器密文普通信道解密器明文
其中的“普通信道解密器”这个环节容易被敌方截获并加以分析.
在这个过程中,运用的数学手段是矩阵运算,加密过程的具体步骤如下:
1)根据明文字母的表值,将明文信息用数字表示,设明文信息只需要26个拼音大写字母A—Z(也可以不止26个,如还有小写字母、数字、标点符号等),通信双方给出这26个字母表值(见表1).
2)选择一个二阶可逆整数方阵,称为Hill2密码的加密矩阵,它是这个加密体制的“密钥”(是加密的关键,仅通信双方掌握).问题(甲)已给出了这个二阶矩阵.
3)将明文字母依次逐对分组.Hill2密码的加密矩阵为二阶矩阵,则明文字母每2个一组(可以推广至Hilln密码,则每n个明文字母为一组).若最后一组仅有一个字母,则补充一个没有实际意义的哑字母,这样使每一组都由2个明文字母组成.查出每个明文字母的表值,构成一个二维列向量.
4)
乘以,得一新的2维列向量,由的两个分量反查字母表值得到的两个字母即为密文字母.
以上4步即为Hill2密码的加密过程.
解密过程,即为上述过程的逆过程.
例:明文为HDSDSXX(“华东师大数学系”的拼音缩写),,求这段明文的Hill2密文.
解:将明文相邻文母每2个分为一组:
HD SD SX XX(1)
最后一个字母X为哑字母,无实际意义.查表1得到每对字母的表值,并构造2维列向量:
(2)
将上述4个向量左乘矩阵,得到4个2维列向量:
(3)
作模26运算(每个元素都加减26的整数倍,使其化为0~25之间的一个整数)得到:
反查表1得到每对表值对应的字母为:
PL AL OT TT(4)
这就得到了“HDSDSXX”(“华东师大数学系”的拼音缩写)的密文.
要将这段密文解密,只要将上述加密过程逆转回去,即将密文按同样方式分组,查它们的表值即得:
(5)
(5)是前面的(3)经模26运算的结果.但如何由(5)中的向量求得(2)中的向量呢?这是在模运算意义下,如何解方程组:
(6)
的问题.一个一般的n阶方阵可逆的充要条件为.但在模26意义下矩阵可逆与一般的矩阵可逆有所不同.记整数集合,m为一正整数,模m可逆定义如下:
定义1:对于一个元素属于集合的n阶方阵,若存在一个元素属于集合的方阵,使得
称为模m可逆,为的模m逆矩阵,记为.
的意义是,每一个元素减去m的整数倍后,可以化成单位矩阵.例如:
定义2:对的一个整数,若存在的一个整数,使得,称为的模倒数或乘法逆,记作.
可以证明,如果与无公共素数因子,则有唯一的模倒数(素数是指除了1与自身外,不能被其他非零整数整除的正整数),反之亦然.例如,.利用这点,可以证明下述命题:
命题:元素属于的方阵模可逆的充要条件是,和没有公共素数因子,即和互素.
显然,所选加密矩阵必须符合该命题的条件.
问题(甲)所选择的明文字母共26个,,26的素数因子为2和13,所以上的方阵可逆的充要条件为不能被2和13整除.设,若满足命题的条件,不难验证:
其中是的倒数.显然,是中的数.
中有模26倒数的整数及其倒数可见表2.
表2模26倒数表
1
3
5
7
9
11
15
17
19
21
23
25
-1
1
9
21
15
3
19
7
23
11
5
17
25
表2可用下列程序求得:
m=26;
for a=1:m
for i=1:m
if mod(a*i, m)==1
fprintf('The INVERSE (mod %d) of number: %d is: %d\n', m, a, i)
end; end; end
注意:附录1给出的Matlab程序,可以用于判断一个2阶方阵在模26意义下是否可逆,并在可逆的前提下求出其逆矩阵.
读者可结合下列演算的实例加以验证.
利用表1可以演算出的如下:
于是,可以简单地计算得到:
再进行模26运算后得到:
即得到明文:HD SD SX X(X).
用Matlab编程进行加密算法的程序参见附录2.而用Matlab编写的相应的解密算法程序参见附录3.
表3问题(甲)的解
序号
分组密文
密文表值
明文表值
分组明文
1
W
K
23
11
7
21
G
U
2
V
A
22
1
4
9
D
I
3
C
P
3
16
1
14
A
N
4
E
5
13
M
A
1
9
I
5
O
15
13
M
C
3
1
A
6
I
9
19
S
X
24
8
H
7
G
7
9
I
W
23
25
Y
8
I
9
9
I
Z
0
0
Z
9
U
21
9
I
R
18
6
F
10
O
15
21
U
Q
17
23
W
11
W
23
5
E
A
1
9
I
12
B
A
2
10
J
1
9
I
13
L
12
2
B
O
15
5
E
14
H
8
14
N
D
4
10
J
15
K
11
9
I
C
3
1
A
16
E
5
13
M
A
1
9
I
17
F
6
4
D
C
3
1
A
18
L
12
14
N
W
23
25
Y
19
W
23
21
U
C
3
1
A
20
V
22
14
N
L
12
4
D
21
E
5
5
E
M
13
13
M
22
I
9
9
I
M
13
13
M
23
C
3
1
A
C
3
1
A
于是,实际问题(甲)的解为:
GU DIAN MI MA SHI YI ZI FU WEI JI BEN JIA MI DAN YUAN DE MI MA
即为:“古典密码是以字符为基本加密单元的密码”.
以下来解实际问题(乙).
实际问题(乙)属于破译问题.前面的加密与解密过程类似于在二维向量空间进行线性变换与其逆变换,每个明文向量是一个上的二维向量,乘以加密矩阵后,仍为上的一个二维向量.由于加密矩阵为可逆矩阵,所以,如果知道了两个线性无关的二维明文向量与其对应的密文向量,就可以求出它的加密矩阵及.
问题(乙)的密文中只出现一些字母,当然它可以是汉语拼音,或英文字母或其他语言的字母.所以可猜测秘密信息是由26个字母组成,设.通常由破译部门通过大量的统计分析与语言分析确定表值.假如,所确定的表值为表1,已知
注:前的为密文,后的为明文.
按照表1,
在模26意义下,,它有模26倒数,所以,在模26意义下线性无关,类似地,也可以验证,线性无关.
记,则,记,其中.
以下在模26意义下对进行一系列初等行变换将变成单位矩阵,则相应的将变成,即.
经过以上的一系列推导,可得
相应的Matlab程序参见附录4.
利用与实际问题(甲)同样的解密方法,可以求得,这段密文的明文是:
| HE | WI LL | VI SI T| A| CO LL EG E| T HI S| A FT ER NO ON |
分析这段文字,如果依竖线所划分成的词汇,则这段密文可理解为如下一段文字:
''He will visit a college this afternoon''.
这样,可以认为破译成功.
1.实际问题(甲)的修正:按照甲方与乙方的约定,他们之间的密文通信采用Hill2密码,密钥为二阶矩阵且汉语拼音的26个字母以及空格(字母A~Z的表值为1~26,空格的表值为0)与0~26之间的整数建立一一对应的关系,称之为字母的表值,试修正表1、表2以及附录中的程序,以给出模27意义下矩阵可逆的判别方法和具体求法.
2.若将你姓名的拼音作为明文,例如:赵本山(ZHAO BEN SHAN,含空格),密钥等参见练习1,求其在模27意义下的Hill2密文.
3.若将你姓名的拼音作为Hill2密文,例如:赵本山(ZHAO BEN SHAN,含空格),密钥等参见练习1,求其在模27意义下的明文.
4.利用所介绍的Hill2密码体制的原理,根据给定的26个英文字母的乱序表值(见表4),设计与建立Hill4密码体制的加密、解密与破译框图并建立必要的计算机程序.设英文26个字母以下面的乱序表与中的整数对应:
表4
A
B
C
D
E
F
G
H
I
J
K
L
M
5
23
2
20
10
15
8
4
18
25
0
16
13
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
7
3
1
19
6
12
24
21
17
14
22
11
9
(1)设,验证矩阵能否作为Hill4密码体制的加密矩阵.用框图画出你的验算过程,并编写相应的计算机程序.
(2)设明文为
HILL CRYPTOGRAPHIC SYSTEM IS TRADJITIONAL.
利用上面的表值与加密矩阵给此明文加密,并将得到的密文解密.画出加密与解密过程的框图并编写相应的计算机程序.
5.设已知一份密文为Hill2密码体系,其中出现频数最高的双字母是RH和NI,而在明文语言中,出现频数最高的双字母为TH和HE.由这些信息按表5给出的表值能得到什么样的加密矩阵?
A
B
C
D
E
F
G
H
I
J
K
L
M
0
1
2
3
4
5
6
7
8
9
10
11
12
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
13
14
15
16
17
18
19
20
21
22
23
24
25
6.找出元素属于的所有可能的Hill2密码加密矩阵.若截获了如下一段密文
UTCQCVFOYQUVMGMGULFOLEYHDUHOPEASWXTIFBAMWT
且已知它是根据表1按Hill2密码体制加密的,你能否将其解密?