公钥/私钥(Public Key/Private Key):修订间差异

来自非小号百科
0x YU小鱼留言 | 贡献
创建页面,内容为“== 简述 == 密码学中的一对密钥。公钥用于生成钱包地址,私钥用于授权和签名交易,私钥需要妥善保管。 === 什么是公钥与私钥(Public Key / Private Key)? === '''公钥(Public Key)''' 和 '''私钥(Private Key)''' 是非对称加密技术的核心概念,是一对密钥对,广泛应用于区块链技术、数字签名和加密通信中。 * '''公钥''' 是公开的,可用于加密信息或验证签…”
 
Doge留言 | 贡献
无编辑摘要
第1行: 第1行:
== 简述 ==
公钥密码学(也称为非对称密码学)是使用一对相关密钥的加密系统领域每对密钥由一个公钥和一个对应的私钥组成。密钥对是通过基数学问题的加密算法生成这些数学问题被称为单向函数。公钥密码学的安全性依赖于保持私钥的机密性;公钥可以公开分发而不危及安全性。公钥密码学有多种类型,每种类型具有不同的安全目标,包括数字签名、Diffie-Hellman密钥换、公钥封装和公加密<ref><nowiki>RFC 4949</nowiki> - [https://datatracker.ietf.org/doc/html/rfc4949 Internet Security Glossary, Version 2]</ref>
密码学中的一对密钥。公钥于生成钱包地址,私钥用于授权和签名交易,私需要妥善保管


=== 什么是公钥与私钥(Public Key / Private Key)? ===
公钥算法是现代密码系统中的基础安全原语,包括提供电子通信和数据存储保密性真实性保证的应用协议。它们是众多互联网标准的基础,如传输层安全协议(TLS、SSH、S/MIME和PGP。与对称密码学相比,公钥密码学在许多用途上可能过于缓慢因此这些协议通常将码学与公密码学结合使用形成混合码系统<ref>[https://pmc.ncbi.nlm.nih.gov/articles/PMC5551094/ Algorithms for Lightweight Key Exchange] - PMC</ref>
'''公钥(Public Key)''' '''私钥(Private Key''' 是非对称技术的核心概念是一对密钥广泛应用于区块链技术、数字签名和加通信中


* '''公钥''' 是公开的,加密信息或验证签名
== 概述 ==
* '''私钥''' 私密的,有者用它来解信息或创建签名
在1970年代中期之前,所有密码系统都使用对称密钥算法其中发送方和接收方都使相同的密钥与基础算法进行加密,且必须保持密钥的机密性。每个这样的系统中的密钥都必须在使用系统之前以某种安全的方式在通方之间交换——例如通过安全通道这一要求从来不简单的,且随着参与者数量增加或者在没安全通道的情况下,或在(作为合理的加密实践)频繁更换密钥时,这一问题很快变得不可管理。特别是,如果消息需要对其他用户保持安全,则需要为每对户提供单独的


区块链中,公钥私钥构成了加数字资产管理的基础,确保交易的安全性、身份验证的可靠性以及资产的不可篡改性
与此相比,公钥密码系统中,公钥可以广泛且公开地传播,只有相应的私钥需要保持机密。
----


=== 公钥和的核心工作原理 ===
公钥密码学中最著名的两种类型是数字签名钥加密:
非对称加密算法(如 RSA 和椭圆曲线加密 ECDSA)通过数学函数生成一对密钥


* '''公钥''' 和 '''钥''' 之间存在数学关系,但公钥推导出私钥在计算上几乎不可能保证了加密的安全性
# '''数字签名系统''':发送方可以使用私钥消息一起生成签名。任何拥有相应公钥的人都可以验证签名是否与消息匹配,但无法知道私钥的伪造者无法找到任何可以通过公钥验证的消息/签名对。例如,软件发布者可以创建一个签名密钥对,并将公钥包含在安装在计算机上的软件中。后来,发布者可以使用私钥签名软件更新,任何收到更新的计算机都可以通过使用公钥验证签名来确认更新的真实性。只要软件发布者保持私钥的机密性,即使伪造者分发恶意更新到计算机,它们也无法说服计算机认为恶意更新是真实的。
# '''加密系统''':任何拥有公钥的人都可以加密消息,得到密文,但只有知道相应私钥的人才能解密密文以获得原始消息。例如,一名记者可以在网站上发布加密密钥对的公钥,以便来源能够以密文的形式向新闻机构发送机密消息。只有知道相应私钥的记者才能解密密文以获取来源的消息——一个监听者邮件传输过程中无法解密密文。然而,公钥加密本身并不隐藏元数据,例如来源使用了哪个计算机发送消息,何时发送的消息以及消息有多长。公钥加密本身也不会告诉接收者是谁发送了消息——它只隐藏了消息内容


# '''加密与解密'''
一个重要的问题是如何确保/证明特定的公钥是可信的,即它是正的并且属声称且没有被篡改或被某个(可能是恶意的)第三方替换可以采取几种方法,包括:
#* '''加密''':通过公钥加密息,任何人都可以加密,但只能由拥有对应私钥人解密。
#* '''解密''':私钥解密加密信息,确保信息仅由私钥持有者读取。
# '''数字签名'''
#* 私钥创建数字签名,用证明交易或消息由持有该私钥的人发起。
#* 公钥验证签名的真确保内容未被篡改。


----
# '''公钥基础设施(PKI)''',其中一个或多个第三方——称为证书颁发机构(CA)——对密钥对的所有权进行认证。TLS就依赖于此。这意味着PKI系统(包括软件、硬件和管理)必须得到所有参与方的信任。
# '''信任网络(Web of Trust)'''通过使用个体对用户与其公钥之间链接的推荐来实现去中心化认证。PGP使用这种方法,此外还查找域名系统(DNS)。用于数字签名电子邮件的DKIM系统也使用这种方法。


=== 公钥与私钥在区块链中的应用 ===
== 应用 ==
公钥加密系统最明显应用是加密通信以提供机密性——发送方使用接收方的公钥加密消息,而该消息只能通过接收方配对的私钥解密。


# '''钱包地址生成'''
钥密码学的另一个是数字签名。数字签名方案可用于发送方身份验证。
#* 通过密码学算法生成对的公钥,公钥通过哈希计算衍生出钱包地址。
#* '''安全性''':只有私钥持有者可以控制钱包中的资产。
# '''数字资产管理'''
#* '''私钥''' 是数字资产的唯一访问密钥,丢失私钥等同于丢失资产。
#* '''公钥''' 和钱包地址用于接收资产,交易透明但安全。
# '''交易签名'''
#* 区块链交易需要用私钥签署以证明资产所有权
#* 签名后,公钥用于验证交易的真实性。
# '''智能合约交互'''
#* 与去中心化应用(DApp)或智能合约交互时,私钥签名授权操作


----
不可否认系统使用数字签名来确保一方无法成功否认其对文档或通信的创作。


=== 非对称加密的数学基础 ===
在此基础上构建的其他应包括:数字现金、密码认证钥协议、时间戳服务和不可否认协议。
的非对称加算法有以下特性:


# '''不可逆性'''
== 混合密码系统 ==
#* 到公计算是单向的通过公钥反推私几乎不可能。
由于非对称密算法通常比对称密算法计算量大得多因此常用非对称密交换算法来加密和交换对称密钥之后使用称密钥密码学来传输采用现已共享的对称密钥进行对称密钥加算法。PGP、SSH 和 SSL/TLS 系列协议都采用了这种序,因此它们被称为混合密码系统。最初基于非对称密码学密钥交换,于从服务器到客户端共享服务器生成的对称密钥,具有不需要手动预共享对称密钥例如通过印刷的纸张或由快递员运送的磁盘这一优点同时在共享连接其余部分提供比非对称密钥加密更高的数据吞吐量
# '''数学难题'''
#* 算法依赖数学难题如离散对数问题(ECDSA)或大整数分解问题(RSA)保证解程的高计算复杂度。
# '''常算法'''
#* '''ECDSA椭圆曲线数字签名算法''':更适合区块链计算高效且安全。
#* '''RSA''':传统加密方案密钥长度较长


----
== 弱点 ==
公钥加密系统有许多潜在的安全弱点。除了选择不合适的非对称密钥算法(目前只有少数几种被广泛认为是满意的)或密钥长度过短外,主要的安全风险是密钥对中的私钥被泄露。一旦私钥泄露,消息安全、身份验证等都将丧失。


=== 公钥与私钥的特性 ===
此外,随着量子计算的发展,许多非对称密算法被认为容易受到攻击,因此正在开发新的抗量子攻击加密方案。


==== 公钥的特性 ====
=== 算法 ===
所有公钥方案理论上都可能遭受“暴力破解密钥攻击”。然而,只有当破解所需的计算量(由Claude Shannon称为“工作量”)超出所有潜在攻击者的计算能力时,这种攻击才变得不可行。在许多情况下,工作量可以通过选择更长的密钥来增加。但其他算法可能固有地具有更低的工作量,使得抗暴力攻击的能力(例如,使用更长密钥)变得无关紧要。一些定的算法已经被开发出来,专门用于攻击某些公钥加密算法;例如,RSA和ElGamal加密算法都有已知的攻击方法,其速度比暴力破解方法要快。但这些攻击方法尚未得到实质的改进,因此并不实用。


# '''公开性'''
一些曾经被认为很有前景的非对称密钥算法已被发现存在重大漏洞。例如,“背包打包”算法在新的攻击方法出现后被证明不安全。像所有加密功能一样公钥的实现可能容易受到侧信道攻击这些攻击通过利用信息泄露来简化秘密密钥的搜索。这些攻击往往所使用算法无关。目前正进行研究以发现并防范新攻击
#* 安全分享不涉及隐私于验证签名或加密信息
# '''唯一性'''
#* 每个私生成公钥都是唯一的,私钥具有数学上唯一映射
# '''公开透明'''
#* 区块链上公钥或其衍生地址公开透明,用于资产接收和交易验证


==== 的特性 ====
=== 篡改 ===
使用非对称密钥的另一个潜在安全漏洞是“中间人攻击”,即第三方(“中间人”)拦截公钥的通信并修改它们,提供不同的公钥。然后,攻击者必须拦截、解密并重新加密加密的消息和响应,使用正确的公钥来避免引起怀疑。


# '''保密性'''
通信被认为不安全的,尤其是当数据传输的方式使得数据容易拦截(也称为“嗅探”)时这些术语指的是读取发送者私密数据。通信特别不安全情况是拦截无法被发送者预防或监控时
#* 私钥个人资产唯一控制权丢失或泄露将导致资产盗或永久丢失
# '''随机性'''
#* 私钥生成基于随机性,通常为一段长达 256 位二进制数据。
# '''操作性'''
#* 用于生成数字签名、解密公钥加密信息,以及构造交易


----
尽管实施“中间人攻击”可能困难,因为现代安全协议的复杂性,然而,当发送方使用不安全的媒体(如公共网络、互联网或无线通信)时,攻击者可以通过妥协通信基础设施而不是数据本身来简化攻击。举例来说,一个恶意的互联网服务提供商(ISP)员工可能会发现实施中间人攻击相对简单。捕获公钥只需要在ISP的通信硬件中搜索公钥;如果非对称密钥方案得当实现,这不会构成重大风险。


=== 公钥和私钥的常见表示形式 ===
在一些高级的中间人攻击中,一方会看到原始数据,而另一方会收到恶意变体。非对称的中间人攻击可以使用户无法意识到其连接已经被破坏,即使其中一个用户的数据已经被泄露,因为对方看到的数据仍然正常。这可能导致用户之间的混乱争论,比如“肯定是你那边的问题!”但实际上没有一方有错。因此,只有当通信基础设施由一方或双方完全控制时,中间人攻击才是完全可防止的;例如通过发送方自己建筑内的有线路线。总之,当攻击者控制了发送方使用的通信硬件时,公钥更容易被篡改。


# '''私钥表示'''
=== 公钥基础设施(PKI) ===
#* 常为 64 位十六进制字符串。
一种防止这类攻击方法是使用公钥基础设施(PKI);这一个包含角色、政策和程序体系旨在创建、管理、分发、使用、存储和撤销数证书,并管理公钥加密然而,PKI也有潜在弱点
#* 示例:<code>e331b6d69882b4a62b6d8467e979b76838b6d8c7e8b862b3e5a1c2eb8e8c7c82</code>
# '''公钥表示'''
#* 椭圆曲线加密中的公钥是点坐标(x, y)压缩形式通常为 66 位十六进制符串
#* 示例:<code>04bfcabbbfbbeb01c2672542c063f3f3bfcba2b2c1b7b3b8f7b8c7b7b8c7b7b8</code>
# '''助记词(Mnemonic)'''
#* 私钥简化表示,用人类可读的单词组合生成,便于记忆
#* 示例:<code>cat turtle apple star moon river bridge...</code>


----
例如,颁发证书的证书颁发机构(CA)必须得到所有参与方的信任,确认它已经正确验证了密钥持有者的身份,确保在颁发证书时公钥是正确的,并且免于计算机黑客攻击。此外,所有参与方都必须事先安排好,检查他们的所有证书,才能开始受保护的通信。例如,Web浏览器通常会接受一个由PKI提供者颁发的自签名身份证书列表——这些证书用于验证证书颁发机构的合法性,然后,第二步检查潜在通讯者的证书。如果攻击者能够颠覆证书颁发机构,使其为一个虚假的公钥颁发证书,那么他们就可以发起一个“中间人攻击”,就像完全不使用证书方案一样容易。如果攻击者渗透了证书颁发机构的服务器并获取了其证书和密钥(公钥和私钥)存储,那么他们将能够伪造、伪装、解密并伪造交易,只要他们能够将自己置于通信流中。


=== 公钥与私钥优点 ===
尽管存在理论上的潜在问题,公钥基础设施仍然被广泛使用。例如,TLS及其前身SSL常用于提供Web浏览器交易安全(例如,大多数网站使用TLS进行HTTPS通信)。


# '''安全性高'''
除了特定密钥对的抗攻击能力外,在部署公钥系统时还必须考虑证书层次的安全性。一些证书颁发机构——通常是一个运行在服务器计算机上的专用程序——为特定私钥分配身份提供担,生成数字证书。公钥数字证书通常有效期为几年,因此相关的私钥在这段时间内必须安全。当用于创建更高层次PKI服务器证书的私钥被泄露或意外披露时,就可能发“中间人攻击”使得任何下级证书完全不安全
#* 私钥的保护是加密系统核心,不泄露私钥即可确资产安全。
# '''不可篡改性'''
#* 数字签名和区块链数据结合,交易信息无法篡改。
# '''去中心化'''
#* 私钥无需第三方成或管理用户完全控制资产


----
=== 未加密的元数据 ===
大多数现有的公钥加密软件不会隐藏消息头中的元数据,这可能包括发送者和接收者的身份、发送日期、主题字段以及他们使用的软件等信息。相反,只有消息的正文被隐藏,只有目标接收者的私钥才能解密该消息。这意味着,第三方可以构建一个非常详细的通信网络模型,了解讨论的主题,即使消息内容本身被隐藏。


=== 钥与私钥常见误区 ===
然而,最近有展示加密消息头的技术,能够隐藏发送者和接收者的身份,并大大减少第三方可用的元数据。这个概念基于一个开的仓库,其中包含分别加密的元数据块和加密的消息。只有目标接收者才能解密元数据块,并在解密后下载并解密他们的消息。目前,这种消息系统还处于实验阶段,尚未部署。扩展这一方法将只向第三方显示接收者所用的邮箱服务器和发送和接收的时间戳。该服务器可以由成千上万用户共享,从而使得社交网络建模变得更加困难。


# '''公钥不能用于解锁资产'''
== 发展历程 ==
#* 公钥仅用于验证交易或加信息,不能用于访问资产。
码学早期历史中两个通信方依赖一种通过安全但非加密的方交换密钥,比如面对面会面或通过可信的信使。这把密,双方必须绝对保密,然后用它来交换加密信息。这种分发密钥的方法会带来许多实际的困难
# '''私钥不等于钱包地址'''
#* 钱包地址是由公钥哈希生成的,并非直接等同私钥。
# '''助记词不是明文私钥'''
#* 助记词通过生成私钥,不直接泄露私钥信息,但保护助记词同样重要


----
=== 预见 ===
在他1874年的著作《科学原理》中,威廉·斯坦利·杰文斯写道:<blockquote>读者能说出哪两个数字相乘会得到8616460799吗?我认为除了我自己,没有人能知道。</blockquote>在这里,他描述了单向函数与密码学的关系,并进一步讨论了用于创建陷门函数的因式分解问题。1996年7月,数学家所罗门·W·戈洛姆说:“杰文斯预见了RSA公钥密码学算法的一个关键特征,尽管他当然没有发明公钥密码学的概念。”


=== 安全风险与护措施 ===
=== 保密发现 ===
1970年,英国政府通信总部(GCHQ)的密码学家詹姆斯·H·埃利斯提出了“非保密加密”(现在称为公钥密码学)的可能性,但他看不出如何实现它。


==== 见风险 ====
1973年,他的同事克利福德·科克斯实现了后来成为RSA加密算法的方案,提供了一种“非保密加密”的实用方法。1974年,另一位GCHQ的数学家和密码学家马尔科姆·J·威廉姆森开发了现在被称为Diffie–Hellman密钥交换的方案。该方案也被传递给了美国国家安全局(NSA)。这两个机构都有军事重点,在任何情况下可用的计算能力也很有限;因此,公钥密码学的潜力仍未被这两个机构实现:<blockquote>我认为它对军事用途非重要...如果你可以快速且电子地共享密钥,你就能比对手获得重大优势。直到从伯纳斯-李为CERN设计开放互联网架构,经过其对ARPANET的适配和采纳,公钥密码学才真正实现了它的全部潜力。</blockquote>——拉尔夫·本杰明


# '''私钥泄露'''
这些发现直到27年后才被公开承认直到1997年英国政府密了这些研究
#* 黑客通过恶意软件或钓鱼攻击窃取私钥。
# '''私钥丢失'''
#* 私钥没有备份将导致无法恢复资产。
# '''弱随机性'''
#* 若私钥生成过程随机性不足可能被暴力破解。


==== 保护措施 ====
=== 公共发现 ===
1976年,惠特菲尔德·迪菲和马丁·赫尔曼发表了一种非对称密钥加密系统,受拉尔夫·默克尔关于公钥分发工作的启发,他们披露了一种公钥协议的方法。这种使用有限域中指数运算的密钥交换方法被称为Diffie–Hellman密钥交换。这是首个公开发布的实用方法,用于在已认证(但非保密)的通信通道上建立共享的秘密密钥,而不需要预先共享秘密。默克尔的“公钥协议技术”被称为默克尔谜题,发明于1974年,并于1978年发布。因此,非对称加密在密码学中算是一个相对较新的领域,尽管密码学本身已经有超过2000年的历史。


# '''使用硬件钱包'''
1977年,科克斯方案的一个推广被MIT的罗恩·里维斯特、阿迪·沙米尔和伦纳德·阿德尔曼三位学者独立发明。后来的作者在1978年通过马丁·加德纳的《科学美国人》专栏发布了他们的工作,这一算法被称为RSA,以他们的名字首字母命名。RSA使用模大质数的指数运算来加密和解密,既能进行公钥加密,也能生成公数字签名。其安全性与大整数因式分解的极高难度相关,这一问题没有已知的高效通用技术该算法的描述在1977年8月《科学美国》数学游戏专栏中发布
#* 硬件钱包离线保存私,避免网络攻击。
# '''备份与加密存储'''
#* 将私或助记词离线备份,存放在安全位置并加密
# '''避免第三方管理'''
#* 不要将私钥托管给未经验证平台或个人。


----
自1970年代以来,已经开发了大量种类的加密、数字签名、密钥协议等技术,包括拉宾密码系统、ElGamal加密、DSA和椭圆曲线加密(ECC)等。


=== 公钥与私钥在未来的发展 ===
== 参考链接 ==
 
<references />
# '''量子加密技术'''
#* 应对量子计算可能破解现有非对称加密的风险,研究基于量子安全的密钥算法。
# '''用户体验优化'''
#* 简化密钥管理,如通过社交恢复机制或基于多签名的钱包技术。
# '''隐私增强'''
#* 新型公钥加密方案(如零知识证明)提升用户隐私保护。
 
----
 
=== 总结 ===
公钥和私钥是区块链技术的核心要素,构成了数字资产管理和交易安全的基石。公钥负责公开验证和加密,私钥确保用户对资产的绝对控制权。理解和正确管理公钥与私钥是每个区块链用户的基本技能,也是保障链上资产安全的关键。

2024年12月9日 (一) 08:11的版本

公钥密码学(也称为非对称密码学)是使用一对相关密钥的加密系统领域。每对密钥由一个公钥和一个对应的私钥组成。密钥对是通过基于数学问题的加密算法生成的,这些数学问题被称为单向函数。公钥密码学的安全性依赖于保持私钥的机密性;公钥可以公开分发而不危及安全性。公钥密码学有多种类型,每种类型具有不同的安全目标,包括数字签名、Diffie-Hellman密钥交换、公钥封装和公钥加密[1]

公钥算法是现代密码系统中的基础安全原语,包括提供电子通信和数据存储保密性与真实性保证的应用和协议。它们是众多互联网标准的基础,如传输层安全协议(TLS)、SSH、S/MIME和PGP。与对称密码学相比,公钥密码学在许多用途上可能过于缓慢,因此这些协议通常将对称密码学与公钥密码学结合使用,形成混合密码系统[2]

概述

在1970年代中期之前,所有的密码系统都使用对称密钥算法,其中发送方和接收方都使用相同的密钥与基础算法进行加密,且必须保持密钥的机密性。每个这样的系统中的密钥都必须在使用系统之前以某种安全的方式在通信方之间交换——例如通过安全通道。这一要求从来不是简单的,且随着参与者数量的增加,或者在没有安全通道的情况下,或者在(作为合理的加密实践)频繁更换密钥时,这一问题很快变得不可管理。特别是,如果消息需要对其他用户保持安全,则需要为每对用户提供单独的密钥。

与此相比,在公钥密码系统中,公钥可以广泛且公开地传播,只有相应的私钥需要保持机密。

公钥密码学中最著名的两种类型是数字签名和公钥加密:

  1. 数字签名系统:发送方可以使用私钥和消息一起生成签名。任何拥有相应公钥的人都可以验证签名是否与消息匹配,但无法知道私钥的伪造者无法找到任何可以通过公钥验证的消息/签名对。例如,软件发布者可以创建一个签名密钥对,并将公钥包含在安装在计算机上的软件中。后来,发布者可以使用私钥签名软件更新,任何收到更新的计算机都可以通过使用公钥验证签名来确认更新的真实性。只要软件发布者保持私钥的机密性,即使伪造者分发恶意更新到计算机,它们也无法说服计算机认为恶意更新是真实的。
  2. 公钥加密系统:任何拥有公钥的人都可以加密消息,得到密文,但只有知道相应私钥的人才能解密密文以获得原始消息。例如,一名记者可以在网站上发布加密密钥对的公钥,以便来源能够以密文的形式向新闻机构发送机密消息。只有知道相应私钥的记者才能解密密文以获取来源的消息——一个监听者在邮件传输过程中无法解密密文。然而,公钥加密本身并不隐藏元数据,例如来源使用了哪个计算机发送消息,何时发送的消息,以及消息有多长。公钥加密本身也不会告诉接收者是谁发送了消息——它只隐藏了消息的内容。

一个重要的问题是如何确保/证明特定的公钥是可信的,即它是正确的并且属于声称的个人或实体,且没有被篡改或被某个(可能是恶意的)第三方替换。可以采取几种方法,包括:

  1. 公钥基础设施(PKI),其中一个或多个第三方——称为证书颁发机构(CA)——对密钥对的所有权进行认证。TLS就依赖于此。这意味着PKI系统(包括软件、硬件和管理)必须得到所有参与方的信任。
  2. 信任网络(Web of Trust)通过使用个体对用户与其公钥之间链接的推荐来实现去中心化认证。PGP使用这种方法,此外还查找域名系统(DNS)。用于数字签名电子邮件的DKIM系统也使用这种方法。

应用

公钥加密系统的最明显应用是加密通信以提供机密性——发送方使用接收方的公钥加密消息,而该消息只能通过接收方配对的私钥解密。

公钥密码学的另一个应用是数字签名。数字签名方案可用于发送方身份验证。

不可否认系统使用数字签名来确保一方无法成功否认其对文档或通信的创作。

在此基础上构建的其他应用包括:数字现金、密码认证密钥协议、时间戳服务和不可否认协议。

混合密码系统

由于非对称密钥算法通常比对称密钥算法计算量大得多,因此常用公私钥非对称密钥交换算法来加密和交换对称密钥,之后使用对称密钥密码学来传输数据,采用现已共享的对称密钥进行对称密钥加密算法。PGP、SSH 和 SSL/TLS 系列协议都采用了这种程序,因此它们被称为混合密码系统。最初基于非对称密码学的密钥交换,用于从服务器到客户端共享服务器生成的对称密钥,具有不需要手动预共享对称密钥(例如通过印刷的纸张或由快递员运送的磁盘)这一优点,同时在共享连接的其余部分,提供比非对称密钥加密更高的数据吞吐量。

弱点

公钥加密系统有许多潜在的安全弱点。除了选择不合适的非对称密钥算法(目前只有少数几种被广泛认为是满意的)或密钥长度过短外,主要的安全风险是密钥对中的私钥被泄露。一旦私钥泄露,消息安全、身份验证等都将丧失。

此外,随着量子计算的发展,许多非对称密钥算法被认为容易受到攻击,因此正在开发新的抗量子攻击的加密方案。

算法

所有公钥方案理论上都可能遭受“暴力破解密钥攻击”。然而,只有当破解所需的计算量(由Claude Shannon称为“工作量”)超出所有潜在攻击者的计算能力时,这种攻击才变得不可行。在许多情况下,工作量可以通过选择更长的密钥来增加。但其他算法可能固有地具有更低的工作量,使得抗暴力攻击的能力(例如,使用更长的密钥)变得无关紧要。一些特定的算法已经被开发出来,专门用于攻击某些公钥加密算法;例如,RSA和ElGamal加密算法都有已知的攻击方法,其速度比暴力破解方法要快。但这些攻击方法尚未得到实质性的改进,因此并不实用。

一些曾经被认为很有前景的非对称密钥算法已被发现存在重大漏洞。例如,“背包打包”算法在新的攻击方法出现后被证明不安全。像所有加密功能一样,公钥的实现可能容易受到侧信道攻击,这些攻击通过利用信息泄露来简化秘密密钥的搜索。这些攻击往往与所使用的算法无关。目前正在进行研究,以发现并防范新的攻击。

公钥篡改

使用非对称密钥的另一个潜在安全漏洞是“中间人攻击”,即第三方(“中间人”)拦截公钥的通信并修改它们,提供不同的公钥。然后,攻击者必须拦截、解密并重新加密加密的消息和响应,使用正确的公钥来避免引起怀疑。

通信被认为是不安全的,尤其是当数据传输的方式使得数据容易被拦截(也称为“嗅探”)时。这些术语指的是读取发送者的私密数据。通信特别不安全的情况是拦截无法被发送者预防或监控时。

尽管实施“中间人攻击”可能困难,因为现代安全协议的复杂性,然而,当发送方使用不安全的媒体(如公共网络、互联网或无线通信)时,攻击者可以通过妥协通信基础设施而不是数据本身来简化攻击。举例来说,一个恶意的互联网服务提供商(ISP)员工可能会发现实施中间人攻击相对简单。捕获公钥只需要在ISP的通信硬件中搜索公钥;如果非对称密钥方案得当实现,这不会构成重大风险。

在一些高级的中间人攻击中,一方会看到原始数据,而另一方会收到恶意变体。非对称的中间人攻击可以使用户无法意识到其连接已经被破坏,即使其中一个用户的数据已经被泄露,因为对方看到的数据仍然正常。这可能导致用户之间的混乱争论,比如“肯定是你那边的问题!”但实际上没有一方有错。因此,只有当通信基础设施由一方或双方完全控制时,中间人攻击才是完全可防止的;例如通过发送方自己建筑内的有线路线。总之,当攻击者控制了发送方使用的通信硬件时,公钥更容易被篡改。

公钥基础设施(PKI)

一种防止这类攻击的方法是使用公钥基础设施(PKI);这是一个包含角色、政策和程序的体系,旨在创建、管理、分发、使用、存储和撤销数字证书,并管理公钥加密。然而,PKI也有潜在的弱点。

例如,颁发证书的证书颁发机构(CA)必须得到所有参与方的信任,确认它已经正确验证了密钥持有者的身份,确保在颁发证书时公钥是正确的,并且免于计算机黑客攻击。此外,所有参与方都必须事先安排好,检查他们的所有证书,才能开始受保护的通信。例如,Web浏览器通常会接受一个由PKI提供者颁发的自签名身份证书列表——这些证书用于验证证书颁发机构的合法性,然后,第二步检查潜在通讯者的证书。如果攻击者能够颠覆证书颁发机构,使其为一个虚假的公钥颁发证书,那么他们就可以发起一个“中间人攻击”,就像完全不使用证书方案一样容易。如果攻击者渗透了证书颁发机构的服务器并获取了其证书和密钥(公钥和私钥)存储,那么他们将能够伪造、伪装、解密并伪造交易,只要他们能够将自己置于通信流中。

尽管存在理论上的潜在问题,公钥基础设施仍然被广泛使用。例如,TLS及其前身SSL常用于提供Web浏览器交易的安全(例如,大多数网站使用TLS进行HTTPS通信)。

除了特定密钥对的抗攻击能力外,在部署公钥系统时还必须考虑证书层次的安全性。一些证书颁发机构——通常是一个运行在服务器计算机上的专用程序——为特定私钥分配的身份提供担保,生成数字证书。公钥数字证书通常有效期为几年,因此相关的私钥在这段时间内必须保持安全。当用于创建更高层次PKI服务器证书的私钥被泄露或意外披露时,就可能发生“中间人攻击”,使得任何下级证书完全不安全。

未加密的元数据

大多数现有的公钥加密软件不会隐藏消息头中的元数据,这可能包括发送者和接收者的身份、发送日期、主题字段以及他们使用的软件等信息。相反,只有消息的正文被隐藏,只有目标接收者的私钥才能解密该消息。这意味着,第三方可以构建一个非常详细的通信网络模型,了解讨论的主题,即使消息内容本身被隐藏。

然而,最近有展示加密消息头的技术,能够隐藏发送者和接收者的身份,并大大减少第三方可用的元数据。这个概念基于一个公开的仓库,其中包含分别加密的元数据块和加密的消息。只有目标接收者才能解密元数据块,并在解密后下载并解密他们的消息。目前,这种消息系统还处于实验阶段,尚未部署。扩展这一方法将只向第三方显示接收者所用的邮箱服务器和发送和接收的时间戳。该服务器可以由成千上万的用户共享,从而使得社交网络建模变得更加困难。

发展历程

在密码学的早期历史中,两个通信方依赖于一种通过安全但非加密的方法交换密钥,比如面对面会面或通过可信的信使。这把密钥,双方必须绝对保密,然后用它来交换加密信息。这种分发密钥的方法会带来许多实际的困难。

预见

在他1874年的著作《科学原理》中,威廉·斯坦利·杰文斯写道:

读者能说出哪两个数字相乘会得到8616460799吗?我认为除了我自己,没有人能知道。

在这里,他描述了单向函数与密码学的关系,并进一步讨论了用于创建陷门函数的因式分解问题。1996年7月,数学家所罗门·W·戈洛姆说:“杰文斯预见了RSA公钥密码学算法的一个关键特征,尽管他当然没有发明公钥密码学的概念。”

保密发现

1970年,英国政府通信总部(GCHQ)的密码学家詹姆斯·H·埃利斯提出了“非保密加密”(现在称为公钥密码学)的可能性,但他看不出如何实现它。

1973年,他的同事克利福德·科克斯实现了后来成为RSA加密算法的方案,提供了一种“非保密加密”的实用方法。1974年,另一位GCHQ的数学家和密码学家马尔科姆·J·威廉姆森开发了现在被称为Diffie–Hellman密钥交换的方案。该方案也被传递给了美国国家安全局(NSA)。这两个机构都有军事重点,在任何情况下可用的计算能力也很有限;因此,公钥密码学的潜力仍未被这两个机构实现:

我认为它对军事用途非常重要...如果你可以快速且电子地共享密钥,你就能比对手获得重大优势。直到从伯纳斯-李为CERN设计开放互联网架构,经过其对ARPANET的适配和采纳,公钥密码学才真正实现了它的全部潜力。

——拉尔夫·本杰明

这些发现直到27年后才被公开承认,直到1997年英国政府解密了这些研究。

公共发现

1976年,惠特菲尔德·迪菲和马丁·赫尔曼发表了一种非对称密钥加密系统,受拉尔夫·默克尔关于公钥分发工作的启发,他们披露了一种公钥协议的方法。这种使用有限域中指数运算的密钥交换方法被称为Diffie–Hellman密钥交换。这是首个公开发布的实用方法,用于在已认证(但非保密)的通信通道上建立共享的秘密密钥,而不需要预先共享秘密。默克尔的“公钥协议技术”被称为默克尔谜题,发明于1974年,并于1978年发布。因此,非对称加密在密码学中算是一个相对较新的领域,尽管密码学本身已经有超过2000年的历史。

1977年,科克斯方案的一个推广被MIT的罗恩·里维斯特、阿迪·沙米尔和伦纳德·阿德尔曼三位学者独立发明。后来的作者在1978年通过马丁·加德纳的《科学美国人》专栏发布了他们的工作,这一算法被称为RSA,以他们的名字首字母命名。RSA使用模大质数的指数运算来加密和解密,既能进行公钥加密,也能生成公钥数字签名。其安全性与大整数因式分解的极高难度相关,这一问题没有已知的高效通用技术。该算法的描述在1977年8月的《科学美国人》数学游戏专栏中发布。

自1970年代以来,已经开发了大量种类的加密、数字签名、密钥协议等技术,包括拉宾密码系统、ElGamal加密、DSA和椭圆曲线加密(ECC)等。

参考链接