什么是非对称加密?

非对称加密使用一对密钥:公钥和私钥。这是与对称加密最根本的区别。

核心特性

  • 公钥可以公开,用于加密或验证签名
  • 私钥必须保密,用于解密或生成签名
  • 用公钥加密的数据只能用私钥解密
  • 用私钥签名的数据只能用公钥验证

常见非对称加密算法

1. RSA (Rivest–Shamir–Adleman)

RSA 是最广泛使用的非对称加密算法,基于大数分解的数学难题。

密钥长度建议:

  • 2048 位:基本安全
  • 4096 位:高安全性需求
  • 8192 位:极端安全场景

OpenSSL 生成 RSA 密钥对:

1
2
3
4
5
# 生成 2048 位 RSA 私钥
openssl genrsa -out private.pem 2048

# 从私钥提取公钥
openssl rsa -in private.pem -pubout -out public.pem

2. ECC (Elliptic Curve Cryptography)

ECC 基于椭圆曲线数学,在相同安全级别下使用更短的密钥。

密钥长度对比:

ECC 密钥 RSA 等效安全
256 位 3072 位
384 位 7680 位

优势:

  • 计算速度快
  • 密钥小,适合移动和 IoT 设备
  • 资源消耗低

OpenSSL ECC 示例:

1
2
# 生成 EC 辅助参数
openssl ecparam -genkey -name prime256v1 -out ec_private.pem

3. Diffie-Hellman (DH)

DH 算法用于密钥交换,双方可以在不安全的信道上协商共享密钥。

公钥加密 vs 私钥签名

加密场景

1
2
Sender: 明文 + Recipient's Public Key → 密文
Recipient: 密文 + Recipient's Private Key → 明文

签名场景

1
2
Sender: 摘要 + Sender's Private Key → 签名
Recipient: 摘要 + Sender's Public Key → 验证

对称 + 非对称:混合加密

实际应用中,常结合两种加密方式:

  1. 密钥交换:使用非对称加密交换对称密钥
  2. 数据加密:使用对称加密加密大量数据

优势:

  • 兼顾安全性与性能
  • 利用非对称加密解决密钥分发问题
  • 利用对称加密高效处理数据

OpenSSL 实战

1
2
3
4
5
6
7
8
9
# 生成 RSA 密钥对
openssl genrsa -out server.key 2048
openssl rsa -in server.key -pubout -out server.pub

# 使用公钥加密
openssl rsautl -encrypt -inkey server.pub -pubin -in secret.txt -out encrypted.bin

# 使用私钥解密
openssl rsautl -decrypt -inkey server.key -in encrypted.bin -out decoded.txt

安全建议

  1. 保护私钥:私钥泄露等于安全失效
  2. 密钥强度:选择足够长的密钥长度
  3. 定期轮换:定期更换密钥对
  4. 安全存储:使用 HSM 或密钥管理服务

参考来源