简单古典密码及其五元组
编制密码的基本原理和基本方法称为密码法。基本的密码法主要有移位(也称为置换),代替,和加减三种(在许多书上只是介绍置换和代替)。在密码发展的初级阶段,他们都曾经独立地作为加密算法对明文信息进行加密。
移位密码
移位密码是按照某种规则对明文字符位置进行某种修改,不改变明文字符的原型,有时也称为易位密码、置换密码、换位密码等。
比如:
明文:明晨五时发起总攻
明文字符位置 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
明文字符 |
明 |
晨 |
五 |
时 |
发 |
起 |
总 |
攻 |
移位规则如下表:
密文字符位置 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
明文字符位置 |
5 |
4 |
6 |
8 |
7 |
3 |
2 |
1 |
移位规则的含义是:第一个密文字符是第五个明文字符、第二个密文字符是第四个明文字符、第三个密文字符是第六个明文字符…得到移位之后的密文为:
密文字符位置 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
密文字符 |
发 |
时 |
起 |
攻 |
总 |
五 |
晨 |
明 |
接收方可按照移位规则表逆推出明文。 显然,移位密码的有点十分明显,即:明文字符的位置发生了变化,使明文之间的结构规律得到了破坏。但是缺点也十分明显:移位只是改变了明文之间的位置没有改变明文的形态,将造成移位密码信息的泄露。一个密文字符的出现次数也是改字符在明文中的出现次数。
移位密码的五元组(以26个英文字母为例)
明文空间:26个字母
密文空间:26个字母
加密算法:c=(m+k)mod 26(m表示明文,k表示密文)
解密算法:m=(c-k)mod 26
密钥k为0到25,密钥空间大小为26
代替密码
代替密码是利用预先设计的代替规则,对明文逐字符或逐字符组进行代替的密码。其中一个字符组称为一个代替单位,代替规则也称为代替函数、代替表或s盒(注意s盒的概念)。
1. 单表代替
在单表代替中,始终使用一个代替表,即代替表是固定的。比如说汉字与区位码的对应关系,每一个汉字由他唯一对应的区位码,且此区位码不会发生改变,比如“晨”的区位码是1931、“五”的区位码是4669。
例如:
在对明文“晨五点总攻”进行加密时使用区位码进行加密:明文的区位码如下:
明文字符 |
晨 |
五 |
点 |
总 |
攻 |
明文区位码 |
1931 |
4669 |
2167 |
5560 |
1505 |
一个加密用的代替表为:
明文数字 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
密文数字 |
5 |
4 |
8 |
2 |
1 |
0 |
9 |
7 |
3 |
6 |
明文字符0替换成密文字符5等,1换成4。
根据代替表将数字逐个进行变换得到:
密文区位码 |
4624 |
1996 |
8497 |
0095 |
4050 |
密文字符 |
胃 |
�� |
� |
� |
纫 |
凯撒密码(简单的单表代替密码)
(也有的书上说凯撒密码是移位密码)
凯撒密码实则就是字母对应关系往后移3位,比如明文为a,得到的密文就为d;明文为b,得到的密文就为e,等等。
则存在:
c=(m+3)mod 26
m=(c-3)mod 26
0对应字母a,1对应字母b,2对应字母c,3对应字母d,依次类推到26个英文字母。
例如:明文为:hello world
对应的密文为:khoor zruog
2. 多表代替密码
单表代替只要知道了代替表就很容易被破解,因为他的代替表是唯一不变的,引入多表代替的概念。在多表代替密码中,代替表的使用由密钥来指示(引入了密钥的概念)。
例如:
设加密变换为c=(m+k)mod10,但k不是固定的常数而是密钥,则利用密钥序列:4321 5378 4322 3109 1107对明文“晨五点总攻”的加密过程为:
明文 |
晨 |
五 |
点 |
总 |
攻 |
明文序列m |
1931 |
4669 |
2167 |
5560 |
1505 |
密钥序列k |
4321 |
5378 |
4322 |
3109 |
1107 |
密文序列c |
5252 |
9937 |
6489 |
8669 |
2602 |
第一个字“晨”的区位码为1931,通过公式c=(m+k)mod10为:
(1+4)mod10=5,所以数字1对应的密文为5
又比如:
(9+3)mod10=2,所以数字9对应的密文为2
因为密钥的存在,使得每一次明文的加密大概率不会得到相同的密文,抵御了一部分攻击。
代替密码的五元组(以26个英文字母为例)
明文空间:26个字母
密文空间:26个字母
加密算法和解密算法:通过查询明文--密文的代替表实现
密钥空间大小:26!
仿射密码(以26个字母为例)
仿射密码的加密函数为c=(k1m+k2)mod n
在移位密码的基础上多加了一个k1,仿射密码也就是存在K1与K2,K1与n互素,gcd(K1,n)=1。(以n=26为例),则K1的取值有3、5、7,9、11、13、15、17、19、21、23、25(一共12种可能)。K2的取值为0-25(一共26种可能),当K1与K2的取值不同时,得到的加密解密也不相同。
仿射密码五元组(以26个字母为例)
明文空间:26个字母
密文空间:26个字母
加密算法:c=(k1m+k2)mod 26(k1要与26互素)
解密算法:m=k-1(c-k2)mod 26(k-1为k mod 26 的逆元)
密钥空间:(k1,k2)
密钥空间大小为k1
×
\times
×k2=12*26=312
维几利亚密码
历史上最著名的维几利亚密码体制也就是明文空间和密文空间均改为英文字母的序号集合;
加密过程:c=(
m
i
m{i}
mi+
k
i
k{i}
ki)mod 26
解密过程:m=(
c
i
c{i}
ci-
k
i
k{i}
ki)mod 26
其中i是一个下标,表示1<=i<=t(t表示密钥的位数)
维几利亚密码及其五元组(以26个字母为例)
明文空间:26个字母
密文空间:26个字母
加密算法:c=(
m
i
m{i}
mi+
k
i
k{i}
ki)mod 26
解密算法:m=(
c
i
c{i}
ci-
k
i
k{i}
ki)mod 26
密钥空间:
k
i
k{i}
ki(1<=i<=t)
密钥空间大小:26t
博福特密码及其五元组
将维几利亚的加法变成减法就成为了博福特密码。
明文空间:26个字母
密文空间:26个字母
加密算法:c=(
k
i
k{i}
ki-
m
i
m{i}
mi)mod 26
解密算法:m=(
k
i
k{i}
ki-
c
i
c{i}
ci)mod 26
密钥空间和密钥空间大小同维几利亚密码
可以看出,博福特的加密算法和解密算法相同,这是其的一个优点。
一次一密及其五元组(以二进制0 1为例)
一次一密的原则是密钥是随机生成的,使敌手不能猜测出下一个明文的变化规则。
明文空间:0或者1
密文空间:0或者1
加密算法:m与k的异或
解密算法:c与k的异或
密钥空间:0或者1
密钥空间大小为2n
有什么问题的欢迎评论区讨论
小声逼逼:太难总结了!!!