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

来自非小号百科
0x YU小鱼留言 | 贡献
创建页面,内容为“== 简述 == 密码学中的一对密钥。公钥用于生成钱包地址,私钥用于授权和签名交易,私钥需要妥善保管。 === 什么是公钥与私钥(Public Key / Private Key)? === '''公钥(Public Key)''' 和 '''私钥(Private Key)''' 是非对称加密技术的核心概念,是一对密钥对,广泛应用于区块链技术、数字签名和加密通信中。 * '''公钥''' 是公开的,可用于加密信息或验证签…”
 
Doge留言 | 贡献
无编辑摘要
 
(未显示同一用户的1个中间版本)
第1行: 第1行:
== 述 ==
公钥密码学(也称为非对称密码学)是使用一对相关密钥的加密系统领域。每对密钥由一个公钥和一个对应的私钥组成。密钥对是通过基于数学问题的加密算法生成的,这些数学问题被称为单向函数。公钥密码学的安全性依赖于保持私钥的机密性;公钥可以公开分发而不危及安全性。公钥密码学有多种类型,每种类型具有不同的安全目标,包括数字签名、Diffie-Hellman密钥交换、公钥封装和公钥加密<ref><nowiki>RFC 4949</nowiki> - [https://datatracker.ietf.org/doc/html/rfc4949 Internet Security Glossary, Version 2]</ref>。
密码中的一对密钥。公钥用生成地址,私钥用于权和签名交易,私钥需要妥善
 
公钥算法是现代密码系统中的基础安全原语,包括提供电子通信和数据存储保密性与真实性保证的应用和协议。它们是众多互联网标准的基础,如传输层安全协议(TLS)、SSH、S/MIME和PGP。与对称密码学相比,公钥密码学在许多用途上可能过于缓慢,因此这些协议通常将对称密码学与公钥密码学结合使用,形成混合密码系统<ref>[https://pmc.ncbi.nlm.nih.gov/articles/PMC5551094/ Algorithms for Lightweight Key Exchange] - PMC</ref>。
 
== 述 ==
在1970年代中期之前,所有的密码系统都使用对称密钥算法,其中发送方和接收方都使用相同的密钥与基础算法进行加密,且必须保持密钥的机密性。每个这样的系统中的密钥都必须在使用系统之前以某种安全的方式在通信方之间交换——例如通过安全通道。这一要求从来不是简单的,且随着参与者数量的增加,或者在没有安全通道的情况下,或者在(作为合理的加密实践)频繁更换密钥时,这问题很快变得不可管理。特别是,如果消息需要其他用户保持安全,则需要为每对用户提供单独的密钥。
 
与此相比,在公钥码系统中,公钥可以广泛且公开地传播,只有相应的私需要保持机密
 
公钥密码学中最著名的两种类型是数字签名和公钥加密:
 
# '''数字签名系统''':发送方可以使私钥和消息一起生成签名。任何拥有相应公钥的人都可以验证签名是否与消息匹配,但无法知道私钥的伪造者无法找到任何可以通过公钥验证的消息/签名对。例如,软件发布者可以创建一个签名密钥对,并将公钥含在安装在计算机上的软件中。后来,发布者可以使用私钥签名软件更新,任何收到更新的计算机都可以通过使用公钥验证签名来确认更新的真实性。只要软件发布者保持私钥的机密性,即使伪造者分发恶意更新到计算机,它们也无法说服计算机认为恶意更新是真实的。
# '''公钥加密系统''':任何拥有公钥的人都可以加密消息,得到密文,但只有知道相应私钥的人才能解密密文以获得原始消息。例如,一名记者可以在网站上发布加密密钥对的公钥以便来源能够以密文的形式向新闻机构发送机密消息。只有知道相应私钥的记者才能解密密文以获取来源的消息——一个监听者在邮件传输过程中无法解密密文。然而,公钥加密本身并不隐藏元数据,例如来源使了哪个计算机发送消息,何时发送的消息,以及消息有多长。公钥加密本身也不会告诉接收者是谁发送了消息——它只隐藏了消息的内容。
 
一个重要的问题是如何确保/证明特定的公钥是可信的,即它是正确的并且属声称的个人或实体,且没有被篡改或被某个(可能是恶意的)第三方替换。可以采取几种方法,包括:
 
# '''公钥基础设施(PKI)''',其中一个或多个第三方——称为证书颁发机构(CA)——对密钥对的所有进行认证。TLS就依赖于此。这意味着PKI系统(包括软件、硬件管理)必须得到所有参与方的信任。
# '''信任网络(Web of Trust)'''通过使用个体对用户与其公钥之间链接的推荐来实现去中心化认证。PGP使用这种方法,此外还查找域名系统(DNS)。用于数字签名电子邮件的DKIM系统也使用这种方法。
 
== 应用 ==
公钥加密系统的最明显应用是加密通信以提供机密性——发送方使用接收方的公钥加密消息而该消息只能通过接收方配对的私钥解密。公钥密码学的另一个应用是数字签名。数字签名方案可用于发送方身份验证。不可否认系统使用数字签名来确一方无法成功否认其对文档或通信的创作。在此基础上构建的其他应用包括:数字现金、密码认证密钥协议、时间戳服务和不可否认协议


=== 什么是公钥与私钥(Public Key / Private Key)? ===
'''公钥(Public Key)''' 和 '''私钥(Private Key)''' 是非对称加密技术的核心概念,是一对密钥对,广泛应用于区块链技术、数字签名和加密通信中。
'''公钥(Public Key)''' 和 '''私钥(Private Key)''' 是非对称加密技术的核心概念,是一对密钥对,广泛应用于区块链技术、数字签名和加密通信中。


第9行: 第27行:


在区块链中,公钥和私钥构成了加密数字资产管理的基础,确保交易的安全性、身份验证的可靠性以及资产的不可篡改性。
在区块链中,公钥和私钥构成了加密数字资产管理的基础,确保交易的安全性、身份验证的可靠性以及资产的不可篡改性。
----


=== 公钥和私钥的原理 ===
=== 区块链 ===
非对称加密算法(如 RSA 和椭圆曲线加ECDSA)过数学函数生成一对密钥
 
* '''钱包地址生成'''
** 私钥通过密码学算法生成对应的公钥,公钥通过哈希计算衍生出钱包地址。
** '''安全性''':只有私钥持有者可以控制钱包中的资产。
* '''数字资产管理'''
** '''私钥''' 是数字资产的唯一访问密钥,丢失私钥等同于丢失资产。
** '''公钥''' 钱包地址用于接收资产,交易透明但安全。
* '''交易签名'''
** 区块链交易需要用私钥签署以证明资产所有权。
** 签名后,公钥用于验证交易真实性。
* '''智能合约交互'''
** 与去中化应用(DApp)或智能合约交互时,私钥签名授权操
 
==== 特性 ====
 
* 公钥的特性
** '''公开性,'''可安全分享,不涉及隐私,常用于验证签名或加密信息。
** '''唯一性,'''每个私钥生成的公钥都是唯一的,与私钥具有数学上的唯一映射关系。
** '''公开透明,'''在区块链上,公钥或其衍生的地址公开透明,用于资产接收和交易验证。
 
* 私钥的特性
** '''保性,'''私钥是个人资产的唯一控制权,丢失或泄露将导致资产被盗或永久丢失。
** '''随机性,'''私钥的生成是基于随机性,常为一段长达 256 位的二进制据。
** '''操作性,'''用于生成数字签名、解加密的信息,以及构造交易。


* '''公钥''' 和 '''私钥''' 之间存在数学关系,但从公钥推导出私钥在计算上几乎不可能,保证了加密的安全性。
==== 常见形式 ====


# '''加密与解密'''
* '''私钥表示,'''常为 64 位十六进制字符串。示例:<code>e331b6d69882b4a62b6d8467e979b76838b6d8c7e8b862b3e5a1c2eb8e8c7c82</code>
#* '''加密''':通过公钥加密信息任何人都可以加密,但只能由拥有对应私钥的人解密。
* '''公钥表示,'''椭圆曲线加中的公是点坐标(x, y)的压缩形式通常为 66 位十六进制字符串示例:<code>04bfcabbbfbbeb01c2672542c063f3f3bfcba2b2c1b7b3b8f7b8c7b7b8c7b7b8</code>
#* '''''':私解密加密信息确保信息仅由私钥持有者读取
* '''助记词(Mnemonic)'''私钥的简化表示,用人类可读单词组合生成便于记忆示例:<code>cat turtle apple star moon river bridge...</code>
# '''数字签名'''
#* 私钥创建数字签名,用于证明交易或消息由持有该私钥的发起。
#* 公钥验证签名真实性确保内容未被篡改


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


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


# '''钱包地址生成'''
此外随着量子计算的发展,许多非对称密钥算法被认为容受到攻击因此正在开发新的抗量子攻击加密方案
#* 私钥通过密码学算法生成对应的公钥公钥通过哈希计算衍生出钱包地址。
#* '''安全性''':只有私钥持有者可以控制钱包中资产。
# '''数字资产管理'''
#* '''私钥''' 是数字资产的唯一访问密钥,丢失私钥等同于丢失资产。
#* '''公钥''' 和钱包地址用于接收资产,交易透明但安全。
# '''交易签名'''
#* 区块链交需要用私钥签署以证明资产所有权。
#* 签名后公钥用于验证交易真实性。
# '''智能合约交互'''
#* 与去中心化应用(DApp)或智能合约交互时,私钥签名授权操作


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


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


# '''不可逆性'''
=== 公钥篡改 ===
#* 公钥的计算是单向,通过公钥反推私钥几乎不可能
使用非对称密的另一个潜在安全漏洞是“中间人攻击”,即第三方(“中间人”)拦截公钥的通信并修改它们,提供不同的公钥。然后攻击者必须拦截、解密并重新加密加密消息和响应,使正确来避免引起怀疑
# '''数学难题'''
#* 算法依赖数学难题如离散对数问题(ECDSA)或大整数分解问题(RSA),保证解密过程高计算复杂度。
# '''常算法'''
#* '''ECDSA(椭圆曲线数字签名算法)''':更适合区块链,计算高效且安全。
#* '''RSA''':传统加密方案,但密长度较长


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


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


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


# '''开性'''
=== 钥基础设施(PKI) ===
#* 可安全分享,不涉及隐私,常用于验证签名或加密信息。
种防止这类攻击方法是使用公钥基础设施(PKI);这是一个包含角色、政策和程序体系旨在创建、管理、分发、使用、存储和撤销字证书并管理公钥加密。然而,PKI也有潜在弱点
# '''唯性'''
#* 每个私钥生成的公钥一的,与私钥具有学上的唯一映射关系。
# '''公开透明'''
#* 在区块链上,公钥或其衍生地址公开透明,用于资产接收和交易验证


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


# '''保密性'''
尽管存在理论上潜在问题公钥基础设施仍然广泛使用例如,TLS及其前身SSL常用于提供Web浏览器交易的安全(例如,大多网站使用TLS进行HTTPS通
#* 私钥是个人资产唯一控制权丢失或泄露将导致资产盗或永久丢失
# '''随机性'''
#* 私钥的生成是基于随机性,通为一段长达 256 位的二进制数据。
# '''操作性'''
#* 用于生成字签名、解密公钥加密的息,以及构造交易


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


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


# '''私钥表'''
然而,最近有展加密消息头的技术,能够隐藏发送者和接收者的身份,并大大减少第三方可用的元数据这个概念基于一个开的仓库,其中包含分别加密的元数据块和加密的消息。只有目接收者才能解密元数据块,并在解密后下载并解密他们消息。目前这种消息系统还处于实验阶段,尚未部署扩展这一方法将只向第三方显接收者所用的邮箱服务器和发送和接收时间戳。该服务器以由成千上万用户共享从而使得社交网络建模变得更加困难
#* 常为 64 位十六进制字符串
#* 示例:<code>e331b6d69882b4a62b6d8467e979b76838b6d8c7e8b862b3e5a1c2eb8e8c7c82</code>
# '''钥表示'''
#* 椭圆曲线加密公钥是点坐(x, y)压缩形式通常为 66 位十六进制字符串
#* 例:<code>04bfcabbbfbbeb01c2672542c063f3f3bfcba2b2c1b7b3b8f7b8c7b7b8c7b7b8</code>
# '''助记词(Mnemonic)'''
#* 私钥简化表示,用人类单词组合生成便于记忆
#* 示例:<code>cat turtle apple star moon river bridge...</code>


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


=== 公钥与私钥的优点 ===
=== 预见 ===
在他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)等。


==== 常见风险 ====
== 示例 ==
以下是一些广泛认可的非对称密钥技术,适用于不同的目的:


# '''私泄露'''
* Diffie–Hellman 密交换协议
#* 黑客通过恶意软件或钓鱼攻击窃取私
* DSS(数字签名标准),包括数字签名算法(DSA)
# '''私钥丢失'''
* ElGamal
#* 私钥没有备份将导致无恢复资产。
* 椭圆曲线密码学
# '''弱随机性'''
* 椭圆曲线数字签名算法(ECDSA)
#* 若私生成过程随机性不足,可能被暴力破解。
* 椭圆曲线 Diffie–Hellman(ECDH)
* Ed25519 和 Ed448(EdDSA)
* X25519 和 X448(ECDH/EdDH)
* 各种密码认证密协议
* Paillier 密码系统
* RSA 加密算(PKCS#1)
* Cramer–Shoup 密码系统
* YAK 认证密协议


==== 保护措施 ====
尚未广泛采用的非对称密钥算法示例:


# '''使用硬件钱包'''
* NTRUEncrypt 码系统
#* 硬件钱包离线保存私钥,避免网络攻击。
* Kyber
# '''备份与加存储'''
* McEliece 密码系统
#* 将私钥或助记词离线备份,存放在安全位置并加密。
# '''避免第三方管理'''
#* 不要将私钥托管给未经验证的平台或个人。


----
一些著名的,但不安全的非对称密钥算法示例:


=== 公钥与私钥在未来的发展 ===
* Merkle–Hellman 背包密码系统


# '''量子加密技术'''
使用非对称密钥算法的协议示例:
#* 应对量子计算可能破解现有非对称加密的风险,研究基于量子安全的密钥算法
# '''用户体验优化'''
#* 简化密钥管理,如通过社交恢复机制或基于多签名钱包技术。
# '''隐私增强'''
#* 新型公钥加密方案(如零知识证明)提升用户隐私保护。


----
* S/MIME
* GPG(OpenPGP 的实现)和互联网标准
* EMV,EMV 证书颁发机构
* IPsec
* PGP
* ZRTP(安全的 VoIP 协议)
* 由 IETF 标准化的传输层安全性(TLS)及其前身安全套接层(SSL)
* SILC
* SSH
* 比特币
* Off-the-Record Messaging


=== 总结 ===
== 参考链接 ==
公钥和私钥是区块链技术的核心要素,构成了数字资产管理和交易安全的基石。公钥负责公开验证和加密,私钥确保用户对资产的绝对控制权。理解和正确管理公钥与私钥是每个区块链用户的基本技能,也是保障链上资产安全的关键。
<references />

2024年12月9日 (一) 08:43的最新版本

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

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

概述[编辑 | 编辑源代码]

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

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

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

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

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

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

应用[编辑 | 编辑源代码]

公钥加密系统的最明显应用是加密通信以提供机密性——发送方使用接收方的公钥加密消息,而该消息只能通过接收方配对的私钥解密。公钥密码学的另一个应用是数字签名。数字签名方案可用于发送方身份验证。不可否认系统使用数字签名来确保一方无法成功否认其对文档或通信的创作。在此基础上构建的其他应用包括:数字现金、密码认证密钥协议、时间戳服务和不可否认协议。

公钥(Public Key)私钥(Private Key) 是非对称加密技术的核心概念,是一对密钥对,广泛应用于区块链技术、数字签名和加密通信中。

  • 公钥 是公开的,可用于加密信息或验证签名。
  • 私钥 是私密的,持有者用它来解密信息或创建签名。

在区块链中,公钥和私钥构成了加密数字资产管理的基础,确保交易的安全性、身份验证的可靠性以及资产的不可篡改性。

区块链[编辑 | 编辑源代码]

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

特性[编辑 | 编辑源代码]

  • 公钥的特性
    • 公开性,可安全分享,不涉及隐私,常用于验证签名或加密信息。
    • 唯一性,每个私钥生成的公钥都是唯一的,与私钥具有数学上的唯一映射关系。
    • 公开透明,在区块链上,公钥或其衍生的地址公开透明,用于资产接收和交易验证。
  • 私钥的特性
    • 保密性,私钥是个人资产的唯一控制权,丢失或泄露将导致资产被盗或永久丢失。
    • 随机性,私钥的生成是基于随机性,通常为一段长达 256 位的二进制数据。
    • 操作性,用于生成数字签名、解密公钥加密的信息,以及构造交易。

常见形式[编辑 | 编辑源代码]

  • 私钥表示,常为 64 位十六进制字符串。示例:e331b6d69882b4a62b6d8467e979b76838b6d8c7e8b862b3e5a1c2eb8e8c7c82
  • 公钥表示,椭圆曲线加密中的公钥是点坐标(x, y)的压缩形式,通常为 66 位十六进制字符串。示例:04bfcabbbfbbeb01c2672542c063f3f3bfcba2b2c1b7b3b8f7b8c7b7b8c7b7b8
  • 助记词(Mnemonic)私钥的简化表示,用人类可读的单词组合生成,便于记忆。示例:cat turtle apple star moon river bridge...

混合密码系统[编辑 | 编辑源代码]

由于非对称密钥算法通常比对称密钥算法计算量大得多,因此常用公私钥非对称密钥交换算法来加密和交换对称密钥,之后使用对称密钥密码学来传输数据,采用现已共享的对称密钥进行对称密钥加密算法。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)等。

示例[编辑 | 编辑源代码]

以下是一些广泛认可的非对称密钥技术,适用于不同的目的:

  • Diffie–Hellman 密钥交换协议
  • DSS(数字签名标准),包括数字签名算法(DSA)
  • ElGamal
  • 椭圆曲线密码学
  • 椭圆曲线数字签名算法(ECDSA)
  • 椭圆曲线 Diffie–Hellman(ECDH)
  • Ed25519 和 Ed448(EdDSA)
  • X25519 和 X448(ECDH/EdDH)
  • 各种密码认证密钥协议
  • Paillier 密码系统
  • RSA 加密算法(PKCS#1)
  • Cramer–Shoup 密码系统
  • YAK 认证密钥协议

尚未广泛采用的非对称密钥算法示例:

  • NTRUEncrypt 密码系统
  • Kyber
  • McEliece 密码系统

一些著名的,但不安全的非对称密钥算法示例:

  • Merkle–Hellman 背包密码系统

使用非对称密钥算法的协议示例:

  • S/MIME
  • GPG(OpenPGP 的实现)和互联网标准
  • EMV,EMV 证书颁发机构
  • IPsec
  • PGP
  • ZRTP(安全的 VoIP 协议)
  • 由 IETF 标准化的传输层安全性(TLS)及其前身安全套接层(SSL)
  • SILC
  • SSH
  • 比特币
  • Off-the-Record Messaging

参考链接[编辑 | 编辑源代码]