_TrustAsia
- 关注

在前两篇文章中,我们探讨了《什么是加密?》以及《什么是加密密钥?》,今天,让我们深入了解加密密钥中的重要元素——公钥。
公钥是什么?作用是什么?在下文中,你将找到答案。
公钥发展的历史与定义
历史
在密码学的早期历史中,两个参与方会依赖一种安全但非密码学的方式(如面对面会议或可信的信使)交换密钥。这个密钥是双方必须绝对保密的,用于交换加密消息。
预见——
1874年,在《科学原理》中,威廉·斯坦利·杰文斯写道:
读者能否想到两个数字相乘会得到8616460799?我认为除了我自己,没有人会知道。
在这里,他描述了单向函数与密码学的关系,并进一步讨论了用于创建陷门函数的分解问题。
数学家所罗门·W·戈隆在1996年7月表示:“杰文斯预见了公钥密码学中的一个关键特性,尽管他没有发明公钥密码学的概念。”
机密发现——
1970年,英国政府通信总部(GCHQ)的英国密码学家詹姆斯·H·埃利斯构想了“非秘密加密”(现在称为公钥密码学),但他找不到实现的方法。在1973年,他的同事克利福德·科克斯实施了现在所称的RSA加密算法,提供了一种实际的“非秘密加密”方法。
在1974年,GCHQ的另一位数学家和密码学家马尔科姆·J·威廉姆森开发了现在被称为Diffie-Hellman密钥交换的方法。这个方案也被传递给美国国家安全局。
两个组织都以军事为重点,并且在任何情况下都只能使用有限的计算能力;这两个组织都没有意识到公钥加密技术的潜力:
我认为它对于军事用途最重要......如果您可以快速且以电子方式共享您的密钥,那么您比对手具有重大优势。只有在Berners-Lee为CERN设计开放式互联网架构、阿帕网的改编和采用的演变过程结束时,公钥密码学才充分发挥其潜力。
—拉尔夫·本杰明
这些发现在27年里都没有被公开承认,直到1997年英国政府解密了这项研究。
公开发现——
1976年,密码学家Whitfield Diffie和Martin Hellman在他们共同发表的论文《New Directions in Cryptography》中开创了公钥密码学的概念,他们提出了一种无需共享秘密密钥的安全密钥交换技术,这一创新彻底改变了密码学的理念。
这种使用有限域中的指数运算的密钥交换方法后来被称为Diffie-Hellman密钥交换。
(图源:wikipedia)
Diffie-Hellman密钥交换算法的关键思想是基于离散对数问题和有限域中的指数运算。在Diffie-Hellman密钥交换方案中,每个参与方可以生成一个与其私密信息相关的公开参数。这些公开参数可以在非安全的通信信道上进行交换,而不会暴露私密信息。双方可以使用对方提供的公开参数和自己的私密信息,通过指数运算计算出一个共享的对称密钥。(在获得彼此公钥的真实副本后,Alice和Bob可以离线计算共享秘密。)
因此,Diffie-Hellman密钥交换算法为安全的密钥交换提供了一种可行的方法,而不需要事先共享密钥或依赖信任的第三方。
在1977年,MIT的Ron Rivest、Adi Shamir和Leonard Adleman独立发明了Cocks方案的一般化方案。后一位作者于1978年在Martin Gardner的《Scientific American》专栏中发表了他们的工作,这个算法因此被称为RSA算法(根据作者的姓氏首字母)。RSA使用大素数的乘法模取幂来进行加密和解密,实现了公钥加密和公钥数字签名。
随后在80年代,美国国家安全局(NSA)和国家标准与技术研究院(NIST)共同制定了DSA数字签名标准。在80年代末和90年代初,椭圆曲线密码学(ECC)成为了RSA和DSA的有效替代方案。
(图源:cryptomaniaks)
如今,我们看到,在数字时代中,公钥密码学的不断发展使安全加密的通信成为可能。
定义
公钥是公钥密码学体系中的重要元素,用于加密和解密数据以及数字签名验证。公钥通常是一个大数值,由非对称加密算法生成,例如RSA、Diffie-Hellman和椭圆曲线密码学等。
公钥可以由软件程序生成,但更常见的是由受信任的指定机构(例如证书颁发机构,又称CA)提供。这些机构负责验证实体(组织或个人)的身份,并向其颁发数字证书。数字证书包含了公钥及相关信息,并由CA对其进行签名,以保证其真实性和完整性。
公钥通常可以通过一个公开可访问的存储库或目录向所有人提供,例如公钥证书颁发机构的证书清单(CRL),或者更常见的是公钥基础设施(PKI)中的证书存储库。这使得任何人都可以获取其他实体的公钥,并在需要的时候使用这些公钥进行加密或验证签名。
总之,公钥是公钥密码学体系的核心组成部分,可以由软件生成也可以由信任的机构提供,公开可访问以供加密和验证数据。
公钥的作用是什么?又是如何发挥作用?
作用——公钥加密
公钥在密码学中用于加密,也就是公钥加密,通常被称为非对称加密。公钥加密会使用两个数学上相关的密钥:公钥和私钥。
在公钥加密中,发送者使用接收者的公钥对消息进行加密。接收者相应的私钥是加密后解密通信的唯一方法,只有对应的私钥才能解密经过加密的数据并访问原始消息。公钥对所有人可见,并且可以自由共享。
许多应用程序,包括安全通信协议、数字签名、安全在线交易和云计算中的数据加密,都广泛使用公钥加密。
如何生成公钥?
上文中提到,公钥可从CA获取,CA颁发包含所有者公钥、证明所有者身份的数字证书。公钥是使用非对称算法创建的,公钥算法将公钥与相应的私钥配对。生成公钥常用的算法包括Rivest-Shamir-Adleman(RSA)、椭圆曲线密码(ECC)和数字签名算法(DSA)。
同时这些算法也是是众多互联网标准的基础,例如传输层安全 (TLS)、SSH、S/MIME和PGP。一些公钥算法提供密钥分发和保密性(如Diffie-Hellman密钥交换),一些提供数字签名(例如DSA算法),一些提供两者(如RSA)。
公钥经常在许多不同的环境中使用,如加密通信、数字签名和加密货币交易,是构建安全可靠的数字交互基础设施的重要组成部分。
关于相关算法
RSA算法
RSA算法以其创造者的名字命名,广泛应用于数字签名和安全通信。它利用庞大素数的数学特性来生成密钥对。由于大型复合数难以分解为其质因数,因此RSA能够保障安全性。
DSA算法
DSA算法是生成和验证数字签名的常用算法,它提供了检查数字材料的合法性和一致性的方法。DSA使用数学公式生成签名,并可以使用相应的公钥进行验证。
ECC算法
ECC算法是一种公钥密码学方案,提供了与RSA和DSA相比更短密钥长度下相同或更强的安全性。ECC基于椭圆曲线的数学特性,为生成密钥对和执行密码操作提供了安全基础。
这些方法对于在各种密码学应用中创建、管理和使用公钥非常重要。它们是数字签名、安全通信和私密数据加密的基础组件。
公钥的工作流程
通过公钥加密发送和接收数据的过程通常包括五个步骤:
·密钥生成:每个人都会生成一个公钥和私钥。
·密钥交换:发送者和接收者交换公钥。
·加密:发送者的数据使用接收者的公钥进行加密。
·发送加密数据:加密的数据被发送给接收者。
·解密:接收者使用自己的私钥解密消息。
公钥的应用场景在哪?
公钥加密有三个广为人知的用途:
加密
这是公钥在发送之前对消息进行加密的主要用途。通过使用接收方的公钥对消息进行加密。只有持有相应私钥的人才能在实际中解密该消息,所以我们可以推断该人是密钥的拥有者,并与公钥相关联,这可用于确保消息的机密性。
数字签名
公钥还可用于创建数字签名。数字签名通过以下步骤生成:
·发送者识别要进行数字签名的文件。
·发送者计算机上的文档应用程序计算该文件内容的唯一哈希值。
·发送者的私钥用于加密哈希值,创建数字签名。
·原始文件和数字签名一起发送给收件人。
·接收者使用发送者的公钥来解密数字签名的哈希值。
·收件人的计算机计算原始文件的哈希值并将其与解密的哈希值进行比较。如果两个哈希值匹配,则签名得到验证。如果哈希值不匹配,则证明文档已被更改或签名无效。
数字签名工作原理(图源:TechTarget)
通过数字签名,私钥用于创建正在签名和发送的文件内容的哈希值。接收者使用签名者的公钥来解密签名并验证解密的哈希值是否与原始文件的哈希值匹配。
安全套接字层和传输层安全连接
SSL协议/TLS借助公钥加密技术在服务器和客户端之间建立安全连接。这种加密方法使得使用安全超文本传输协议成为可能。在建立通信会话时,首先使用非对称加密算法来确立双方身份并交换用于启用对称加密的共享会话密钥。一旦建立了安全连接并共享了会话密钥,后续的数据传输将使用对称加密算法进行加密和解密操作。这种对称加密的方式比非对称加密更高效,可提供更快的数据传输速度和更高的性能。
此外,一个重要问题是确保特定公钥的真实性,即确认该公钥的正确性、属于所声称的个人或实体,并且没有被某些(也许是恶意的)第三方篡改或替换。以下两种的方法能做到:
公钥基础设施(PKI)
其中一个或多个第三方(称为证书颁发机构)证明密钥对的所有权。传输层安全性依赖此基础设施。这意味着所有相关方都可以信任PKI系统(软件、硬件和管理)。
“信任网络”
“信任网络”通过使用用户与该用户所拥有的公钥之间的个人认可来分散身份验证。PGP采用了这种方法,此外还使用了域名系统(DNS——中的查找。
公钥加密的好处
公钥加密具有以下几个重要的优点:
安全性
公钥加密提供了一种安全的通信方式。发送方使用接收方的公钥对消息进行加密,只有接收方拥有相应的私钥才能解密消息。这样,即使消息在传输过程中被截获,未经授权的人也无法获取消息的内容。
密钥分发的便利性
在传统的对称加密中,发送方和接收方需要共享同一个密钥,而且在通信开始之前就需要将密钥安全地传递给对方。公钥加密消除了这个密钥分发的困难,因为发送方只需要知道接收方的公钥,而公钥是可以公开传输的。这样,任何人都可以安全地加密消息并发送给接收方,而只有接收方拥有私钥才能解密。
完整性
加密仅允许发送者和预期接收者访问数据,从而确保信息的完整性。它可以防止任何未经授权的中间人篡改内容,保证通信的隐私和安全。
真实性
公钥加密确保交易的真实性。每笔交易均由数字签名签署,这使得伪造身份成为不可能。这在用户之间建立了更多的信任。
可扩展性
公钥加密在密钥管理方面具有较好的可扩展性。由于每个用户都有自己的密钥对,密钥的生成、分发和撤销可以单独处理,不会影响其他用户。
风险与挑战仍在
尽管公钥加密比对称加密更安全,但仍需考虑以下几个风险:
低质量密钥
设计不当的非对称密钥算法(例如长度太短的算法)存在安全风险。
私钥丢失
如果私钥丢失或遗失,数据的访问将变得困难。
中间人攻击(MitM攻击)
公钥加密可能成为中间人攻击的目标。对于验证网站身份的两种主要方式是网站的安全证书和公钥加密。如果其中任何一项被攻破,恶意方可将自身插入用户和网站之间的连接,然后截获两者之间发送的任何信息。
写在最后
在公钥加密的世界中,我们眼前展示了一种强大而安全的通信方式。公钥加密通过使用公钥和私钥的配对,实现了信息的安全传输和数字签名验证。
然而,本文只揭示了公钥加密的半片面纱。在下一篇文章中,我们将继续探索公钥密码学,揭示公钥加密中的另一半——私钥的角色和作用。我们将重点讨论私钥的生成、使用和管理,以及它与公钥的密切关系。
参考资料:
1、《What Is A Public Key In Crypto?》,作者Tamara T,来源:cryptomaniaks
2、《What is a public key?》,来源:TechTarget
3、《The Principles of Science: A Treatise on Logic and Scientific Method》,作者Jevons William Stanley
4、《THE POSSIBILITY OF SECURE NON-SECRET DIGITAL ENCRYPTION》,作者Ellis James H
5、《Still Guarding Secrets after Years of Attacks, RSA Earns Accolades for its Founders》,作者Robinson Sara
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)