TL;DR–混合公钥加密

2022-03-01 22:20:06

HPKE是RFC 9180中描述混合公钥加密方案的CFRG。这本书是由我的Cryspen联合创始人Karthikeyan Bhargavan和他的一名博士生Benjamin Lipp合著的,作为他在Inria研究的一部分。

这篇博客文章将简要概述该规范,并描述一些用例。

如果你想了解更多关于HPKE和RFC过程背后的安全证明,Benjamin写了一篇关于它的优秀博客文章。

混合公钥加密(Hybrid Public Key Encryption,简称HPKE)是一种cyrptographic机制,允许将有效负载加密为公钥。它被称为“混合”,因为有效载荷是用对称方案加密的。然后将对称密钥加密为接收方公钥。HPKE标准定义了一些基本设置的自然扩展,允许发送方对自己进行身份验证。

自20世纪90年代初以来,在PGP或SMIME等协议中以不同的方式使用了混合公钥加密。虽然这两个协议适用于非常特定的用例,但ECIES中描述了更通用的混合加密版本。ECIES是当今许多系统的一部分。例如,在iOS设备上的安全enclave中存储密钥使用ECIES。对于混合密码系统的更深入的解释和历史,我建议阅读克里斯托弗·伍德的博客文章。

然而,没有关于混合公钥加密和现代原语的一般描述。HPKE标准解决了这个问题。甚至在RFC最终确定之前,它就被用于ECH、MLS、ODOH和PPM的规范中。这表明对HPKE的需求很高。

HPKE有四种不同的操作模式:Base、Auth、PSK、AuthPSK。在这篇博文中,我们只描述了两种最常用的模式Base和Auth。

基本模式是HPKE最常见的用例,其中有效负载被加密为公钥。所有其他模式都以不同的方式进行身份验证。

AuthPSK使用发送方的私钥以及预共享的高熵密钥进行身份验证

下图描述了加密到公钥的一般流程。这是HPKE中的基本模式。这是混合密码系统最基本的应用。Alex从Sasha那里知道公钥,想向他们发送一些数据。Shasha的公钥用于加密用于加密数据的共享密钥。加密的共享密钥以及加密的数据被发送给Sasha,Sasha可以用相应的私钥检索共享密钥。

有时,对数据的发送者进行身份验证是有用的或必要的。如下图所示,它代表HPKE Auth模式。身份验证是通过混合发送方的私钥来实现的,这样接收方只有在他们为发送方使用的公钥与使用的私钥对应时才会检索到正确的共享密钥。

HPKE本质上是标准化如何使用密钥封装机制(KEM)进行混合加密。HPKE中的发送方使用KEM生成共享密钥和封装。然后在AEAD中使用共享秘密(在通过密钥调度运行它之后),以加密有效负载。

到目前为止,所有HPKE用例都只利用HPKE的单次API。为了将有效载荷加密为公钥,发送方需要提供接收方的公钥pkR、一些信息信息和附加数据,以将加密绑定到特定上下文,以及有效载荷pt。HPKE返回发送给接收器的密文ct和封装enc。

使用身份验证模式时,还需要发送方的私钥sk。

接收器将封装enc和密文ct与其私钥一起获取有效载荷。

使用身份验证模式时,还需要发送方的公钥pkS。

HPKE允许使用同一共享密钥进行多次加密。如果从发送方向接收方发送多条消息,这是有利的。为此,HPKE生成一个允许加密(和解密)多条消息的上下文。

请注意,HPKE比AEAD RFC更进一步,简化了API。消费者只需要提供有效负载和(可能是空的)附加数据。HPKE负责向AEAD提供唯一的nonce,如果对上下文执行了最大数量的加密,则会失败,尤其是如果nonce会溢出。

在某些情况下,应用程序需要建立额外的共享机密。这可以通过HPKE导出器接口实现。API与上述密封和开启功能类似,但不需要有效载荷或额外数据。相反,我必须提供导出者的上下文和导出秘密的长度。

我们没有为HPKE发明新的用例,而是描述了HPKE如何在MLS和ECH中使用,因为它们反映了混合公钥加密的常见用途。

MLS(Message Layer Security)是IETF的一份草案,它标准化了一种新的有效加密分组参与者之间消息的方法。它旨在解决即时通讯中的端到端加密问题。HPKE是一个核心构建块。为了将消息加密到协议中的特定实体,MLS使用HPKET将消息加密到特定公钥。

ECH(Encrypted Client Hello)是TLS(传输层安全)中的一种机制,用于在服务器公钥下加密ClientHello消息。ECH草案中的描述与上述HPKEA的基本模式直接对应。这使得TLS连接变得更私密,因为它们不会泄露有关连接的信息,尤其是客户端希望连接到的确切服务器。

为了更好地理解HPKE的信息流和工作原理,我们在下面放了一个交互式演示来演示HPKE是如何工作的。

发送方从接收方检索在第一步中生成的公钥。

发送方使用HPKE加密有效载荷以及接收方公钥中的信息和附加数据。

单击“HPKE Open”时,接收方使用私钥检索共享密钥并解密密文。“信息”和“附加数据”与发送方输入的信息相同。

该演示是用hacspec(Rust的子集)编写的,带有WASM前端。请继续关注后续的博客文章,深入了解这个实现的细节。

HPKE是一个简单但功能强大的新工具,可以有效地解决密钥分发问题(参见MLS用例),并增加现有协议的隐私(参见ECH用例)。

我的公司Cryspen为使用HPKE以及HPKE和其他协议的高保证实现提供支持。联系以获取更多信息。