非对称加密(Asymmetric Encryption)

非对称加密使用一对数学上相关的密钥(公钥和私钥)进行加密和解密,解决了对称加密的密钥分发问题


什么是非对称加密

非对称加密(也称公钥加密)是一种加密方法,使用两个不同的密钥:公钥用于加密,私钥用于解密。公钥可以公开分享,而私钥必须保密。

非对称加密的基本流程

发送方                               接收方
  │                                   │
  │  1. 获取接收方公钥                 │
  ├──────────────────────────────────→│
  │                                   │
  │  2. 使用公钥加密数据              │
  ├─[加密算法+公钥]                    │
  │  3. 发送加密数据                  │
  ├──────────────────────────────────→│
  │                                   │
  │                                   │  4. 使用私钥解密
  │                                   ├─[解密算法+私钥]
  │                                   │  5. 获得原始数据

非对称加密的特点

  1. 密钥对:使用公钥和私钥组成的密钥对
  2. 密钥分发简单:公钥可以公开,解决了密钥分发问题
  3. 计算开销大:比对称加密慢得多
  4. 适合小数据:通常用于小量数据或密钥交换

非对称加密的数学基础

非对称加密基于数学难题,这些问题易于在一个方向计算,但在相反方向困难。

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密钥生成

  1. 选择两个大素数:p和q
  2. 计算n:n = p × q(用作模数)
  3. 计算φ(n):φ(n) = (p-1) × (q-1)
  4. 选择e:1 < e < φ(n),且e与φ(n)互质
  5. 计算d:d ≡ e^(-1) mod φ(n)(e模φ(n)的模逆元)
  6. 公钥:(n, e)
  7. 私钥:(n, d)

RSA加密与解密

加密:c ≡ m^e mod n 解密:m ≡ c^d mod n

其中:

  • m:明文消息
  • c:密文
  • e:公钥指数
  • d:私钥指数
  • n:模数

RSA示例(简化)

  1. 选择素数:p = 17, q = 19
  2. 计算n:n = 17 × 19 = 323
  3. 计算φ(n):φ(n) = (17-1) × (19-1) = 16 × 18 = 288
  4. 选择e:e = 5(5与288互质)
  5. 计算d:d = 173(5 × 173 mod 288 = 1)
  6. 公钥:(323, 5)
  7. 私钥:(323, 173)
  8. 加密:m = 123 → c = 123^5 mod 323 = 225
  9. 解密:c = 225 → m = 225^173 mod 323 = 123

RSA安全性

  • 大数分解:安全性依赖于大数分解的困难性
  • 密钥长度:推荐2048位或以上
  • 量子威胁:量子计算机可能破解RSA

Diffie-Hellman密钥交换

Diffie-Hellman是一种密钥交换协议,允许双方在公开通道上安全地建立共享密钥。

DH密钥交换流程

  1. 公开参数:大素数p和生成元g
  2. Alice
    • 选择私钥a(随机数)
    • 计算公钥A = g^a mod p
    • 将A发送给Bob
  3. Bob
    • 选择私钥b(随机数)
    • 计算公钥B = g^b mod p
    • 将B发送给Alice
  4. 共享密钥计算
    • 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密钥生成

  1. 选择椭圆曲线参数:p, a, b, G(基点)
  2. 选择私钥:d(随机数)
  3. 计算公钥:Q = d × G(基点G的d倍)

ECC优势

安全强度RSA密钥长度ECC密钥长度
80位1024160
112位2048224
128位3072256
192位7680384
256位15360512

ECDH密钥交换

类似Diffie-Hellman,但使用椭圆曲线点乘:

  1. Alice
    • 私钥:dA
    • 公钥:QA = dA × G
  2. Bob
    • 私钥:dB
    • 公钥:QB = dB × G
  3. 共享密钥: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. 验证成功

数字签名属性

  1. 身份验证:验证发送方身份
  2. 完整性:确保数据未被篡改
  3. 不可否认性:发送方不能否认已签名消息
  4. 不可伪造:私钥保密,签名不可伪造

证书与公钥基础设施(PKI)

PKI是管理数字证书和公钥加密的系统框架。

数字证书结构

证书内容:
├── 证书信息
│   ├── 版本
│   ├── 序列号
│   ├── 签名算法
│   ├── 颁发者
│   ├── 有效期
│   ├── 主体(所有者)
│   └── 公钥信息
├── 扩展字段
└── 证书签名

证书颁发流程

  1. 证书申请:生成密钥对,向CA申请证书
  2. 身份验证:CA验证申请者身份
  3. 证书颁发:CA签名并颁发证书
  4. 证书分发:将证书分发给需要方
  5. 证书验证:验证证书有效性
  6. 证书撤销:证书撤销列表(CRL)或在线证书状态协议(OCSP)

非对称加密应用

1. 安全通信

  • SSL/TLS:HTTPS、FTPS等安全协议
  • SSH:安全远程访问
  • IPSec:VPN安全传输
  • PGP/GPG:邮件加密和签名

2. 身份认证

  • 数字证书:网站身份验证
  • 智能卡:物理身份验证
  • 生物识别:结合公钥系统
  • 多因素认证:结合其他验证方式

3. 电子货币

  • 比特币:ECDSA数字签名
  • 以太坊:椭圆曲线密码学
  • 支付系统:安全交易处理
  • 区块链:共识机制和签名

算法比较

特性RSADiffie-HellmanECCElGamal
数学基础大数分解离散对数椭圆曲线离散对数
密钥长度
计算速度
加密/签名两者均可仅密钥交换两者均可两者均可
专利状态已过期已过期某些曲线有专利已过期

安全注意事项

1. 算法选择

  • 避免使用:已知不安全的算法或参数
  • 推荐使用:RSA-2048+或ECC(P-256+)
  • 考虑因素:安全性、性能、互操作性

2. 密钥管理

  • 私钥保护:私钥必须安全存储
  • 定期更新:定期更新密钥
  • 安全备份:安全备份私钥

3. 实现安全

  • 使用成熟库:避免自己实现算法
  • 随机数生成:使用安全的随机数生成器
  • 防范攻击:时序攻击、旁路攻击等

4. 证书管理

  • 证书验证:严格验证证书链
  • 撤销检查:检查证书是否已撤销
  • 定期更新:证书到期前更新

🔗 相关链接


最后更新:2025-01-26 维护规范:详见 笔记规范文档

非对称加密 RSA ECC Diffie-Hellman 数字证书