RSA

RSA
Rivest-Shamir-Adleman
设计者
Ron Rivest, Adi Shamir, Leonard Adleman
首次发布
1977年
类别
非对称公钥密码
数学基础
大整数分解难题
推荐密钥
≥ 2048 bit (3072+ 更安全)
标准
PKCS#1, RFC 8017
安全状态
安全(≥2048位)

RSA是 1977 年由 Ron Rivest、Adi Shamir 和 Leonard Adleman 提出的公钥密码系统,是历史上第一个实用的公钥加密方案。RSA 的安全性基于大整数分解的计算困难性:给定两个大素数 p 和 q,计算 n = p × q 很容易;但给定 n,分解出 p 和 q 极其困难。

算法原理
密钥生成: 1. 选择两个大素数 p, q (通常各 ~1024 位) 2. 计算 n = p × q 3. 计算 φ(n) = (p-1)(q-1) 4. 选择 e,满足 1 < e < φ(n) 且 gcd(e, φ(n)) = 1 (通常 e = 65537 = 0x10001) 5. 计算 d,满足 e × d ≡ 1 (mod φ(n)) 公钥: (n, e) 私钥: (n, d) 或 (p, q, d) 加密: c = m^e mod n 解密: m = c^d mod n 签名: s = m^d mod n 验证: m = s^e mod n
填充方案

原始 RSA("教科书 RSA")是不安全的,必须使用填充方案:

方案用途安全状态
PKCS#1 v1.5加密/签名存在攻击(Bleichenbacher),不推荐新系统
OAEP加密推荐(RFC 8017)
PKCS#1 v1.5 签名签名仍广泛使用但建议迁移
PSS签名推荐(RFC 8017)
密钥长度建议
RSA 密钥等效对称密钥推荐
1024 bit80 bit已不安全
2048 bit112 bit最低要求
3072 bit128 bit推荐
4096 bit150 bit高安全需求
15360 bit256 bit理论最高(不实用)
与 ECC 对比
特性RSA-2048ECC P-256
安全强度112 bit128 bit
私钥大小2048 bit256 bit
公钥大小2048 bit256 bit + 参数
签名速度慢(大数运算)
验证速度快(e=65537)
量子威胁Shor 算法可破解Shor 算法可破解
参考文献
  1. Rivest, R., Shamir, A., Adleman, L. (1978). "A Method for Obtaining Digital Signatures and Public-Key Cryptosystems". Commun. ACM 21(2): 120-126.
  2. Moriarty, K., et al. (2016). "PKCS #1: RSA Cryptography Specifications Version 2.2". RFC 8017.