古典密码
古典密码编码方法主要有两种
简介
加密: 将明文字符按照一定的规则移动位置,得到排列错乱的密文,字符本身不变
解密: 将密文字符按照响应的逆向规则还原成原来的顺序
密钥: 移位规则
列置换
将明文按固定长m分组,即每行m个字母,在密钥控制下按某一顺序交换列,最后按列优先的顺序依次读出,即产生了密文。
周期置换
很大程度上同列置换,只不过加、解密时,在列交换后是按行优先的顺序向下进行。
数学描述
对于密码体制的五元组(P,C,K,E,D)有:
置换密码举例
设m=6,密钥为如下的置换Π:
x | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
Π(x) | 3 | 5 | 1 | 6 | 4 | 2 |
将两行对调并重新排序可得逆置换Π-1如下:
y | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
Π-1(y) | 3 | 6 | 1 | 5 | 2 | 4 |
即有:
所以现在我们使用该密码加密明文:abcdefghijkl
"step1"
#首先将明文字母每6个分成一组
'|'abcdef '|' ghijkl'|'
"step2"
#对每组字母使用加密变换
(1)a ==>(1->3) ==>c
(2)b ==>(2->5) ==>e
(3)c ==>(3->1) ==>a
(4)d ==>(4->6) ==>f
(5)e ==>(5->4) ==>d
(6)f ==>(6->2) ==>b
所以abcdef加密之后为:ceafdb
"step3"
重复step2,直到加密完成
简介
加密: 将明文字符按照对应关系代换成另外的密文字符
解密: 将密文字符按照对应关系代换成另外的明文字符
密钥: 对应关系
常见密码
棋盘密码
凯撒密码
维吉尼亚密码
希尔密码
...
数学描述
对于密码体制的五元组(P,C,K,E,D)有:
注意:
加密函数函数必须是单射
加密函数和解密函数要保持一致性
原理
凯撒密码(Caesar)加密时会将明文中的 每个字母 都按照其在字母表中的顺序向后(或向前)移动固定数目(循环移动)作为密文。
根据偏移量的不同,还存在若干特定的恺撒密码名称:
偏移量为 10:Avocat (A→K)
偏移量为 13:ROT13
偏移量为 -5:Cassis (K 6)
偏移量为 -6:Cassette (K 7)
凯撒密码举例
若明文: HELLO
已知密钥:K=3
则有对应关系:
# A => D (K=+3)
H => K
E => H
L => O
O => R
所以HELLO进行凯撒加密后的密文则为:KHOOR
定义
仿射密码对于密码体制的五元组(P,C,K,E,D)有:
注:
当a=1时,该仿射密码又称为移位密码
密钥空间大小£(26)x26=312
#£(26) = 2x13
仿射密码举例
已知:
由表可得hot对应的明文数值为7,14,19.
分别加密过程如下:
(7 x 7 + 3)mod(26) = 52mod(26) = 0
(7 x 15 + 3)mod(26) = 101mod(26) = 23
(7 x 19 + 3)mod(26) = 136mod(26) = 6
所以hot对应的3个密文值分别为0、23、6
则密文为:axg
原理
简单替换密码(Simple Substitution Cipher)加密时,将每个明文字母替换为与之唯一对应且不同的字母。
区别
它与恺撒密码之间的区别是其密码字母表的字母不是简单的移位,而是完全是混乱的,这也使得其破解难度要高于凯撒密码。
简单替换密码举例
现有需加密明文:
明文: lazy dog
已知以下对应关系:
明文: abcdefghijklmnopqrstuvwxyz
密钥: phqgiumeaylnofdxjkrcvstzwb
由该关系可得:
a => p
b => h
c => q
...
所以最终得到密文:
明文: lucy dog
密文: nvqw gdm
介绍
由于代表代换密码的安全性不高,原因是一个明文字母只由一个密文字母代替(可利用频率分析
破译)。故产生了更为安全的多表代换密码.
定义
多表代换密码即构造多个密文字母表,在密钥的控制下用以一系列代换表依次对明文消息的字母序列进行代换。
定义
对于密码体制的五元组(P,C,K,E,D)有:
维吉尼亚密码举例
假设m=6,密钥字为CIHPHER
,需加密的明文:
thiscryptosystemisnotsecure
已知:
由表可得密钥字对应的字符串为:
K = (2,8,15,7,4,17)
则其加密过程为:
即:
"step1"
#将明文按密钥K划分为6个一组,如下:
thiscr => 19 7 8 18 2 17
yptosy => 24 15 19 14 18 24
stemis => 18 19 4 12 8 18
notsec => 13 14 19 18 4 2
ure => 20 17 4
"step2"
#分别将每一组按照密钥K进行加密:
19 7 8 18 2 17(明文:thiscr)
2 8 15 7 4 17
21 15 23 25 6 8(密文:vpxzgi)
#21=19+2
#8=17+17mod(26)=8
...
重复以上步骤即可得到密文:vpxzgiaxivwpubttmjpwizitwzt
关于维吉尼亚密码的详细分析可见维吉尼亚密码详解
原理
Polybius密码又称为棋盘密码,其一般是将给定的明文加密为两两组合的数字,其常用密码表:
23 => H
15 => E
31 => L
34 => O
所以HELLO进行"棋盘"加密后的密文则为:2315313134
原理
希尔密码(Hill)使用每个字母在字母表中的顺序作为其对应的数字,即A=0,B=1,C=2 等,然后将明文转化为 n 维向量,跟一个 n × n 的矩阵相乘,再将得出的结果模 26。
数学描述
希尔密码对于密码体制的五元组(P,C,K,E,D)有:
希尔密码举例
假设明文为july,其加密过程则为:
已知:
所以由表可得july的密文为:delw
原理
# 3. 在每组中,找出两个字母在矩阵中的地方。
(1)若两个字母不同行也不同列
在矩阵中找出另外两个字母(第一个字母对应行优先)
使这四个字母成为一个长方形的四个角
(2)若两个字母同行
取这两个字母右方的字母(若字母在最右方则取最左方的字母)
(3)若两个字母同列
取这两个字母下方的字母(若字母在最下方则取最上方的字母)
Playfair密码举例
以playfair example
为密钥,可得到:
P L A Y F
I R E X M
B C D G H
K N O Q S
T U V W Z
需加密明文为:Hide the gold in the tree stump
加密:
"step1"
#首先将要加密的明文分成两个一组
HI DE TH EG OL DI NT HE TR EX ES TU MP
"step2"
#根据加密原理便可得到
BM OD ZB XD NA BE KU DM UI XM MO UV IF
为了方便复习,所以决定该密码学系列的文章章整合在一起:
1 密码学的基本概念
2 关于维吉尼亚密码的剖析
参考资料:
Playfair密码