什么是 RSA?
RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,使用一对密钥——公钥用于加密,私钥用于解密。它是最早的实用公钥密码系统之一,广泛用于安全数据传输。
快速了解
| 全称 | Rivest-Shamir-Adleman |
|---|---|
| 创建时间 | 1977 年由 Rivest、Shamir 和 Adleman 发明 |
| 规范文档 | 官方规范 |
RSA 工作原理
RSA 于 1977 年由麻省理工学院的 Ron Rivest、Adi Shamir 和 Leonard Adleman 发明。其安全性依赖于分解两个大素数乘积的实际困难性。RSA 可用于加密和数字签名。对于加密,发送者使用接收者的公钥;对于签名,签名者使用其私钥。常见的密钥大小是 2048 和 4096 位。虽然 RSA 比 AES 等对称算法慢,但它通过允许在不共享密钥的情况下进行安全通信来解决密钥分发问题。
主要特点
- 非对称加密(公钥/私钥对)
- 基于分解大素数的困难性
- 用于加密和数字签名
- 常见密钥大小:2048、3072、4096 位
- 比对称加密慢
- 解决密钥分发问题
常见用途
- SSL/TLS 证书密钥交换
- 数字签名
- 电子邮件加密(PGP/GPG)
- 安全密钥交换
- 代码签名
示例
RSA 密钥生成(简化):
1. 选择两个大素数:p, q
2. 计算 n = p × q(模数)
3. 计算 φ(n) = (p-1)(q-1)
4. 选择 e(公钥指数,通常为 65537)
5. 计算 d = e⁻¹ mod φ(n)(私钥指数)
公钥:(n, e)
私钥:(n, d)
加密:密文 = 消息^e mod n
解密:消息 = 密文^d mod n
OpenSSL 命令:
# 生成私钥
openssl genrsa -out private.pem 2048
# 提取公钥
openssl rsa -in private.pem -pubout -out public.pem
# 使用公钥加密
openssl rsautl -encrypt -pubin -inkey public.pem -in file.txt
# 使用私钥解密
openssl rsautl -decrypt -inkey private.pem -in encrypted.bin