加密算法乍一听貌似和大部分人的日常生活十分遥远,但实际却密切相关。从网络层到主机文件层,无论那层加密应用或协议背后都是由各种加密算法所支撑。即便你不用任何加密产品,凡是使用https的网站都已经使用了加密协议TLS/SSL。你也被动享受了加密算法带来的隐私保护,及通讯安全。今天我们抛开浅层的应用来扒一扒各种有趣的加密算法。

浅析三千年的加密算法发展史

加密算法的采用需要符合以下三点诉求:

机密性:

保证数据即使被盗取,小偷也不知道是啥;

完整性:

保证数据在传输过程中即使被劫持修改,接收方能够发现信息已被截取,而选择换掉;

可用性:

保证加密算法的开销、复杂度都在可用范围。

结合上述诉求,加密算法的发展主要经历了古典密码和现代密码两个重要时期。

一、古代人民怎么加密?

历史上最早的加密算法

早期加密算法主要使用在军事中,历史上最早关于加密算法的记载出自于周朝兵书《六韬.龙韬》中的《阴符》和《阴书》。其中记载:

太公曰:“主与将,有阴符,凡八等。有大胜克敌之符,长一尺。破军擒将之符,长九寸。降城得邑之符,长八寸。却敌报远之符,长七寸。警众坚守之符,长六寸。请粮益兵之符,长五寸。败军亡将之符,长四寸。失利亡士之符,长三寸。诸奉使行符,稽留,若符事闻,泄告者,皆诛之。八符者,主将秘闻,所以阴通言语,不泄中外相知之术。敌虽圣智,莫之能识。”

武王问太公曰:“… 符不能明;相去辽远,言语不通。为之奈何?” 太公曰:“诸有阴事大虑,当用书,不用符。主以书遗将,将以书问主。书皆一合而再离,三发而一知。再离者,分书为三部。三发而一知者,言三人,人操一分,相参而不相知情也。此谓阴书。敌虽圣智,莫之能识。”

简单来说,阴符是以八等长度的符来表达不同的消息和指令,属于密码学中的替代法,在应用中是把信息转变成敌人看不懂的符号,但知情者知道这些符号代表的含义。这种符号法无法表达丰富的含义,只能表述最关键的八种含义。阴书作为阴符的补充,运用了文字拆分法直接把一份文字拆成三分,由三种渠道发送到目标方手中。敌人只有同时截获三分内容才可能破解阴书上写的内容。

上述朴素的加密算法思想主要使用了替换法。无独有偶,在遥远的西方加密算法也大规模使用于战争之中。在希罗多德(Herodotus)的《历史》中记载了公元前五世纪,希腊城邦和波斯帝国发生多次冲突和战争。这些战争中希腊城邦中广泛使用了移位法进行加密处理战争通讯信息,使波斯帝国难以获得希腊城邦的军事情报,也就无法提前做军事部署。

希腊城邦用来传输军事信息、命令的每段文字都有固定的字数,接密者手中会有一份文字移位说明。解密者拿到密文后,根据文字移位说明进行解密,从而破解其中的军事命令或消息。

古典密码主要采用的就是移动法和替换法。经过逐渐发展和完善,最有名的莫过于凯撒密码。凯撒密码有两种模式——移位法和替换法。其中,移位法就是让明文都向固定方向移动特定位数,例如I love you右移动4位就变成了M pszi csy。但英文或拉丁文,字母出现的频率并不一致。以英文字母为例:字母e出现频率明显高过其他字母。在获得足够多的密文样本后,可以通过频率计算准确找到移位规则,从而破解密文。同时由于需要可逆操作,所以实际上密钥的数量是有限的,只有25种可能。因此,完全可以通过暴力破解来对密文进行解密。

于是大部分凯撒密码在实际应用中都采用了第二种模式——替换法。定义一张明文密文映射表:

这种方式可以在一定程度上解决密钥可穷举的问题,但仍对大数据量的频率攻击束手无策。

后来,这种模式发展为,靠引入一些特定参数来扰乱频率,这在一定程度上提高了解密的难度,但仍属于替换法和移位法的范畴。

古典密码后期发展出维吉尼亚密码、ROT5/13/18/47、摩尔斯密码等一系列密码种类。但都是以替换法和移位法为核心基础,安全性也主要是靠算法不公开来保证。所使用的加密算法只能算是现在加密算法的雏形,或者仅作为可以借鉴的最初加密思路。

现代人更科学的加密算法

古典加密算法本质上主要考虑的是语言学上模式的改变。直到20世纪中叶,香农发表了《秘密体制的通信理论》一文,标志着加密算法的重心转移往应用数学上的转移。于是,逐渐衍生出了当今重要的三类加密算法:非对称加密、对称加密以及哈希算法。这三类算法在现实场景中也往往组合起来使用,以发挥最佳效果。

对称加密算法

对称加密算法是使用最广泛的加密算法之一。常用的对称性加密算法有DES算法、AES算法、3DES算法、TDEA算法、Blowfish算法、RC5算法、IDEA算法等。对称加密的特点是,加密和解密两方使用同一密钥进行加、解密。加密算法本身泄露不会对安全性造成影响,密钥才是安全性的关键。按照原理不同,对称加密可以大体分成流加密和分组加密两种类型。

非对称加密算法

非对称加密算法和对称加密算法的最大区别在于,加密的密钥和解密的密钥不再是一个。这就像两个人互对暗号一样。这种加密方式主要为了应对“多个加密者,一个解密者”的模式,对称密钥只能解决解密用户为一对一的关系。