聊到密码学,就得提起一位祖师爷——Shannon(香农)。他在 1949 年发表的《保密系统的通信理论》一书,用数学的方式将密码学划分为古典密码
和现代密码
。但因为现代密码学的理论听起来太抽象了,甚至有点过于离谱,诞生后被晾了三十多年才被人挖到这块宝藏。
C.E. Shannon, “Communication theory of secrecy systems,” in The Bell System Technical Journal, vol. 28, no. 4, pp. 656-715, Oct. 1949, doi: 10.1002/j.1538-7305.1949.tb00928.x.
比如现代密码学中的柯克霍夫原则(Kerckhoffs’s principle)讲:密码系统应该被所有人都知道加密方式是什么。可能大家听了觉得这个观点多少有点抽象:加密方式都让人知道了,还研究什么呀。再比如 Vernam 提出的符合香农完善保密的一次一密理论,听起来更抽象,用一次密码就重新更换一次密码。
古典密码
在古典密码
的时代,密码学的概念是比较模糊的,尽管大量被用在军事领域,但加密方式更像是一种艺术行为。反正就一个理念:瞎换乱转,完全没科学理论支撑。
古典密码
被总结为替换式密码
或移项式密码
又或者两者混合。顾名思义,前者就是将某些字符替换成其他的字符,而后者就是将字符原本所在位置向前向后移动某个位置,从而达到“加密”的作用。
但这样的古典密码
存在一个致命的弱点,那就是太“对称”了。这个“对称”有两层含义,第一个是古典密码
的加密
是可逆
的,一旦知道怎么加密
,很容易就可以反推出怎么解密
。另一个则是,不管你如何对明文进行替换,总会形成一种明文和密文的一一对应关系,但这也存在一个很大的弊端,那就是语言的使用是有规律性的。
比如在英语文章中,字母“E”在单词中的使用频率是比较高的,而像“Q”,“Z”这些字母使用频率比较低的。所以,古典密码其实存在很明显的缺陷,但是过去还没有人很好地解决这个问题。有兴趣的小伙伴可以了解下二战时期,古典密码
的巅峰之作——恩格玛机(Enigma)。恩格玛机使用了“一次加密”的方法,也就是每加密一次,就换一次密码。在那个没有计算机的年代,想要靠暴力穷举来破解几乎是不可能的(要是用这种方法去破解,二战估计都要打完了。emmm 也有可能二战结束得更晚)。但了解二战的小伙伴都知道,恩格玛机最终还是被破解了,甚至没等到计算机的诞生。1940 年,计算机之父,英国数学家Turing(图灵)与众多科学家破解了恩格玛机。
现代密码学
现代密码学中有一个研究方向——非对称加密
,也就是加密
和解密
不是“对称”的。
非对称加密
这种加密方式,在古典密码
的基础上,引入了密钥
的概念,将密钥
分为公钥
和私钥
,其中公钥
用来加密
,私钥
用来解密
。这样即便是把加密方式公开出去,只要私钥
仍然安全,这个加密系统就不会被破解。
这也说明了现代密码学家们公开加密方式的做法,其实是不会影响到加密系统安全性的。
Diffie 和 Hellman 在 1976 年的开创性论文 New Directions in Cryptography(密码学的新方向)。在《密码学新方向》一文中,Diffie 和 Hellman 展示了一种算法,表明非对称加密或是公共密钥加密是可行的。这个算法中,一个公钥
不是秘密的、可以被自由分享(被用来进行加密),而一个永远不需要离开接收装置的私钥
被用来进行解密。虽然公钥
决定了私钥
,但是这种不对称加密系统在设计时使得从公钥
中计算私钥
变成一件不可行的事。Diffie 和 Hellman 在这篇论文中指出了密码学的未来发展方向,并且论证了它们之间的关系:利用计算复杂性问题可以构造陷门单向函数,进一步可以构造公钥密码学,而公钥密码学可以实现加密和认证功能。后续的研究一步步地实现了这些功能。
非对称加密
的理论支撑其实是数学。数学上一种特殊函数:陷门单向函数,这种函数正向计算非常容易,但想反推回去几乎是一件不可能的事情,不过如果知道某些关键信息,反推也会变得非常容易。通俗点说,就是正向的过程好比你把一颗生鸡蛋煮熟,而反向过程就是把熟鸡蛋“还原回”生鸡蛋,后者至少在目前的技术来看,几乎是不可能的事情。
在通信中,如何确保信息绝对的安全?
首先,我们不能保证信息在传输过程中的安全,因为在传输过程中,被监听是一件非常普遍的现象。在通信过程中,我们只要将公钥
发送给对方,对方通过我们发送过来的公钥
对明文
进行加密,形成密文
,再将密文
发送回来给我们。整个过程,监听者只能拿到公钥
和密文
。但是不要担心,密文
的解密需要靠私钥
,而除了自己外,没人拥有私钥
。而通信双方,只要互相发送公钥
,自己保留私钥
,我们就可以做到在公开的网络环境中,暴露的是都是加密
用的公钥
加密后的密文
。
比如 1977 年,MIT 的三位学者 R. Rivest,A. Shamir 和 L. Adleman 发明了著名的RSA
密码体制(因此 2002 年三人获图灵奖)。这种算法用他们三个人的名字命名,叫做RSA
算法。从那时直到现在,RSA
算法一直是最广为使用的”非对称加密算法”。毫不夸张地说,只要有计算机网络的地方,就有RSA
算法。银行,邮件,聊天软件几乎所有你能想到的涉及数字的领域都在它的保护之下,算的上妥妥的应用级了,它的加密原理使用的就是单项陷门函数。RSA
算法非常可靠,密钥越长,它就越难破解。根据已经披露的文献,2013 年为止被破解的最长RSA
密钥是 768 个二进制位。也就是说,长度超过 768 位的密钥,还无法破解(至少没人公开宣布)。因此可以认为,1024 位的RSA
密钥基本安全,2048 位的密钥极其安全。
总结
回看密码学发展的每个时代,似乎人一直都是严谨密码的最大漏洞。正如美国的密码学学者布鲁斯·施奈尔所说:“安全就像链条,它取决于最薄弱的环节”。在信息安全的世界里,技术可以构建起高墙,而在人类的世界里,富有情感成了安全里最大的漏洞。
虽然密码学很枯燥,但我们仍满怀热情,希望更多人知道,意识到,提高警惕保护好自己,这才是现代密码学的终门。