公钥/私钥(Public Key/Private Key)
公钥密码学(也称为非对称密码学)是使用一对相关密钥的加密系统领域。每对密钥由一个公钥和一个对应的私钥组成。密钥对是通过基于数学问题的加密算法生成的,这些数学问题被称为单向函数。公钥密码学的安全性依赖于保持私钥的机密性;公钥可以公开分发而不危及安全性。公钥密码学有多种类型,每种类型具有不同的安全目标,包括数字签名、Diffie-Hellman密钥交换、公钥封装和公钥加密[1]。
公钥算法是现代密码系统中的基础安全原语,包括提供电子通信和数据存储保密性与真实性保证的应用和协议。它们是众多互联网标准的基础,如传输层安全协议(TLS)、SSH、S/MIME和PGP。与对称密码学相比,公钥密码学在许多用途上可能过于缓慢,因此这些协议通常将对称密码学与公钥密码学结合使用,形成混合密码系统[2]。
概述
在1970年代中期之前,所有的密码系统都使用对称密钥算法,其中发送方和接收方都使用相同的密钥与基础算法进行加密,且必须保持密钥的机密性。每个这样的系统中的密钥都必须在使用系统之前以某种安全的方式在通信方之间交换——例如通过安全通道。这一要求从来不是简单的,且随着参与者数量的增加,或者在没有安全通道的情况下,或者在(作为合理的加密实践)频繁更换密钥时,这一问题很快变得不可管理。特别是,如果消息需要对其他用户保持安全,则需要为每对用户提供单独的密钥。
与此相比,在公钥密码系统中,公钥可以广泛且公开地传播,只有相应的私钥需要保持机密。
公钥密码学中最著名的两种类型是数字签名和公钥加密:
- 数字签名系统:发送方可以使用私钥和消息一起生成签名。任何拥有相应公钥的人都可以验证签名是否与消息匹配,但无法知道私钥的伪造者无法找到任何可以通过公钥验证的消息/签名对。例如,软件发布者可以创建一个签名密钥对,并将公钥包含在安装在计算机上的软件中。后来,发布者可以使用私钥签名软件更新,任何收到更新的计算机都可以通过使用公钥验证签名来确认更新的真实性。只要软件发布者保持私钥的机密性,即使伪造者分发恶意更新到计算机,它们也无法说服计算机认为恶意更新是真实的。
- 公钥加密系统:任何拥有公钥的人都可以加密消息,得到密文,但只有知道相应私钥的人才能解密密文以获得原始消息。例如,一名记者可以在网站上发布加密密钥对的公钥,以便来源能够以密文的形式向新闻机构发送机密消息。只有知道相应私钥的记者才能解密密文以获取来源的消息——一个监听者在邮件传输过程中无法解密密文。然而,公钥加密本身并不隐藏元数据,例如来源使用了哪个计算机发送消息,何时发送的消息,以及消息有多长。公钥加密本身也不会告诉接收者是谁发送了消息——它只隐藏了消息的内容。
一个重要的问题是如何确保/证明特定的公钥是可信的,即它是正确的并且属于声称的个人或实体,且没有被篡改或被某个(可能是恶意的)第三方替换。可以采取几种方法,包括:
- 公钥基础设施(PKI),其中一个或多个第三方——称为证书颁发机构(CA)——对密钥对的所有权进行认证。TLS就依赖于此。这意味着PKI系统(包括软件、硬件和管理)必须得到所有参与方的信任。
- 信任网络(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)等。
参考链接
- ↑ RFC 4949 - Internet Security Glossary, Version 2
- ↑ Algorithms for Lightweight Key Exchange - PMC