如果你曾经生成过 CSR,你很可能选择了”RSA 2048″作为密钥类型。下面将解释这意味着什么:RSA 算法是如何工作的、一个你可以手动验证的实例,以及该选择哪种密钥大小。我们还将介绍 2026 年 9 月的分解记录,这些记录并不会威胁到 2048 位密钥。

快速解答:RSA(Rivest-Shamir-Adleman)是一种发表于 1977 年的公钥密码系统。任何人都可以使用你的公钥加密消息或验证签名,但只有你的私钥才能解密或签名。它的安全性依赖于分解两个大素数乘积的难度。
本指南介绍的是 RSA 算法。安全公司 RSA Security 以这三位发明者的名字命名。
2025-2026 年发生的变化
- RSA-896,一个 896 位的挑战数字,于 2026 年 9 月 19 日被分解。而 2048 位密钥仍然远远无法企及。
- RSA 不再用于建立 HTTPS 会话密钥。TLS 1.3 取消了 RSA 密钥交换,而 RFC 10015(2026 年 7 月)在 TLS 1.2 中也禁止了它。现在 RSA 仅用于签署握手过程。
- NIST 的草案计划提议在 2030 年之后弃用 RSA-2048,并在 2035 年之后完全禁止使用 RSA。
- 公共 CA 仍在颁发 RSA-2048 证书,浏览器也仍然信任它们。
目录
- 什么是 RSA 加密?
- 什么是 RSA 密钥?
- RSA 密钥大小
- RSA 加密是如何工作的?
- RSA 加密步骤:一个实际示例
- RSA 应用于哪些场景?
- SSL 证书中的 RSA
- RSA 与 AES 和 ECC 的对比
- RSA 的优势与劣势
- RSA 安全吗?
- RSA 是否正在被淘汰?
- RSA 加密常见问题
什么是 RSA 加密?
RSA 加密是一种非对称加密形式:它使用一个公钥来加密数据,使用另一个独立的私钥来解密。而像 AES 这样的对称密码则使用同一个共享密钥来完成加密和解密。
它的安全性依赖于因数分解。将两个大素数相乘很容易,但要从它们的乘积(称为半素数)反推出这两个素数,一旦乘积达到 2048 位长度,用任何已知的经典方法都是不切实际的。
Ron Rivest、Adi Shamir 和 Leonard Adleman 于 1977 年在麻省理工学院(MIT)发表了该算法。英国 GCHQ 的 Clifford Cocks 早在 1973 年就发现了一个等效系统,但他的研究成果直到 1997 年才解密公开。
RSA 很少直接加密你的实际数据。它速度较慢,而且只能处理比其密钥长度更短的消息。因此系统通常采用混合加密:RSA 密码体系保护一个短的密钥或为消息签名,而 AES 则负责加密数据本身。
RSA 代表什么?
RSA 代表 Rivest-Shamir-Adleman,这是三位在 1977 年发表该算法的 MIT 研究人员的姓氏。它并非某个技术术语的缩写。你还会看到它被称为 RSA 算法、RSA 密码系统或 RSA 密码;这三种说法的含义都相同。
什么是 RSA 密钥?
RSA 密钥是数学上相关联的一对密钥中的一半。公钥是两个数字,(e, n),私钥是 (d, n)。其中 n 是两个保密素数的乘积,只有知道这两个素数的人才能计算出私密指数 d。
你的 RSA 公钥会被写入证书签名请求(CSR),随后被纳入颁发的证书中,任何浏览器都可以读取它。而你的 RSA 私钥则保留在你的服务器上,永远不会发送给 CA。如果私钥泄露,任何人都可以冒充你的网站,因此请遵循我们的私钥存储最佳实践。
在磁盘上,密钥是以 PEM 格式存储的文本文件,开头为 -----BEGIN PRIVATE KEY-----。我们关于PEM 文件和查找 SSL 私钥的指南详细解释了该格式以及服务器存放私钥的位置。
公钥指数 e 几乎总是 65537。它是一个素数,足够大以防范小指数攻击,并且等于 2¹⁶ + 1。这个数字在二进制中只有两个 1 位,因此加密和签名验证都能保持较快速度。
RSA 密钥大小:2048、3072 还是 4096 位?
对于标准 SSL 证书,请使用 2048 位的 RSA 密钥。这是公共 CA 接受的最小尺寸,也是三者中速度最快的。如果你需要达到 NIST 草案计划中预期 2030 年之后所要求的 128 位安全级别,请选择 3072 位。4096 位密钥虽然增加了强度,但会拖慢繁忙服务器上每一次握手的速度。
| RSA 密钥大小 | 安全强度(NIST SP 800-57) | 公共 CA 支持状态 | 适用场景 |
|---|---|---|---|
| 1024 位 | 80 位或更低 | 不被接受 | 不适用于任何场景,请予以替换 |
| 2048 位 | 112 位 | 最低接受标准 | 大多数网站 |
| 3072 位 | 128 位 | 可接受 | 需满足 128 位策略要求的密钥 |
| 4096 位 | 128 至 192 位之间 | 可接受 | 有此要求的策略 |
| ECDSA P-256(供对比) | 128 位 | 可接受 | 更小、更快的替代方案 |
CA/Browser 论坛的基线要求(第 6.1.5 节)为公共证书设定了下限:RSA 模数至少为 2048 位,且长度必须能被 8 整除。ECDSA 密钥必须使用 P-256、P-384 或 P-521 曲线。
2048 位的模数大约有 617 位十进制数字。目前公开分解出的最大 RSA 数字有 270 位数字(见短密钥与分解记录)。如果你正在为新证书选择密钥类型,我们的ECDSA 与 RSA 对比介绍了兼容性和速度方面的内容。
RSA 加密是如何工作的?
RSA 加密算法分三个阶段逐步进行:密钥生成、加密和解密。每个阶段都使用模运算(一种类似钟表的数学方式,数字在达到模数后会循环回绕),以及公钥与私钥之间的联系。
RSA 密钥生成
- 使用强随机数生成器选取两个较大的随机素数 p 和 q。对于 2048 位密钥,每个素数约为 1,024 位。
- 将它们相乘:n = p × q。这个模数决定了密钥的大小。
- 计算欧拉函数:φ(n) = (p − 1)(q − 1)。
- 选择公钥指数 e,它必须与 φ(n) 除 1 之外没有公因子。实际使用的密钥采用 65537,而不是许多教科书中的 e = 3。
- 使用扩展欧几里得算法计算私钥指数 d,即 e 关于模 φ(n) 的模逆元。
公钥为 (e, n),私钥为 (d, n)。请将 p 和 q 与 d 一样严格保密,因为任何掌握它们的人都可以重建私钥。
PKCS #1 标准使用卡迈克尔函数 λ(n) = lcm(p − 1, q − 1) 来定义 d,而不是 φ(n)。这种方法可能产生一个更小的 d,且效果同样良好。在下面的示例中,两种方法都得到 d = 23。
RSA 加密与解密
加密时,先将消息转换为一个小于 n 的数字 M,然后通过模幂运算计算密文 C:
C = Mᵉ mod n
解密时,应用私钥:
M = Cᵈ mod n
只有拥有 d 的人才能逆转第一步操作,因此两个素未谋面的通信方也可以通过公开网络交换秘密信息。实际系统在加密前还会添加填充(参见不当填充)。
RSA 数字签名
RSA 签名以相反顺序运行相同的数学运算。你先对消息进行哈希处理,然后用你的私钥将该哈希值提升到 d 次幂。任何人都可以使用你的公钥将签名提升到 e 次幂,并将结果与他们自己计算出的哈希值进行比较。
如果两者匹配,就证明该消息确实来自密钥持有者且未被篡改。现代 RSA 签名使用 PSS 填充方案,这是 TLS 1.3 对握手签名所要求的方案。
RSA 加密步骤:使用较小数字的实际示例
以 p = 17 和 q = 11 为例,RSA 将消息 88 转换为密文 11,再还原回 88。每一步都足够小,可以用计算器手动验证。
- 素数:p = 17 和 q = 11。
- 模数:n = 17 × 11 = 187。
- 欧拉函数值:φ(n) = 16 × 10 = 160。
- 公钥指数:e = 7,因为 gcd(7, 160) = 1,所以有效。
- 私钥指数:求出满足 7 × d mod 160 = 1 的 d。
扩展欧几里得算法需要两次除法:160 = 7 × 22 + 6,然后 7 = 6 × 1 + 1。反向推导:1 = 7 − 6 = 7 − (160 − 7 × 22) = 7 × 23 − 160。因此 d = 23。验证:7 × 23 = 161,而 161 mod 160 = 1。
由此得到公钥 (7, 187) 和私钥 (23, 187)。现在加密数字 88。在实际系统中,文本会先转换为数字,例如使用 ASCII 编码。
- 加密:C = 88⁷ mod 187 = 11
- 解密 RSA 加密后的消息:M = 11²³ mod 187 = 88
使用卡迈克尔函数的方法得到相同的 d:λ(187) = lcm(16, 10) = 80,且 7 × 23 = 161 = 2 × 80 + 1。
请注意,88 每次都会加密为 11。教科书式的 RSA 是确定性的,因此攻击者如果猜到了可能的消息内容,就可以用你的公钥加密该内容并进行比对。这正是实际使用的 RSA 总会添加随机填充的原因。
实际使用的密钥遵循相同的步骤,只是素数长达数百位数字。截获密文的人在不知道 p、q 或 d 的情况下无法将其还原。
RSA 加密示例,p = 17,q = 11:密钥生成、将 88 加密为 11,再解密还原为 88
RSA 应用于哪些场景?
RSA 用于在 HTTPS 中验证服务器身份、为软件和证书签名、加密电子邮件,以及保护 SSH 和 VPN 连接。这些用途使它成为网络安全领域最常用的算法之一。如今它很少用于加密大批量数据,在现代 TLS 中也不再用于交换会话密钥。
SSL/TLS 证书与 HTTPS 中的 RSA
你的SSL 证书(即 X.509 证书)保存着你的 RSA 公钥。在现代TLS 握手中,该密钥用于验证你服务器的身份,而不再用于加密会话密钥。
当浏览器通过 TLS 1.3 建立 HTTPS 连接时:
- 浏览器和服务器通过临时密钥交换(ECDHE)协商出会话密钥。Chrome 在此处使用 X25519 与后量子算法 ML-KEM 的混合方案。
- 服务器发送其数字证书,浏览器检查 CA 的签名以及证书的有效性。
- 服务器使用其 RSA 私钥对握手过程进行签名,浏览器则使用证书中的公钥进行验证。
- 双方使用 AES 等对称密码对会话进行加密。
较旧的 TLS 1.2 配置可以改用 RSA 密钥交换:浏览器使用服务器的公钥加密一个秘密值。TLS 1.3 在 2018 年移除了这种模式,因为它缺乏前向保密性。一旦私钥日后被窃取,任何人都可以解密之前记录下来的通信内容。
2026 年 7 月发布的 RFC 10015 现已禁止在 TLS 1.2 中使用 RSA 密钥交换。客户端不得提供该选项,服务器也不得选择它。
数字签名、代码签名与证书颁发机构
RSA 实现了数字签名,用来证明一条消息或文件确实来自发送者且未被篡改。开发者在为软件签名时使用自己的私钥,而操作系统则使用对应的公钥来验证该签名。
同样的机制也构建了SSL/TLS 连接中的信任关系。你在证书签名请求(CSR)中发送你的公钥,证书颁发机构(CA)再用自己的私钥为你的证书签名。浏览器存储着 CA 的根证书,因此可以验证该签名。
电子邮件、SSH 和 VPN
Pretty Good Privacy(PGP)和 S/MIME 等电子邮件工具使用 RSA 来保护你的邮件。发送方使用接收方的公钥加密一次性消息密钥,只有接收方的私钥才能将其还原。
VPN 加密在握手过程中通常依赖 RSA 证书,以便你的设备能够确认自己正在与真正的 VPN 服务器通信。
SSH 使用 RSA 来生成主机密钥和用户密钥,不过自 OpenSSH 9.5(2023 年 10 月)起,ssh-keygen 的默认密钥类型已变为 Ed25519。除非旧系统只接受 RSA,否则建议为新的 SSH 密钥选择 Ed25519。我们的 SSH 与 SSL 对比指南解释了这两种协议的区别。
SSL 证书中的 RSA:密钥类型、CSR 与续订
对于大多数网站,建议使用 RSA-2048 密钥订购 SSL 证书;如果你的服务器和访问者都支持,也可以选择 ECDSA P-256。无论哪种方式,你都需要在自己的服务器上生成私钥,而公钥则会通过 CSR 发送给 CA。
RSA 还是 ECDSA?
RSA-2048 几乎可以兼容目前仍在使用的所有客户端,包括较旧的设备和嵌入式系统。ECDSA P-256 则以小得多的密钥提供 128 位的安全性,因此证书更小、握手更快。如果你的访客主要使用现代浏览器,请选择 ECDSA;如果需要兼容旧设备,请继续使用 RSA。我们关于ECC 证书的指南解释了如何获取此类证书。
生成 RSA 密钥和 CSR
一条 OpenSSL 命令即可创建 2048 位的 RSA 私钥和 CSR:
openssl req -new -newkey rsa:2048 -nodes -keyout example.com.key -out example.com.csr
该命令会要求你输入域名和组织相关信息。将 .csr 文件发送给 CA,并将 example.com.key 文件保留在服务器上。-nodes 参数会使密钥保持未加密状态,以便你的 Web 服务器在启动时能够读取它。
更喜欢使用表单方式?我们的 CSR 生成器可以完成同样的工作,我们的 OpenSSL 命令列表则涵盖了其余内容。
检查证书中的 RSA 密钥
运行 openssl x509 -in example.com.crt -noout -text 并查看以下三行内容:
- Public Key Algorithm: rsaEncryption
- Public-Key: (2048 bit)
- Exponent: 65537 (0x10001)
“Signature Algorithm”(签名算法)这一行,例如 sha256WithRSAEncryption,描述的是 CA 对证书进行签名所用的方式,而不是你的密钥类型。要在提交 CSR 之前检查其内容,可以将其粘贴到我们的 CSR 解码器中。
有效期缩短意味着更频繁地处理密钥
根据 CA/Browser 论坛规则,证书的最长有效期正在逐步缩短:自 2026 年 3 月 15 日起为 200 天,自 2027 年 3 月 15 日起为 100 天,自 2029 年 3 月 15 日起为 47 天。每次续订都需要一份新的 CSR,因此你将更频繁地决定是否重复使用现有的 RSA 密钥。
除非有特殊原因迫使你重复使用密钥(例如密钥绑定或使用硬件安全模块),否则建议每次续订时都生成新密钥。使用 ACME 协议自动化续订流程可以让这一操作变得轻松routine。
RSA 与 AES 和 ECC 的对比
RSA、AES 和 ECC 承担不同的职责,一次 HTTPS 连接至少会用到其中两种。AES 负责加密数据,而 RSA 或 ECC 负责证明服务器的身份。
| RSA | AES | ECC(ECDSA、ECDHE) | |
|---|---|---|---|
| 类型 | 非对称 | 对称 | 非对称 |
| 达到 128 位安全性所需的密钥大小 | 3072 位 | 128 位 | 256 位 |
| 速度 | 较慢 | 较快 | 在密钥生成和签名方面比 RSA 更快 |
| 典型用途 | 证书签名 | 批量加密数据 | 密钥交换与证书签名 |
因此,对于”RSA 和 AES 哪个更好?”这个问题,答案是两者都需要:AES 用于加密数据,而非对称算法则用于建立加密所需的前置条件。我们的 RSA 与 AES 对比文章有更深入的讨论,而 ECDSA 与 RSA 对比则介绍了证书选择方面的内容。
RSA 的优势与劣势
RSA 的主要优势在于,两个陌生人无需事先共享秘密就能安全通信。它的主要缺点在于速度、密钥大小,以及一旦实现不当就很容易被攻破。
RSA 的优点
- 无需共享秘密:双方无需提前见面即可建立安全通信。
- 公钥密码学:任何人都可以使用你公开发布的密钥对你加密信息或验证你的签名。
- 数字签名:RSA 能够验证身份并确认消息未被篡改。
- 广泛的兼容性:TLS、PGP、S/MIME、SSH 以及每一个公共 CA 都支持它。
RSA 的缺点
- 加密速度较慢:RSA 比 AES 慢得多,因此它只适合处理密钥和哈希值等小数据。
- 密钥较大:RSA 需要 3072 位才能达到 ECDSA 用 256 位就能实现的 128 位安全性。
- 负载量小:使用 OAEP 和 SHA-256 的 2048 位密钥最多只能加密 190 字节。
- 量子风险:在足够强大的量子计算机上运行 Shor 算法将能够破解 RSA。
- 实现脆弱:填充、随机性和时序方面的失误曾导致实际的 RSA 部署被攻破。
RSA 安全吗?已知攻击方式及预防措施
是的。采用 2048 位或更大密钥的 RSA 密码体系能够抵御所有已知的经典攻击。在实践中,RSA 之所以失效,几乎总是由于具体实现存在问题:随机性不足、缺少填充、时序泄露,或者密钥太短。
侧信道攻击
侧信道攻击绕过数学本身,转而测量计算机:解密所需的时间、消耗的电量,或者发出的信号。这些测量结果都可能泄露私钥的部分比特信息。
防御方法是采用恒定时间代码(无论输入如何都保持相同的处理时间),并结合”盲化”技术(对每次私钥运算进行随机化)。分支预测分析是一种相关风险,因此代码不应根据保密数据进行分支判断。
较弱的随机数生成器
RSA 密钥的安全性取决于用于选取 p 和 q 时所使用的随机性是否足够强。如果素数是可预测的,攻击者就能重新生成它们并重建私钥。弱素数(例如两个距离过近的素数)同样危险。
请使用操作系统提供的随机源来生成密钥,例如 Linux 上的 /dev/urandom,它利用硬件噪声等高熵来源。2008 年的 Debian OpenSSL 漏洞事件展示了若不这样做会带来什么后果:受影响的 Debian 和 Ubuntu 系统生成了可预测的密钥,所有这些密钥最终都必须更换。
短密钥与分解记录
短 RSA 密钥会被因数分解攻破,而公开记录一直在不断刷新:截至 2026 年 9 月已达到 896 位。以下是来自 RSA 分解挑战赛的几个里程碑:
| 编号 | 大小 | 分解日期 | 备注 |
|---|---|---|---|
| RSA-155 | 512 位 | 1999 年 8 月 22 日 | 首个公开分解的 512 位 RSA 数字 |
| RSA-768 | 768 位 | 2009 年 12 月 12 日 | |
| RSA-250 | 829 位 | 2020 年 2 月 28 日 | 此前一直保持的记录,直至 2026 年 |
| RSA-260 | 862 位 | 2026 年 9 月 3 日 | Eric Lu,Cognition 公司;耗时约 13.5 个 GPU 年 |
| RSA-896 | 896 位 | 2026 年 9 月 19 日 | Stephen A. Weis;耗时约 30 个 GPU 年 |
两个团队都使用了 AI 编程助手(Cognition 公司的 Devin 和 Anthropic 公司的 Claude)将 CADO-NFS 分解软件移植到 GPU 上运行。而数学方法本身仍是标准的广义数域筛法(GNFS),这是目前已知最有效的经典方法。
这两项成果都没有使用量子计算机,两位研究人员都表示,已部署的 RSA-2048 密钥不会受到影响。Cognition 公司估计,RSA-2048 的分解难度大约是 RSA-1024 的十亿倍,而 RSA-1024 至今也没有被任何人分解出来。
参数选择不当同样会破坏 RSA 的安全性,例如私钥指数 d 太小。如果你在服务器上发现一个 1024 位的密钥,请立即予以更换:没有任何公共 CA 会为其颁发证书。
不当填充
切勿直接使用 RSA 加密原始数据。如果没有填充方案,相同的消息会产生相同的密文,攻击者便可以发起选定密文攻击。填充方案会在加密前添加随机的结构化字节。RSA 使用三种填充方案,均定义于 PKCS #1(RFC 8017)中:
- 最优非对称加密填充(OAEP),用于加密。
- PSS,用于签名。TLS 1.3 要求 RSA 握手签名必须使用该方案。
- PKCS #1 v1.5,最初的填充方案,目前仍允许用于证书签名。
PKCS #1 v1.5 加密方案正是 RSA 密钥交换被淘汰的原因。Daniel Bleichenbacher 于 1998 年发表了针对该方案的填充预言攻击,而 ROBOT 攻击在 2017 年发现,同样的漏洞依然存在于一些流行网站上。
密钥交换过程中的暴露风险
如果攻击者在握手过程中替换成自己的公钥,他们就能读取之后的所有通信内容。这就是中间人攻击。由受信任 CA 签名的证书能够阻止这种攻击,因为你的浏览器会检查证书的签名并拒绝伪造的密钥。这种攻击只有在跳过证书检查,或用户无视浏览器警告继续访问时才能奏效。
RSA 是否正在被淘汰?
目前还没有。2026 年,RSA 证书仍在被颁发和信任,但由于量子计算机的发展,NIST 已提议在未来十年内逐步淘汰 RSA。其草案计划 NIST IR 8547 建议在 2030 年之后弃用 RSA-2048,并在 2035 年之后完全禁止使用 RSA。该文件目前仍是 2024 年 11 月发布的初步公开草案。
这一威胁来自 1994 年发表的 Shor 算法,该算法能够在足够强大的量子计算机上快速分解大数。2025 年 5 月,谷歌量子 AI 团队的 Craig Gidney 估计,RSA-2048 只需不到 100 万个含噪声量子比特,就能在一周之内被攻破。他在 2019 年的估算则需要 2000 万个量子比特,而无论哪种规模的机器目前都尚未存在。
NIST 已于 2024 年 8 月 13 日最终确定了替代方案:用于密钥交换的 ML-KEM(FIPS 203),以及用于签名的 ML-DSA(FIPS 204)和 SLH-DSA(FIPS 205)。
密钥交换之所以率先迁移,是出于”现在收集,日后解密”的风险考虑:如今记录下来的流量,一旦大型量子计算机问世便可能被解密。这正是 Chrome 已经将 X25519 与 ML-KEM 配对使用的原因。而签名则不存在这种风险,因为伪造签名只有在证书有效期内才具有意义。
对于一个普通网站而言,目前无需紧急应对。继续使用 RSA-2048 或 ECDSA P-256 证书,实现续订自动化,并留意后量子证书的进展,公共 CA 目前尚未颁发此类证书。椭圆曲线密码学(ECC)同样面临量子风险,因此改用 ECDSA 带来的是速度提升,而非量子安全性。欲了解更多内容,请阅读 SSL 有效期背后的后量子问题。
RSA 加密常见问题
RSA 是非对称的。它使用两个不同的密钥:一个任何人都可以拥有的公钥,以及一个只有所有者持有的私钥。而像 AES 这样的对称算法则使用同一个共享密钥来完成加密和解密。对称算法速度快得多,但通信双方都必须事先拥有该密钥。
是的。RSA 密钥仍出现在 SSL/TLS 证书、代码签名、S/MIME 电子邮件、SSH 以及 VPN 中。发生变化的是它在 HTTPS 中的角色:自 TLS 1.3 起,RSA 负责签署握手过程,而不再用于交换会话密钥。CA 仍在颁发 RSA-2048 证书,浏览器也仍然信任它们。
这意味着数据受到了 RSA 算法的保护,通常是间接方式:RSA 保护一个较短的密钥,再由该密钥去加密数据。在网站上,证书详情中出现的”RSA”表示该网站的密钥对采用 RSA 算法,通常为 2048 位。
RSA-2048 是指其模数 n 为 2048 位(约 617 位十进制数字)的 RSA 密钥。这是公共 CA 为 SSL 证书接受的最小尺寸,按照 NIST 的衡量标准可提供 112 位的安全性。它同时也是 RSA 分解挑战赛中一个尚未被任何人分解的数字的名称。
以当今的经典方法来看,所需时间远远超过任何证书的有效期。RSA-896 耗费了大约 30 个 GPU 年,而 Cognition 公司估计 RSA-2048 的分解难度大约是尚未被分解的 RSA-1024 的十亿倍。尚存悬念的是量子方面:Gidney 在 2025 年的估算显示,在一台目前尚未问世的机器上,破解时间可能不到一周。
使用值得信赖的基于 RSA 的 SSL 证书保护你的网站
对于大多数网站而言,从 SSL Dragon 购买一张采用 RSA-2048 密钥的 DV 证书是理想的起点。它可以在几分钟内颁发,受到 99.99% 浏览器的信任,并且兼容所有客户端。如果你的服务器和访问者都支持,也可以选择 ECDSA 以获得更小、更快的握手。比较 SSL 证书,选择适合你网站需求的验证级别。






