分享

现代密码学核心——非对称加密

 吴雨虹2kzpi83a 2020-04-25

一路狂奔的密码学,终于在上个世纪70年代中期迎来了它发展史上最重要的一刻:非对称加密的出现。所谓非对称,就是指加密和解密使用不同的密钥。非对称加密算法以及基于它构建的公钥基础设施体系(Public Key Infrastructure,简称PKI)已经是现代密码学的主体内容,也基本占据了信息安全学科的半壁江山。

之前已经讨论过,虽然对称加密算法已经很牛了,但如何在不安全的网络上传输对称密钥是个致命问题。这时候,又得数学家出来解决问题了(所以说,密码学家首先都是数学家)。一些聪明的数学家发现,根据某些数学原理,可以构造出加密和解密使用不同的密钥的数学模型。最早提出这个观点的是Whitfield DiffieMartin Hellman,他们在1976年提出了Diffie-Hellman密钥交换协议,这个协议的创新之处在于密钥由加解密双方协商产生,而不用再通过网络传输。虽然这个协议实际上提出的是密钥协商的算法,不支持加密和数字签名,但由于它开创性的提出了使用不同密钥的解决思路,人类终于可以实现非对称加密了。两位大神也因此贡献获得了2015年的图灵奖。

Whitfield Diffie和Martin Hellman.jpg

Diffie-Hellman密钥交换协议提出的第二年,终于、终于、几乎是现代密码学代名词的RSA算法终于粉墨登场了。RSA过于出名,我想即使是不知道它的含义的IT工程师,都见过这个名字。相比Diffie-Hellman密钥交换协议,RSA算法是完备的,它不仅包含密钥产生,而且可加密、可签名。RSA的核心思想是产生一对密钥,这对密钥在数学上地位完全平等,它们的特点是用其中一个密钥加密生成的密文,只能用另一个密钥解密。RSA算法的安全性来源于质数(素数)的特质。质数大家都知道,就是只能分解成1和它本身乘积的自然数。我们把两个非常大的质数(想多大都可以)相乘,很容易就可以得到一个乘积结果,但根据这个结果分解出那两个质数,却是相当困难的。RSA的安全就是靠这种大质数乘积难以分解的数学原理(PS:质数真的很神奇)。RSA具体实现算法其实不是特别的难,有一些数论知识就可以理解,有兴趣的同学可以自行研究。RSA算法虽然是三个字母的大写,但它并不是像DES那样的算法单词首字母缩写,而是提出它的三位发明者的姓氏首字母缩写:Ron RivestAdi ShamirLeonard Adleman.RSA.jpg

有了RSA,非对称加密的过程也就水到渠成了。在非对称加解密的世界里,每个人都有一对属于自己的RSA密钥,其中一个密钥公开,叫公钥,另外一个密钥私藏,叫私钥。至于哪个公开哪个私藏都无所谓。然后你给某个人发送一条信息时,你先用他的公钥加密信息,再把加密后的密文传递过去。接收者拿到密文后,用他的私钥来解密密文,得到明文。如果有第三方窃取了传输的密文,由于他没有接收者的私钥,也无法解密密文。简洁既是美,这就是现代密码学理论的核心,非对称加密的整个过程。非对称加密.jpg

非对称加密解决了对称加密的密钥安全问题,但它的运算速度比对称加密慢很多,而且是解密比加密更慢。据计算,RSA最快的速度也只是DES运算速度的百分之一。因此非对称加密适用于被加密数据比较小的情况。所以在实际应用环境下,一般是将对称加密和非对称加密结合起来使用:首先随机产生一个密钥,使用这个密钥作为对称密钥加密消息明文,然后用接收者公钥加密上一步使用的对称密钥,把加密后的消息密文和对称密钥密文发送给接收者;接收者收到密文后,先用自己的私钥解密对称密钥密文,再用对称密钥解密消息密文,最后得到消息明文。在实践中,加密后的消息密文和对称密钥密文被称作数字信封,数字信封支持包含多个对称密钥密文,即可以一次完成对多个接收者的消息加密,而明文只用加密一次。数字信封.jpg

和对称加密算法一样,非对称加密的接口在各个操作系统平台上也都是标配,数字信封什么的也都是妥妥的,开发者在编程时调用相关接口即可。

RSA问世以来的几十年内,经历了无数的攻击和挑战,实践证明它是优秀、可靠的,目前仍占据非对称加密算法的主要地位。不过没有绝对的信息安全,也没有完美的算法。RSA本身有以下几个缺点:

一是前面讲了RSA算法的安全性是基于大质数乘积难以分解的原理。但从数学理论上并没有证明RSA算法的破解难度就等同于大质数乘积难以分解的难度,这一点连RSA的发明者也承认。

二是RSA算法在实践中的时通过密钥体现大质数乘积,所以密钥越长,破解难度越大。我记得上学时就已经有报道说对1024位密钥长度的RSA加密,暴力破解需要当时最快的电脑计算几年,所以是足够安全的。但由于计算机算力的发展,并行计算、云计算的突起,1024位的RSA加密已经认为是不够安全了,很多场合已经推荐使用2048位密钥长度了。但由于RSA算法天生速度慢,资源消耗大,增加密钥长度只会使加解密速度进一步变慢,尤其在手机等移动端应用时,还会带来耗电增加,发热量等问题。

此外,量子计算机一直被认为是最终破解RSA算法的大杀器。相对于电子计算机的01两态,量子计算机可以拥有78个基本态,从原理上的计算能力就比电子计算机高几个数量级。据说理论上,量子计算机几个小时就可以破解1024位的RSA加密。

由于上述的 RSA 算法存在的缺点,另外一种非对称算法----椭圆加密算法逐渐发展起来。椭圆加密算法(Elliptic curve cryptography,缩写为ECC)最初由KoblitzMiller两人于1985年提出,其数学基础是利用椭圆曲线上离散对数的计算困难性。和RSA相比,ECC抗攻击性强、资源占用少、加密速度快。实现相等安全强度,ECC使用的密钥长度比RSA小很多,适用的场景更广泛。ECC的使用过程和RSA基本一致,上面两幅插图也完全同样适用。ECC的国产版本是SM2算法,目前在国内已经广泛使用,各位工程师如果在开发中遇到加密功能需求,大概率是要使用这种算法。虽然SM2算法还没有包含Windows\IOS\Android等主流操作系统中,但它已经是国家标准,国内各大安全厂商都有底层产品库实现,在系统中集成也不困难。

总结,非对称加密提出了公私钥的概念,开创了公钥基础设施体系。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多