使用公钥密码学进行加密因为不需要事先共享秘钥,所以非常适合互联网环境,比对称加密有明显的优势,那么为何实际中的加密系统,例如 HTTPS 或者 PGP 等,还都是采用公钥密码学和对称加密混合的加密方式呢?为何不完全使用公钥密码学来加密呢?
公钥密码学,Public Key Cryptograhy 。不同于对称加密的“加密解密使用相同密钥”的单密钥形式,公钥密码学会用到两个 key ,加密和解密使用不同的 key ,所以公钥密码学加密又被成为“非对称加密”。两个 key 分别是:一个公钥,public key ,可以公开发布,还有一个私钥,private key ,需要保密。如果你用我的公钥加密了一段信息,那么只有我自己能够解密,因为只有我自己才有对应的私钥。这就是公钥密码学加密的基本原理:公钥加密,私钥解密。
人们一开始并不相信会有这样的加密方式存在,直到1970年代,MIT 发明了 RSA 算法。公钥密码学对传统的对称加密有明显优势:第一,可以避免首先互通密钥,互联网是个不安全的环境,如果使用对称密码学加密,那么第一步共享密钥就是一个很难解决的问题。公钥密码学出现之前,大公司都是派专人出差,面对面的共享密钥的,普通人根本负担不起这个成本。第二,除了加密,还可以用公钥密码学做数字签名,这个也是非常实用的功能,但是不是本文的重点,所以不展开。
总之,公钥密码学的优势是明显的。
但是,当我们观察实际的加密系统的,例如 HTTPS/TLS ,PGP/GPG ,几乎无一例外的都采用了混合模式。这样做的主要原因是公钥密码学有着特别明显的局限性:性能。
跟对称加密比起来,公钥密码学去加密数据是非常的慢的。用 RSA 加密256字节。加密需要0.29M 个计算周期才能完成,而解密需要11.12M 周期。同样的数据大小,交给对称加密算法,3K 周期就可以完成,也就是说比公钥密码学块4000倍。
另外,公钥密码学加密还有一个问题,那就是加密数据的大小有限制。例如,RSA 是不能加密超过4096bit 大小的数据的,这个大小是跟它 key 的长度是相关的。
总之,公钥密码学局限性也是非常明显的。
所以实际中的加密系统,例如 HTTPS/TLS ,PGP/GPG ,都采用了公钥密码学和对称加密混合的加密模式。
实际系统的工作逻辑是这样:首先双方需要通过公钥密码学的方式,互通对称加密的秘钥,然后主体的大段数据都是用对称加密的算法来加密。这样,就能兼顾整个系统的性能,又可以解决互通密钥的困难。
关于为何加密系统不去单纯使用公钥密码学,而要采用混合方式加密,原理就是这些了。总结一下,公钥密码学是互联网时代的密码学的关键技术,因为事先不需要双方共享密钥而非常适合在互联网条件下使用。但是由于其性能的局限,所以当代的主流加密系统例如 HTTPS 或者软件 GPG ,仍然采用了混合模式进行加密。
参考: