非对称密钥密码
非对称密钥密码系统 / 公钥密码系统(如 RSA)、椭圆曲线密码学(ECC)、Diffie-Hellman、ElGamal、McEliece、NTRU 等)使用一对在数学上相互关联的密钥:公钥(加密密钥)和私钥(解密密钥)。
非对称密钥密码系统提供密钥对生成(私钥 + 公钥)、加密算法(非对称密钥密码和 RSA-OAEP、ECIES 等加密方案)、数字签名算法(如 DSA、ECDSA 和 EdDSA)以及密钥交换算法(如 DHKE 和 ECDH)。
使用公钥加密的消息随后由私钥解密。使用私钥签名的消息随后由公钥验证。公钥通常公开给所有人,而私钥则应保密。根据对应公钥计算出私钥在设计上是计算不可行的。
公钥密码系统
著名的公钥密码系统包括:RSA)、ECC、ElGamal、DHKE、ECDH、DSA、ECDSA、EdDSA、Schnorr 签名。不同的公钥密码系统可以提供以下一种或多种能力:
- 密钥对生成:随机生成由私钥及其对应公钥组成的密钥对。
- 加密 / 解密:使用公钥加密数据,并使用私钥解密数据(通常采用混合加密方案)。
- 数字签名(消息认证):使用私钥签署消息,并使用公钥验证签名。
- 密钥交换算法:通过不安全信道在双方之间安全地交换加密密钥。
最重要、使用最广泛的公钥密码系统是 RSA 和 ECC。由于密钥更小、签名更短且性能更好,椭圆曲线密码学(ECC)是现代公钥密码系统中的推荐首选,尤其是在采用高度优化且安全的现代曲线(如 Curve25519 和 Curve448)时。
RSA 公钥密码系统)基于模幂运算(对一个数的幂取模)这一数学概念,以及一些数学构造和整数分解问题(对于足够大的密钥,该问题被认为在计算上不可行)。
椭圆曲线密码学(ECC)密码系统基于有限域上椭圆曲线的代数结构及其数学理论,以及椭圆曲线离散对数问题(ECDLP);对于足够大的密钥,该问题被认为在计算上不可行。ECC 通常与 ECDSA 算法(椭圆曲线数字签名算法)配合使用。ECC 的密钥和签名都比 RSA 更小,因此在大多数现代应用中更受青睐。稍后我们将结合示例详细讨论 ECC 和 ECDSA。
大多数公钥密码系统(如 RSA、ECC、DSA、ECDSA 和 EdDSA)都可被量子计算攻破(不具备抗量子能力),这意味着至少在理论上,足够强大的量子计算机能够在数秒内破解其安全性,并根据给定公钥计算出私钥。
非对称加密方案
非对称加密比对称加密更复杂,这不仅是因为它使用公钥和私钥,还因为非对称加密只能加密 / 解密较短的消息,而且消息必须映射到公钥密码系统的底层数学结构。某些密码系统(如 ECC)不直接提供加密原语,因此需要采用更复杂的方案。
在 RSA 系统中,输入消息应转换为大整数(例如使用 OAEP 填充);而在 ECC 中,消息无法直接加密,需要采用基于椭圆曲线 Diffie-Hellman 密钥交换(ECDH)的更复杂加密方案。本章稍后将对此进行详细说明。此外,非对称密码的速度明显慢于对称密码(例如,RSA 加密比 AES 慢约 1000 倍)。
为了克服上述限制并支持加密任意大小的消息,现代密码学采用非对称加密方案(也称为公钥加密方案 / 非对称加密构造 / 混合加密方案),例如密钥封装机制(KEM)和集成加密方案,将非对称加密与对称密钥密码结合起来。
下面展示如何结合公钥密码学与对称密码算法来加密大型文档或文件:

在上图中,加密后的对称密钥称为 KEM 块(使用公钥加密封装的密钥),加密后的数据文件称为 DEM 块(使用对称加密封装的数据)。加密消息由这两个块共同组成(封装密钥 + 封装数据)。
下面是相应的解密过程(使用公钥密码学和对称密码算法解密已加密的大型文档):

此类非对称加密方案的示例包括:RSA-OAEP、RSA-KEM 和 ECIES-KEM。
集成加密方案
集成加密方案(IES)是现代公钥加密方案,它将对称密码、非对称密码和密钥派生算法结合起来,提供安全的基于公钥的加密(PKE)。在 IES 方案中,非对称算法(如 RSA 或 ECC)用于加密或封装对称密钥,随后由对称密码(如 AES 或 ChaCha20)使用该密钥加密输入消息。某些 IES 方案还提供消息认证。IES 方案的示例包括 DLIES(离散对数集成加密方案)和 ECIES(椭圆曲线集成加密方案)。
密钥封装机制(KEM)
密钥封装机制(KEM)是一种非对称密码技术,用于加密并封装一个秘密密钥(称为“临时对称密钥”),该密钥随后通过对称密码来加密输入消息。KEM 使用接收方的公钥加密临时对称加密密钥,并将其作为加密消息的一部分进行封装。在密码学中,这一过程称为“密钥封装”。
基于 KEM 的混合加密方案输出由两部分组成:KEM 块,保存经过封装和加密的对称密钥(或用于派生该密钥的某些参数);以及 DEM 块(数据封装机制),保存经封装的对称加密数据(密码参数 + 密文 + 可选的认证标签)。
密钥封装机制(KEM)用于混合加密方案和集成加密方案:在底层公钥密码系统中生成一个随机元素,再通过对该随机元素进行哈希来派生对称密钥。这种方法简化了非对称加密与对称加密的组合过程。现代密钥封装机制的示例包括:RSA-KEM、ECIES-KEM 和 PSEC-KEM。
不应混淆密钥封装与密钥包装。
- 密钥封装(KEM)是指使用公钥加密另一个密钥(对称密钥或非对称密钥)。它用于构建具有可证明安全性的混合加密方案,例如使用给定的 ECC 公钥加密 AES 秘密密钥。
- 密钥包装是指使用对称密钥加密另一个密钥(可以是对称密钥,也可以是非对称密钥)。它用于加密、完整性保护和传输加密密钥。密钥包装无需使用 nonce,即可为加密密钥等特殊数据提供机密性和完整性保护。详情参见 RFC 3394。
数字签名
在密码学中,数字签名为数字文档提供消息认证、完整性和不可否认性。数字签名工作于公钥密码系统中,并使用公钥 / 私钥对。消息签名由私钥完成,消息验证由对应的公钥完成。
消息签名从数学上保证,某条消息由某个(秘密的)私钥签署,而该私钥对应某个(非秘密的)公钥。消息签署后,消息和签名都不能被修改,从而保证消息的认证性和完整性。任何知道消息签名者公钥的人都可以验证签名。签名完成后,签名者无法否认签名行为(这称为不可否认性)。
如今,数字签名广泛用于签署数字合同、授权银行付款,以及在公有区块链系统中签署数字资产转移交易。
大多数公钥密码系统(如 RSA 和 ECC)都提供安全的数字签名方案,例如 DSA、ECDSA 和 EdDSA。本节稍后将更详细地讨论数字签名。
密钥交换算法
在密码学中,密钥交换算法(密钥协商协议 / 密钥协商方案)允许双方交换加密密钥,以便使用加密算法(多数情况下是对称密码)。例如,当笔记本电脑连接到家中的 WiFi 路由器时,双方会协商一个会话密钥,用于对称加密两者之间的网络流量。
大多数密钥交换算法都基于公钥密码学及其背后的数学理论,例如离散对数、椭圆曲线等。
Diffie–Hellman(DHKE 和 ECDH)等匿名密钥交换不提供参与方身份认证,因此容易受到中间人攻击,但能够抵御流量截获(嗅探)攻击。
认证密钥协商方案会验证参与密钥交换各方的身份,并通过数字签名密钥(例如 PKI 证书)、口令认证密钥协商或其他方法来防止中间人攻击。