非对称加密(Asymmetric Encryption)
非对称加密使用一对数学上相关的密钥(公钥和私钥)进行加密和解密,解决了对称加密的密钥分发问题
什么是非对称加密
非对称加密(也称公钥加密)是一种加密方法,使用两个不同的密钥:公钥用于加密,私钥用于解密。公钥可以公开分享,而私钥必须保密。
非对称加密的基本流程
发送方 接收方
│ │
│ 1. 获取接收方公钥 │
├──────────────────────────────────→│
│ │
│ 2. 使用公钥加密数据 │
├─[加密算法+公钥] │
│ 3. 发送加密数据 │
├──────────────────────────────────→│
│ │
│ │ 4. 使用私钥解密
│ ├─[解密算法+私钥]
│ │ 5. 获得原始数据
非对称加密的特点
- 密钥对:使用公钥和私钥组成的密钥对
- 密钥分发简单:公钥可以公开,解决了密钥分发问题
- 计算开销大:比对称加密慢得多
- 适合小数据:通常用于小量数据或密钥交换
非对称加密的数学基础
非对称加密基于数学难题,这些问题易于在一个方向计算,但在相反方向困难。
1. 大数分解问题(Integer Factorization)
问题:给定一个大数的乘积,很难找出其素数因子。
应用:RSA算法基于此问题。
示例:
- 计算容易:17 × 19 = 323
- 分解困难:给定323,找出17和19(小数容易,大数极难)
2. 离散对数问题(Discrete Logarithm)
问题:给定g、p和g^a mod p,很难计算a。
应用:Diffie-Hellman密钥交换、ElGamal加密。
3. 椭圆曲线离散对数问题(ECDLP)
问题:给定椭圆曲线上的点P和kP,很难计算k。
应用:椭圆曲线密码学(ECC),提供相同安全性下更小的密钥长度。
RSA算法
RSA是最著名和最广泛使用的非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出。
RSA密钥生成
- 选择两个大素数:p和q
- 计算n:n = p × q(用作模数)
- 计算φ(n):φ(n) = (p-1) × (q-1)
- 选择e:1 < e < φ(n),且e与φ(n)互质
- 计算d:d ≡ e^(-1) mod φ(n)(e模φ(n)的模逆元)
- 公钥:(n, e)
- 私钥:(n, d)
RSA加密与解密
加密:c ≡ m^e mod n 解密:m ≡ c^d mod n
其中:
- m:明文消息
- c:密文
- e:公钥指数
- d:私钥指数
- n:模数
RSA示例(简化)
- 选择素数:p = 17, q = 19
- 计算n:n = 17 × 19 = 323
- 计算φ(n):φ(n) = (17-1) × (19-1) = 16 × 18 = 288
- 选择e:e = 5(5与288互质)
- 计算d:d = 173(5 × 173 mod 288 = 1)
- 公钥:(323, 5)
- 私钥:(323, 173)
- 加密:m = 123 → c = 123^5 mod 323 = 225
- 解密:c = 225 → m = 225^173 mod 323 = 123
RSA安全性
- 大数分解:安全性依赖于大数分解的困难性
- 密钥长度:推荐2048位或以上
- 量子威胁:量子计算机可能破解RSA
Diffie-Hellman密钥交换
Diffie-Hellman是一种密钥交换协议,允许双方在公开通道上安全地建立共享密钥。
DH密钥交换流程
- 公开参数:大素数p和生成元g
- Alice:
- 选择私钥a(随机数)
- 计算公钥A = g^a mod p
- 将A发送给Bob
- Bob:
- 选择私钥b(随机数)
- 计算公钥B = g^b mod p
- 将B发送给Alice
- 共享密钥计算:
- Alice:K = B^a mod p = (g^b)^a mod p = g^(ab) mod p
- Bob:K = A^b mod p = (g^a)^b mod p = g^(ab) mod p
DH安全性
- 离散对数问题:安全性基于离散对数的困难性
- 中间人攻击:不进行身份验证,易受中间人攻击
- 解决方案:结合数字签名或证书
椭圆曲线密码学(ECC)
ECC是基于椭圆曲线数学的公钥密码系统,提供与RSA相同安全性下更小的密钥长度。
椭圆曲线方程
有限域上的椭圆曲线:y^2 ≡ x^3 + ax + b (mod p)
ECC密钥生成
- 选择椭圆曲线参数:p, a, b, G(基点)
- 选择私钥:d(随机数)
- 计算公钥:Q = d × G(基点G的d倍)
ECC优势
| 安全强度 | RSA密钥长度 | ECC密钥长度 |
|---|---|---|
| 80位 | 1024 | 160 |
| 112位 | 2048 | 224 |
| 128位 | 3072 | 256 |
| 192位 | 7680 | 384 |
| 256位 | 15360 | 512 |
ECDH密钥交换
类似Diffie-Hellman,但使用椭圆曲线点乘:
- Alice:
- 私钥:dA
- 公钥:QA = dA × G
- Bob:
- 私钥:dB
- 公钥:QB = dB × G
- 共享密钥:K = dA × QB = dB × QA
数字信封
数字信封结合了对称加密和非对称加密的优点,用于安全传输大量数据。
数字信封流程
发送方 接收方
│ │
│ 1. 生成随机对称密钥K │
├─[生成对称密钥] │
│ 2. 使用K加密数据 │
├─[对称加密+K] │
│ 3. 使用接收方公钥加密K │
├─[非对称加密+公钥] │
│ 4. 发送加密数据和加密K │
├─────────────────────────────────→│
│ │
│ │ 5. 使用私钥解密K
│ ├─[非对称解密+私钥]
│ │ 6. 使用K解密数据
│ ├─[对称解密+K]
│ │ 7. 获得原始数据
数字信封优势
- 效率:对称加密处理大量数据
- 安全:非对称加密保护密钥
- 结合优势:兼具两者优点
数字签名
数字签名使用非对称加密提供身份验证、数据完整性和不可否认性。
数字签名流程
发送方 接收方
│ │
│ 1. 计算消息哈希H │
├─[哈希函数] │
│ 2. 使用私钥对H签名 │
├─[非对称加密+私钥] │
│ 3. 发送消息和签名 │
├─────────────────────────────────→│
│ │
│ │ 4. 计算消息哈希H'
│ ├─[哈希函数]
│ │ 5. 使用公钥验证签名
│ ├─[非对称解密+公钥]
│ │ 6. 比较H和H'
│ ├─[比较]
│ │ 7. 验证成功
数字签名属性
- 身份验证:验证发送方身份
- 完整性:确保数据未被篡改
- 不可否认性:发送方不能否认已签名消息
- 不可伪造:私钥保密,签名不可伪造
证书与公钥基础设施(PKI)
PKI是管理数字证书和公钥加密的系统框架。
数字证书结构
证书内容:
├── 证书信息
│ ├── 版本
│ ├── 序列号
│ ├── 签名算法
│ ├── 颁发者
│ ├── 有效期
│ ├── 主体(所有者)
│ └── 公钥信息
├── 扩展字段
└── 证书签名
证书颁发流程
- 证书申请:生成密钥对,向CA申请证书
- 身份验证:CA验证申请者身份
- 证书颁发:CA签名并颁发证书
- 证书分发:将证书分发给需要方
- 证书验证:验证证书有效性
- 证书撤销:证书撤销列表(CRL)或在线证书状态协议(OCSP)
非对称加密应用
1. 安全通信
- SSL/TLS:HTTPS、FTPS等安全协议
- SSH:安全远程访问
- IPSec:VPN安全传输
- PGP/GPG:邮件加密和签名
2. 身份认证
- 数字证书:网站身份验证
- 智能卡:物理身份验证
- 生物识别:结合公钥系统
- 多因素认证:结合其他验证方式
3. 电子货币
- 比特币:ECDSA数字签名
- 以太坊:椭圆曲线密码学
- 支付系统:安全交易处理
- 区块链:共识机制和签名
算法比较
| 特性 | RSA | Diffie-Hellman | ECC | ElGamal |
|---|---|---|---|---|
| 数学基础 | 大数分解 | 离散对数 | 椭圆曲线 | 离散对数 |
| 密钥长度 | 大 | 大 | 小 | 大 |
| 计算速度 | 中 | 中 | 快 | 慢 |
| 加密/签名 | 两者均可 | 仅密钥交换 | 两者均可 | 两者均可 |
| 专利状态 | 已过期 | 已过期 | 某些曲线有专利 | 已过期 |
安全注意事项
1. 算法选择
- 避免使用:已知不安全的算法或参数
- 推荐使用:RSA-2048+或ECC(P-256+)
- 考虑因素:安全性、性能、互操作性
2. 密钥管理
- 私钥保护:私钥必须安全存储
- 定期更新:定期更新密钥
- 安全备份:安全备份私钥
3. 实现安全
- 使用成熟库:避免自己实现算法
- 随机数生成:使用安全的随机数生成器
- 防范攻击:时序攻击、旁路攻击等
4. 证书管理
- 证书验证:严格验证证书链
- 撤销检查:检查证书是否已撤销
- 定期更新:证书到期前更新
🔗 相关链接
最后更新:2025-01-26 维护规范:详见 笔记规范文档