数学之美(十七)

密码学的数学原理

1 密码学的历史

据说两千年前凯撒用密码传送情报,他给罗马字母建立了密码对照表,

明码密码对应表

如果没有密码本,敌人收到的就是看起来毫无意义的字母,比如收到ABKTBP,通过密码本破译成CAESAR。不过只要多截获一些情报(即使是加密的),统计字母频率就可以破解这种密码。《福尔摩斯探案集》中“跳舞的小人”就介绍了这种技巧,还有一些谍战电视剧用类似密码,比如用菜价(一组数字)传递信息,数字对应康熙字典的页码和字的次序。

在20世纪初以前,密码技术发展缓慢,因为他们基本上靠经验处理,没有自觉应用数学原理,人们渐渐意识到一个好的编码方法可以避免解密者从密码中得到明码的统计信息,有经验的编码者会把常用词对应多个密码,使破译者很难统计出规律,比如汉字“是”如果只编码为0543,那么破译者就会发现0543出现次数过多,但如果对应成0543、373、2947等10个密码,就能降低出现次数,且破译者不会发现这些密码对应一个字。

好的密码必须做到不能根据已知的明文和密文的对应推断出新的密文的内容。如果加密是函数F,解密就是F的反函数,明码是F的自变量,密码是F的值。好的加密函数不能通过几个自变量和函数值就推断出函数。二战时美国截获了日军很多情报,发现电文中经常出现AF这一地名,应该是太平洋某岛屿,于是美军发布了跟几个岛屿有关的假消息,当美军发出“中途岛供水系统坏了”的消息后,日军情报提到AF供水问题,美军就断定AF是中途岛并在那里伏击了日本舰队。

美国情报专家Yardley抗战时破解了日军和重庆间谍的通信密码,间谍使用赛珍珠《大地》一书为密码本,密码所在页数是发报日期的月数+天数+10,比如3月11日发电报,密码就在3+11+10=24页。这样的密码,破译一篇密文就可能破译出之后所有密文。日军的保密技术极其落后,日本的马尼拉使馆向外发报时机器卡死,然后重发了一遍相同的电文,这在密码学上是大忌,密码机加密时每次应该自动转一轮,以防同一密钥重复使用,即使是同一电文,两次发送的密文应该是不一样的。此外日本更换密码机时,因为有的地方太远了不能及时更换,造成新老机器混用,同样的内容美国收到新老两套密文,由于旧的很多都被破解了,新的密码毫无机密可言。日军在二战中的情报经常被美国人破译,山本五十六也因此丧命。

2 信息论时代的密码学

二战时期美国情报部门集合了一批顶尖科学家,包括提出信息论的香农。香农提出信息论后为密码学注入了新活力,根据信息论,密码的最高境界是敌人截获密码后对我方的所知没有任何增加(信息量没有增加)。一般来说,密码之间均匀分布且统计独立时提供的信息最少,均匀分布则无从统计,统计独立则不能根据一段明码和密码破译另一段密码。

信息论为密码设计提供了理论基础,现在通用的公开密钥的方法基于如下原理:以加解密caesar为例,先把它变成一组数,如caesar的ASCII码X=067097101115097114(每三位代表一个字母)作为明码,然后根据以下密码系统加密:1、找两个很大的质数P和Q(越大越好,100位长的)然后计算乘积N=P*Q和M=(P-1)*(Q-1);2、找一个和M互质的整数E,即M和E除1以外没有公约数;3、找一个整数D,使E*D除以M余1,即E*DmodM=1;其中E是公钥,谁都可以用来加密,D是私钥用于解密,要自己保存好。N是公开的,即使敌人知道也没关系。

用下面的公式对X加密,得到密码Y。

如果没有密钥D,不可能从Y中恢复X,如果知道D,根据费马小定理,只要根据下面公式就能从Y中得到X。

过程如下:

加解密流程

公开密钥的优点是1、简单;2、可靠,产生的密文是统计独立、分布均匀的,不论给出多少明文、密文,也无法根据已知的对应情况破解新的密文,而且N、E可以公开给任何人加密,但只有掌握密钥的人才能解密,即使加密者本身也无法解密。即使加密者叛变了,整套密码系统仍然是安全的。3、灵活,可以产生很多的公开密钥E和私钥D的组合给不同的加密者。4、破解难度高,世界上没有永远破解不了的密码,关键在于有效期,要破解公开密钥的加密方式,目前最好的办法是对大数N进行因式分解,通过N反找P和Q,但这个方法需要计算机把所有数字试一遍,等于拼计算机速度,这也是P和Q需要非常大的原因,一种加密方法保证50年无法破解就可以了。前几年破解的RSA-158密码是这样被因式分解的:

公开密钥的其他算法比如Rabin算法,原理上和RSA算法有很多相似性。公开密钥原理上非常可靠,的任何一个具体算法都很难彻底破解,但很多加密系统在工程实现上有不少漏洞,因此很多人转而攻击实现方法。

一个密码不能有误差,否则有密钥也无法破解,如果构造密码系统时没有找到合适的P和Q(比如没找质数),密码的保密性就下降了很多。这个加密系统保证了二战后的密码几乎无法被破解,冷战时期美苏双方截获了很多情报,但没发生密码泄露的严重事件。

3 小结

利用已知信息情报消除情报系统的不确定性就是解密。最好的密码是无论对方得到多少情报也无法消除不确定性,为此密码设计需要做到密文之间无关,密文序列看似完全随机,有了信息论后人们发明了很好的密码系统,目前最常用的方法是公开密钥。

你可能感兴趣的:(数学之美(十七))