对称密码可以实现对任意明文的高效加密,通常用于通信会话的加密,但随着对称加密应用越来越广,会话密钥的管理问题也随之面临挑战。假设网络中有n个实体需要两两通信,那么每个实体必须维护一把与其他任意一个实体之间的会话密钥,总的会话密钥数量为,即达到O(n2)的量级,密钥管理的复杂度明显增加。另一方面,分组加密主要依赖于多轮复合的扩散和混淆运算,安全强度有待进一步增强。
公钥密码也称非对称密码,即加密密钥和解密密钥不同,一个可被公开的密钥被称为公钥,一个私人专用保管的密钥被称为私钥。公钥与私钥在数学上是有紧密关系的,用公钥加密的信息只能用对应的私钥解密,反之亦然。由于公钥算法不需要联机密钥服务器,密钥分配变得简单。一个人可以在与许多人交往时使用相同的密钥对,而不必与每个人分别使用不同的密钥。只要私钥是保密的,就可以随意分发其公钥,用户可以与任意数目的人员共享一个密钥对,而不必为每个人单独设立一个密钥,显著降低了密钥管理复杂度,简化了密钥管理操作,有效提高了密码学的可用性。
公钥加密是一种干扰信息的方法,使用该方法的双方拥有一对密钥,其中一个可以公开分享,而另一个只有预定的目标接收方才知晓。任何人都可能使用私人的公开密钥对信息进行加密。但是,只要预定接收方的解密密钥被安全地保护起来,信息就无法被解密。一般而言,公钥算法的设计依赖于经典的数论难题,即将攻击者在没有私钥的情况下,破解一个公钥加密系统,等效映射到求解数论难题。这样,攻击者若能在没有私钥的情况下破解公钥加密,等效于其求解了公知的数论难题。这样的模型假设也因此成为公钥密码安全的保障基石。
1976年,Whitfield Diffie和Martin Hellman 共同发表了学术论文《New Direction in Cryptography》,创建了公钥加密体制。公钥加密是重大的创新,从根本上改变了加密和解密的过程,也成为40年来信息安全应用领域的一项核心技术。2015年,Diffie和Hellman两位密码学家也因创立发明公钥加密技术而获得有着计算机领域诺贝尔美誉的图灵奖。
1. Diffie-Hellman密钥交换算法
下面以Alice和Bob为例介绍以Diffie和Hellman命名的DH密钥交换原理。
(1)选定一个可公开的大质数p和底数g。
(2)Alice和Bob分别选定一个私有的素数a和b。
图1给出了Alice和Bob通过公开交换g、p、A、B,最终各自计算获得共享密钥K=gab的基本过程。DH密钥协商的目的是让Alice和Bob安全获得共享密钥,任何第三方实体即使截获双方通信数据,也无法计算得到相同的密钥。
图1 DH密钥交换原理
下面再看一个简单的实例,来说明Alice和Bob协商计算会话密钥K的过程。
1)Alice与Bob协定使用p=23,g=5。
2)Alice选择一个秘密整数a=6,计算A=gamodp并发送给Bob:A=56mod 23=8。
3)Bob选择一个秘密整数b=15,计算B=gbmodp并发送给Alice:B=515mod 23=19。
4)Alice计算K=Bamodp,即196mod 23=2。
5)Bob计算K=Abmodp,即815mod 23=2。
DH是一个公钥算法,应用的数论难题是大数的离散对数求解难题,即已知g、a,计算A=ga是容易的,但反之,已知A和g,求解a是困难的。这样,攻击者即便截获得到A和B,也无法计算得到a和b,因而也无法计算获得K。
2. RSA公钥算法
公开密钥算法是在 1976年由当时在美国斯坦福大学的 Diffie和Hellman 两人首先发明的,但是目前最流行的RSA算法则是1977年由MIT教授Ronald L.Rivest、Adi Shamir和Leonard M.Adleman共同发明的。RSA也是分别取自3名数学家人名的第一个字母。RSA算法依赖于大数因子分解难题,即给定两个大素数p、q,计算它们的乘积n=pq是容易的,但反之,给定n,求解p和q是一个经典的数论难题。
(1)密钥生成
①选择两个大素数:p和q。
②计算欧拉函数:φ(n)=(p−1)(q−1)。
③选择一个正整数e,使gcd(e,φ(n))=1,即e和φ(n)互为素数。
④根据de=1(modφ(n)),利用Euclid算法计算出d。
⑤公钥即为K=<e,n>。
⑥私钥即为S=<d,p,q>。
(2)公钥加密
①记明文信息为m(二进制),将m分成等长数据块m1,m2,…,mi,块长s,其中2s≤n。
②加密:ci≡mi^e(modn)
③解密:mi≡ci^d(modn)
一开始,RSA选用的n长度达到512 bit时,以当时的计算机运算能力,安全性已公认足够强大。随着并行计算水平的飞速发展以及量子计算等新型计算的出现,RSA的安全强度也开始受到威胁。目前,RSA选用的公钥长度已达到了4 096 bit。
相比于对称密码,公钥密码具有实现难度大、安全强度大、计算耗费大等特点。因此,在日常应用时,RSA算法和AES算法混合使用,通常被称作数字信封技术,如图2所示。
图2 数字信封技术
虽然安全强度大,但由于 RSA 公钥加密需耗费较大资源,因此通常会话加密采用的是AES分组密码,而AES会话密钥则可通过RSA公钥加密,AES密钥的加密结果随会话密文一起发送给接收方,这样的技术就叫数字信封,可以确保仅有持有RSA私钥的合法的接收方才能解开AES密钥,从而获得最终的会话明文。