什么是私钥加密?私钥加密和公钥加密有何区别?
1514
我们讨论了很多关于公钥加密的安全应用的内容,它是如何实现加密和认证的。它在SSL、代码签名、电子邮件和文档签名、个人身份验证所有内容中所扮演的角色。我们不常谈论的是公钥加密的历史意义。
今天,我们将讨论私钥加密和公钥加密的区别,后者的历史意义,以及它们如何结合起来,使SSL/TLS和类似的加密系统成为可能。话不多说,我们开始吧。
什么是私钥加密?
纵观历史,有无数的私钥加密学例子,可以追溯到公元前1900年左右。在私钥加密学中,双方必须持有一个匹配的私钥(或者在传输时交换私钥),它们可以使用该私钥来加密明文,然后对其进行解密。著名的例子是凯撒的密码,神秘机器和路易十四的大密码。
但是,私钥加密存在一个固有的重大缺陷。今天,我们把它称为密钥分发,对99.9%的人来说,这是一种事后考虑。但从历史上看,密钥分配是一个很大的问题。
想想看,双方都必须拥有一个物理密钥。如果双方之间有任何距离,你必须委托一名快递员携带私钥或亲自前往那里交易。如果钥匙落入坏人之手,可能会破产。过去,人们因为这类私钥问题跌了很多跟头。
即使在数字时代,私钥加密本身也在与密钥分配进行斗争。您怎么知道您在没有身份验证机制的情况下能将私钥(在SSL/TLS中称为会话密钥)发送给正确的接收方?
公钥加密技术的发明
公开密钥加密的发明实际上有两次重大进展。1970年,一位名叫JamesEllis的加密学家在英国政府通信总部(GCHQ)工作,他从理论上提出了一种公开密钥加密系统,但当时不知道如何实现它。三年后的1973年,CliffordCocks想出了一种实用的实现方法,方法是将一种和 RS A(是1977年Ron Rivest、 Adi Shamir和Leonard Adleman一起提出的。
1987年7月首次在美国公布,当时他们三人都在麻省理工学院工作实习。RSA就是他们三人姓氏开头字母拼在一起组成的。目前最有影响力和最常用的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。)大致相当的算法混合在一起。第三个人,数学家Malcolm Willi ams on开发了一个等价于Diffie Helman密钥交换的密钥交换系统。
这些信息也被传递给了美国国家安全局,但这两个组织都不理解它的重要性,而且由于当时计算机的性质,这种技术被认为是不切实际的,更像是一个有趣的思想实验。它在1997年解密了27年。
据我们所知,它从未被任何一方使用过。因此,1976年,公开密钥密码再次被发现,这一次是由Whitfield Diffie和Mar ti n Hellman共同命名的。
一年后,RSA创作者--Ron Rivest、Adi Shamir和Leonard Adleman正在麻省理工学院完成他们的这项工作。
什么是公钥密码?
Diffie-Helman密钥交换和RSA是非对称加密体制。到目前为止,加密一直是对称的,双方都能够使用相同的私钥进行加密和解密。正如我们已经讨论过的,这给人们带来了各种各样的问题。
从术语“密钥交换”中可以看出,这些系统的创建者已经在考虑纠正一个由来已久的问题:密钥分配。
公钥加密使用一对密钥。分别是可以加密的公钥和解密的私钥。使用公钥加密,通信只能走一条路,因此被称为“不对称”。这个想法是,授权方持有私钥,而公钥是公共密钥。
公钥加密中的私钥仍然和以往一样有价值,因此必须额外考虑如何确保私钥的安全。但在坏人手里,公钥绝对是一文不值的。不存在公钥被盗的风险。那么公钥加密是如何解决私钥问题的呢?
通过启用更安全的对称加密。
公钥加密是一种密钥交换机制
显然,公钥加密的单向特性使得它成为通信的一个特殊的选择。但这并不是真正的目的。它既是一种认证机制,也是一种加密机制。这是为了加密信息并确保它到达正确的地点。最好的加密方法之一就是私钥。
这就是您在SSL/TLS中看到的。在短暂的片刻,客户端生成对称会话(私有)密钥,对其进行加密,并将其发送到服务器。如果服务器拥有私钥,它会解密会话密钥,客户端和服务器可以开始使用对称密钥进行通信。
这也有助于对服务器进行身份验证,因为如果没有正确的私钥,服务器就无法解密客户端的消息。
公钥密码学是一个辉煌的突破,为我们今天使用的SSL/TLS协议奠定了基础。到目前为止,即使是最先进的加密系统也只能与其私钥一样安全。公钥加密也是如此。但公钥加密作为一种密钥交换机制,消除了大量的攻击向量。
由于它的单向特性,用于公钥加密的私钥可以更加健壮。强对称私钥是256位。这仍然是足够的安全措施。但与2048位RSA私钥相比却相形见绌。这使得它成为一种更好的密钥分发机制。
公钥加密在SSL中是如何工作的?
在SSL中,公钥加密有助于身份验证和密钥交换。为了解释这一点,我将使用TLS1.3模型,因为这是我们前进的方向。在早期的TLS版本中,这有点复杂。
让我们从密码和密码套件开始。密码是用于加密的算法。密码套件是SSL/TLS协议联合使用的一组算法。每个服务器和每个浏览器都被配置为支持某些密码套件。
传统上,密码套件由:密钥交换/认证算法_WITH_S组成。
TLS 1.3将加密和身份验证算法与关联数据(Aead)算法结合在一起。当用户(客户端)到达网站(服务器)时,它会发送一条ClientHello消息,其中包含按首选项排序的受支持密码套件列表。它还猜测将使用何种加密算法并发送会话密钥。所有这些都是使用服务器的公钥加密的。
服务器使用自己的私钥解密ClientHello消息,然后返回服务器Hello消息及其证书、所选的密码套件以及密钥。在收到服务器-Hello之后,客户端和服务器开始使用他们交换的对称加密密钥进行通信。
现在会话密钥的快速消息经常被替换。在某些情况下,为每条消息使用不同的会话密钥并不少见。但是,如果没有安全处理密钥分发的能力,这是不可能实现的。这也是公钥密码学的历史意义。