11.1 公钥加密–概述 Public-Key Encryption – An Overview

公钥加密的引入标志着密码学的一场革命。在此之前,密码学家完全依靠共享的秘密密钥来实现私人通信。相比之下,公钥技术使双方能够私下通信,而无需事先商定任何秘密信息。正如我们已经注意到的,这是非常令人惊讶的,也是非常直观的:这意味着一个房间对面的两个人只能通过大声喊叫进行交流,并且没有最初的秘密,他们可以以这样的方式交谈,以至于房间里的其他人都不知道他们在说什么!

在私钥加密的设置中,双方同意一个可由任何一方用于加密和解密的密钥。公钥加密在这两方面都是不对称的。一方(接收方)生成一对密钥(pk,sk),分别称为公钥和私钥。发送方使用公钥对消息进行加密;接收方使用私钥解密生成的密文。

由于目标是避免双方需要提前会面以就任何信息达成一致,发送方如何学习pk?在抽象层次上,有两种方式可以实现这一点。呼叫接收者爱丽丝和发送者鲍勃。在第一种方法中,当Alice得知Bob想要与她交流时,她可以在此时生成(pk,sk)(假设她还没有这样做),然后将pk以明文形式发送给Bob;Bob然后可以使用pk加密他的消息。我们强调,Alice和Bob之间的通道可能是公共的,但被假定为经过身份验证的,这意味着对手不能修改Alice发送给Bob的公钥(特别是不能用自己的密钥替换公钥)。有关如何在未经验证的通道上分发公钥的讨论,请参见第12.7节。

另一种方法是Alice提前生成密钥(pk,sk),而不依赖于任何特定的发送者。(事实上,在密钥生成时,Alice甚至不需要知道Bob想和她说话,甚至不需要知道Bob的存在。)Alice可以广泛传播她的公钥pk,比如,在她的网页上发布公钥pk,将公钥pk放在名片上,或将公钥pk放在公共目录中。现在,任何希望与Alice私下通信的人都可以查找她的公钥并按上述步骤进行。请注意,多个发送者可以使用相同的公钥pk多次与Alice通信,以加密其所有通信。

请注意,pk本质上是公开的,因此攻击者可以在上述任何一种情况下轻松了解pk。在第一种情况下,窃听Alice和Bob之间通信的对手直接获得pk;在第二种情况下,对手也可以自己查找Alice的公钥。我们看到,公钥加密的安全性不能依赖于pk的保密性,而必须依赖于sk的保密性。因此,Alice不得将其私钥透露给任何人,包括发件人Bob,这一点至关重要。

与私钥加密的比较 Comparison to Private-Key Encryption

也许私钥加密和公钥加密之间最明显的区别在于前者假定所有密钥都是完全保密的,而后者只要求私钥sk是保密的。虽然这看起来像是一个细微的区别,但其影响是巨大的:在私钥设置中,通信双方必须能够以某种方式共享密钥,而不允许任何第三方知道它,而在公钥设置中,公钥可以通过公共通道从一方发送到另一方,而不会影响安全性。对于在房间里叫喊的当事人,或者更现实地说,通过电话线或互联网等公共网络进行通信的当事人,公钥加密是唯一的选择。

另一个重要区别是私钥加密方案在加密和解密时使用相同的密钥,而公钥加密方案在每个操作中使用不同的密钥。也就是说,公钥加密本质上是不对称的。公钥设置中的这种不对称性意味着发送方和接收方的角色不能互换,因为它们在私钥设置中是可互换的:单个密钥对只允许单向通信。(双向通信可以通过多种方式实现;要点是,对公钥加密方案的一次调用将强制区分作为接收方的一个用户和作为发送方的其他用户。)此外,公钥加密方案的单个实例使多个发送者能够与单个接收者私下通信,而私钥的情况则相反,在私钥的情况下,双方共享的私钥只允许这两方之间的私人通信。

通过总结和阐述前面的讨论,我们发现公钥加密相对于私钥加密具有以下优势:

  • 公钥加密(在某种程度上)解决了密钥分配问题,因为通信方不需要在通信之前秘密共享密钥。即使监控双方之间的所有通信,双方也可以秘密通信。
  • 当单个接收者与N个发送者(例如,处理来自多个购买者的信用卡订单的在线商户)通信时,接收者存储单个私钥sk比共享、存储和管理N个不同的密钥(即,每个发送者一个)方便得多。事实上,当使用公钥加密时,在生成密钥时不需要知道潜在发送者的数量和身份。这使得“开放系统”具有极大的灵活性

当接收者只想接收来自某个特定个人的消息时,公钥加密方案允许任何人充当发送者这一事实可能是一个缺点。在这种情况下,需要经过身份验证的(私钥)加密

方案将是比公钥加密更好的选择。

公钥加密的主要缺点是它比私钥加密大约慢2到3个数量级。

在资源严重受限的设备(如智能卡或射频识别(RFID)标签)中实施公钥加密可能是一个挑战。即使台式计算机正在执行加密操作,每秒执行数千次此类操作(如在线商户处理信用卡交易的情况)也可能是禁止的。因此,当私钥加密是一种选择时(即,如果双方可以事先安全地共享密钥),则通常应使用私钥加密。

事实上,我们将在第11.3节中看到,在公钥设置中使用私钥加密,以提高长消息(公钥)加密的效率。因此,彻底理解私钥加密对于理解公钥加密在实践中是如何实现的至关重要。

公钥的安全分发 Secure Distribution of Public Keys

在我们到目前为止的整个讨论中,我们含蓄地假设对手是被动的;也就是说,敌方只窃听发送方和接收方之间的通信,而不主动干扰通信。如果对手有能力篡改诚实方之间的所有通信,并且这些诚实方事先不共享密钥,那么隐私就无法实现。例如,如果接收方Alice将其公钥pk发送给Bob,但对手将其替换为自己的密钥pk'(其知道匹配的私钥sk'),则即使Bob使用pk'加密其消息,对手也可以轻松恢复消息(使用sk')。如果对手能够更改存储在某个公用目录中的Alice公钥的值,或者当公钥从公用目录传输到Bob时,对手可以篡改该公钥,则类似的攻击也会起作用。如果Alice和Bob事先不共享任何信息,并且不愿意依赖相互信任的第三方,那么Alice或Bob无法阻止此类主动攻击,甚至无法告知正在发生此类攻击。

重要的是,我们在本章中对公钥加密的处理假设发送方能够获得接收方公钥的合法副本。(这将隐含在我们提供的安全定义中。)也就是说,我们假设密钥分发是安全的。之所以做出这种假设,并不是因为上述类型的主动攻击不值得关注。事实上,它们是一种严重的威胁,必须在任何使用公钥加密的真实系统中加以处理。相反,之所以做出这种假设,是因为存在防止主动攻击的其他机制(例如,参见第12.7节),因此,将安全公钥加密的研究与安全公钥分发的研究分离是方便的(也是有用的)。