古典密码
- 1.置换密码
- 1.1列置换密码
- 1.2周期置换密码
- 2.代换密码
- 2.1单表代换密码
- 2.1.1凯撒密码
- 2.1.2仿射密码
- 2.2多表代换密码
- 2.2.1维吉尼亚密码
- 2.2.2普莱费尔密码
- 3.轮转密码
- 3.1恩尼格玛密码机Enigma
- 3.1.1Enigma加密
- 3.1.1Enigma解密
- 4.古典密码的分类
- 5.古典密码的统计分析
- 5.1单表古典密码的统计分析
- 5.2多表古典密码的统计分析
- 5.2.1卡西斯基测试法Kasiski Test
- 5.2.2重合指数法
本章介绍了置换密码,列举了列置换密码、周期置换密码两种典型的古典密码,简要概括了古典密码的特征和分类;介绍了代换密码,包括单表代换密码和多表代换密码;以Enigma为例,介绍了轮转密码;介绍了古典密码的分类;最后介绍了古典密码的统计分析。
1.置换密码
置换密码又称为换位密码,是指将明文中个字符的位置次序重新排序得到密文的一种密码体制。
特点:保持明文的所有字符不变,只是利用置换打乱了明文字符的位置和次序。
1.1列置换密码
按列进行换位,并且按列读出明文序列得到密文。
例子如下:明文"Beijing 2020 Olympic Winter Games"
密钥是(143)(56)
其中密钥展开是:
1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|
4 | 2 | 1 | 3 | 6 | 5 |
解密过程使用的解密密钥是加密密钥的逆置换即:
1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|
3 | 2 | 4 | 1 | 6 | 5 |
1.2周期置换密码
是将明文P按照固定常长度m分组,然后对每组的字符串按照(1,2,3,4…m)的置换重新排列位置从而得到密文。
解密的时候对密文c按照长度m分组,按照密钥的逆置换把每组重新排列,从而得到明文P。
例子:明文P=”Digital Copyright Protection Laboratory, Beijing University of Printing"
①密钥是(1 5 6 2 3),也就是:
1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|
5 | 3 | 1 | 4 | 6 | 2 |
②先将明文按照m=6进行分组:
(Digita)(lCopyr)(ightPr)(otecti)(onLabo)(ratory)(Beijin)(gUnive)(rsityo)(fPrint)(ing )
③然后对每一个分组使用密钥进行置换,如将(Digita)加密结果是(gaiiDt)
这样可以得到加密结果:
(gaiiDt)(orCply)(hrgtiP)(eitcot)(Lonaob)(tyaorr)(inejBi)(neUigv)(iostry)(rtPifn)(g n i)
④解密的时候先对密钥进行逆置换,即(1 3 2 6 5),也就是:
1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|
3 | 6 | 2 | 4 | 1 | 5 |
这样同样进行置换就可以得到解密结果。
2.代换密码
代替密码,就是将明文中每个字符替换成密文中的另一个字符,代替之后的各个字母保持原来的位置,再对密文进行逆替换就可以恢复出明文。
2.1单表代换密码
明文的一个字符用相应的一个密文字符代替。加密过程是从明文字母表到密文字母表的一一映射。
2.1.1凯撒密码
凯撒密码是使用最早的密码体制之一。是将英文字母表循环左移3位得到,因此凯撒密码也称为移位密码。
明文空间M=C=Z~26~ ;
密钥空间K~1~=K~2~=Z~26~;
加密函数E={E~k~ | k ∈ K~1~},其中E~k~(m ) = m + k(mod26),m∈M;
解密函数D={D~k~ | k ∈ K~2~},其中D~k~(c ) = c + k(mod26),c∈C;
2.1.2仿射密码
gcd(a,26)表示a和26的最大公因子。
加密变换:c = Ea,b( m ) ≡ am + b(mod26)
解密变换:m = Da,b( c ) ≡ a-1 ( c-b )(mod26)
其中,a,b是密钥,满足a,b∈[0,25]并且gcd(a,26)=1的整数。a-1表示a的逆元,也就是a-1 · a ≡ 1mod26
例子如下,其中字母表与数字转换从0开始,即
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 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 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 |
2.2多表代换密码
多表代换密码是指依次对明文的各组信息使用无限多的或者有限个周期性重复的固定代换表进行替换来得到密文。
如果是使用无限多的固定代换表,那么就称为一次一密代换表(理论上唯一不可破解);如果使用有限个周期性重复的固定代换表,就称为周期多表代换密码(周期d,用密钥循环对明文进行加密)。
2.2.1维吉尼亚密码
维吉尼亚密码通过使用多个字母代换表,使得同一个字母在不同位置会被代换成为不同密文,循环使用密钥。
例子:
密钥“iscrupt”转换成数字为k={8 18 2 1 20 15 19}
明文为"cyber great wall corporation“,先将明文转换成数字,再与对应的密钥数字进行模26的和的计算结果,转换对应的密文字符。如下:
①第一行是明文字母
②第二行是明文字母转换成对应的数字
③第三行是循环使用密钥的数字
④第四行是明文数字和密钥数字分别进行模26和的运算结果。
例如字符c的明文是2,与对应的密钥8相加结果是10,再取模26结果为10,就是对应的加密结果。
⑤第五行是将加密结果数字转换成对应的字母。
解密过程与加密过程在第四行的操作不一样,是将第二行和第三行进行模26的差的运算得到结果。
2.2.2普莱费尔密码
将明文字母按两个字母一组(p1、p2)组成若干个单元,然后将这些单元替换成密文字母组合,替换时基于一个5x5的字母矩阵(使用一个选定的关键词来构造)。
矩阵构造:
从上到下从左到右,先将密钥添加进去,此时需要将重复的字母删除,后按照字母表的顺序将其他的字母填写进去。(字母I和J当作一个字母)
处理规则:
①若p1、p2在同一行,那么对应的密文是其右边第一个字母;
②若p1、p2在同一列,那么对应的密文是其下边第一个字母;
③若p1、p2在不同行不同列,那么对应的密文是以p1、p2为顶点的四边形的另外两个顶点,按照同一行进行匹配;
④若p1、p2相同,那么要在二者之间先插入一个实现约定好的字母;
⑤如果明文字母个数为奇数,那么需要在明文末尾添加上实现约定好的字母进行填充。
3.轮转密码
古典密码体制可以分为人工加密和机械加密两种。
3.1恩尼格玛密码机Enigma
Enigma是用键盘、齿轮、电池和灯泡组成的机器。发送者和接收者各自拥有一台机器。双方必须使用相同的密钥才可以完成加密通信,因此需要事先收到一份称为密码本的册子。
3.1.1Enigma加密
“每日密码”:用于加密密钥
“通信密码”:用于加密明文
①设置Enigma
先根据每日密码,设置机器的转子(每按下一个键,灯泡会显示对应密文的字母,同时第一个转子会转一圈,假设有m个字母,则第一个转了26圈之后,转子2就会转一圈,同理转子2转26圈之后转子3就会转一圈)。
②加密通信密码
也就是加密密钥。发送者选择好密钥(通信密码)之后(如3位),通过按键输入两次(是为了容错),这样就可以通过灯泡得到加密之后的密文。
③重新设置Enigma
发送者根据通信密码重新设置Enigma,通信密码中的3个字母实际上代表了转子的初始位置。
④加密消息
发送者对要发送的消息进行加密,通过按键和灯泡获取。
⑤拼接
发送者将通信密码的密文与加密之后的消息拼接起来进行传送。
3.1.1Enigma解密
①分解
接收者将接受到的消息分成密钥和消息两个部分的密文。
②设置Enigma
接收者通过查看每日密码进行机器设置
③解密通信密码
接收者将加密之后的通信密码进行解密。通过按键输入密文,灯泡会亮起对应的明文,这样就可以得到通信密码并且可以检测通信密码是否出错(因为传的时候是输入了两遍进行加密的)
④重新设置Enigma
接收者根据通信密码重新设置机器的转子和连接方式
⑤解密消息
接收者将电文剩余的部分进行按键输入和灯泡解密就可以得到最后的结果。
4.古典密码的分类
根据使用的密钥的数量是单一密钥还是多个密钥可以将古典密码分为单表古典密码和多表古典密码。
根据明文空间和密文空间是否一致可以将古典密码分为置换密码和代换密码。
5.古典密码的统计分析
5.1单表古典密码的统计分析
当截获的密文足够多的时候,可以通过统计密文字母的出现频率来确定明文字母和密文字母之间的对应关系。
如果已知所用的密码体制,那么相应的分析工作可能会简单一点。
统计方法是指某种语言中各个字符出现的频率不同而表现出一定的统计规律,这些统计规律可能在密文中重现,从而使攻击者利用这些统计规律,通过一些推测和验证过程来事先密码分析的方法。
5.2多表古典密码的统计分析
在多表古典密码中,相同的明文密文可能不相同。首先要确定密钥字的长度,也就是要确定所使用的加密表的个数,然后再分析确定具体的密钥。
5.2.1卡西斯基测试法Kasiski Test
在明文中,如果两个相同的明文片段之间的距离d是密钥长度m的倍数,那么这两个明文片段所对应的密文片段一定是相同的。反过来,如果密文中出现两个相同的密文片段(长度至少为3),那么它们所对应的明文片段极有可能是相同的,当然也可能不同。
通过计算相同密文片段之间的距离,取其公因子。
5.2.2重合指数法
利用重合指数法可以进一步确定密钥字的长度是否是m。
设x=x1x2…xn是一个长度为n的英文字母串。x的重合指数定义为x中的两个随机元素相同的概率。
通过字母表进行计算得到Ic(x)≈0.065.所以一般可以用来验证由卡西斯基测试法得到的密钥的长度是否正确。
得到长度之后穷举法遍历可能的密钥,计算交互重合指数,重合指数最高的情况下最有可能是明文并且对应的琼剧结果是密钥字母。