正在加载,请稍候…

RSA 密钥对:工作原理与生成方法

理解 RSA 公钥/私钥密码学。了解密钥大小、使用场景,并在浏览器中生成密钥对。

RSA 密钥对:工作原理与生成方法

什么是 RSA?

RSA(以 1977 年发表该算法的 Rivest、Shamir 和 Adleman 命名)是世界上使用最广泛的非对称加密算法。与对称加密(使用同一密钥进行加密和解密)不同,RSA 使用一对数学上关联的密钥对:公钥和私钥。

基本特性:一个密钥加密的内容,只有另一个密钥才能解密。这种非对称性使得从未见过面且未共享秘密的双方能够进行安全通信。

RSA 密钥对:工作原理与生成方法 示意图

RSA 背后的数学原理(简化版)

RSA 的安全性基于整数分解问题:将两个大素数相乘在计算上非常简单,但对于足够大的数,将乘积分解回其素因子实际上是不可能的。

  1. 选择两个大的随机素数:p = 61, q = 53(实际中为 1024 位以上的数字)
  2. 计算 n = p × q = 3233(模数,公开共享)
  3. 计算 φ(n) = (p-1)(q-1) = 3120(欧拉函数)
  4. 选择 e,使得 gcd(e, φ(n)) = 1 — 公钥指数(通常为 65537)
  5. 计算 d = e⁻¹ mod φ(n) — 私钥指数
  6. 公钥: (e, n) = (17, 3233)
  7. 私钥: (d, n) = (2753, 3233)

私钥的 d 值需要知道 p 和 q,而无法从 n 有效恢复。

关键操作

加密

使用公钥加密消息 M:C = M^e mod n 使用私钥解密密文 C:M = C^d mod n

数字签名

使用私钥对数据 D 签名:S = D^d mod n(或 hash(D)^d mod n) 使用公钥验证签名 S:D = S^e mod n

这意味着任何人都可以使用公钥验证签名,但只有私钥持有者才能创建该签名。

RSA 密钥对:工作原理与生成方法 示意图

密钥大小与安全性

密钥大小 安全级别 使用场景
512 位 已被破解 请勿使用
1024 位 仅限遗留系统
2048 位 ~112 位安全性 ✅ 最低推荐
3072 位 ~128 位安全性 适合 2030 年之后
4096 位 ~140 位安全性 高安全系统

NIST 建议 2030 年前最低使用 2048 位 RSA,之后使用 3072 位或更高。4096 位密钥的开销显著——对于负载下的 Web 服务器,握手延迟会明显增加。

常见的 RSA 应用

SSH 认证

用基于密钥的认证替代密码登录:

# 生成 RSA 密钥对
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

# 将公钥复制到服务器
ssh-copy-id user@server.com

# 无需密码连接
ssh user@server.com

公钥存储在服务器的 ~/.ssh/authorized_keys 中。私钥永远不会离开你的机器。

HTTPS / TLS

每个 HTTPS 连接在握手期间都使用非对称加密(RSA 或 ECDSA)来建立共享的对称会话密钥。网站的 RSA 密钥对嵌入在其 TLS 证书中。

RSA 密钥对:工作原理与生成方法 示意图

代码签名

软件发布者使用其私钥对发布版本进行签名。用户可以使用公钥验证签名,以确认软件未被修改。

JWT(RS256 算法)

JSON Web Token 可以使用 RSA 私钥(RS256)进行签名。API 消费者可以使用公钥验证签名,从而实现无状态认证,无需共享秘密。

RSA 与 ECDSA:现代替代方案

椭圆曲线密码学(ECDSA/ECDH)以更小的密钥大小提供与 RSA 等效的安全性:

算法 密钥大小 安全级别
RSA 3072 位 128 位
ECDSA 256 位 128 位

256 位 ECDSA 密钥与 3072 位 RSA 密钥同样安全。对于新系统,通常更倾向于使用 ECDSA(或 Ed25519),因为其密钥更小、计算更快、签名更小。

公钥基础设施(PKI)

RSA 密钥通常通过遵循 X.509 标准的证书分发。证书颁发机构(CA)签署证书,将公钥绑定到身份(域名、电子邮件地址或个人)。浏览器和操作系统维护一个受信任的 CA 列表。

使用此工具生成 RSA 密钥

这个基于浏览器的工具在本地生成 RSA 密钥对——没有密钥传输到任何服务器。你可以:

  • 选择密钥大小(1024、2048 或 4096 位)
  • 立即生成新的密钥对
  • 以 PEM 格式复制公钥和私钥,用于你的应用程序

安全提示: 对于生产环境,始终在安全、受信任的硬件上生成私钥。浏览器生成的密钥适合学习和测试。

→ 尝试 RSA 密钥对生成器