Lec 10 密钥交换与公钥加密
MIT 6.1600 · Introduction to Computer Security
TL;DR
- 公钥加密让发送方用公开密钥保护消息,密钥交换则让双方经交互得到共享秘密;两者都必须另行解决身份认证。
- 裸 RSA 具有确定性和代数结构,无法达到 IND-CPA;RSA-OAEP、ElGamal 等方案通过随机化建立明确的安全边界。
- 实际协议通常采用 KEM/DEM 或 HPKE 混合结构,并用临时 ECDH 提供前向安全,使长期密钥泄露不暴露历史会话。
1. 问题背景
Alice 和 Bob 不共享秘密,如何建立加密信道?
两种解决路径:
- 密钥交换(Key Exchange):双方交互,协商出共享密钥(DH)
- 公钥加密(Public-Key Encryption, PKE):Alice 用 Bob 的公钥加密,只有 Bob 能解密
2. 安全定义:IND-CPA
IND-CPA(Indistinguishability under Chosen Plaintext Attack):
IND-CPA Game
- 挑战者生成 (pk,sk),公布 pk
- 对手 A(pk) 可查询加密 oracle
- A 提交 (m0,m1),得 c∗=Enc(pk,mb)(b 随机)
- A 猜测 b
安全:Pr[A wins]≤21+negl(λ)
IND-CPA 要求加密必须随机化——相同明文每次加密结果不同。
3. IND-CCA(更强安全性)
在 IND-CPA 基础上,增加解密 oracle(不能解密挑战密文 c∗):
对 TLS 等需要多轮交互的协议,需要 IND-CCA 安全(防止选择密文攻击)。
4. 教科书 RSA 加密(不安全!)
Enc(pk=(n,e),m)=memodn
Dec(sk=(n,d),c)=cdmodn
问题:
- 确定性——同一明文总产生同一密文(违反 IND-CPA)
- 乘法同态——Enc(m1)⋅Enc(m2)=Enc(m1m2),可延展
5. RSA-OAEP(实际标准)
RSA-OAEP(Optimal Asymmetric Encryption Padding)引入随机性:
填充过程
r${0,1}λ
X=m∥0k1⊕G(r),Y=r⊕H(X)
c=(X∥Y)emodn
其中 G,H 为哈希函数(随机预言模型下建模)。
安全性:在 ROM 下,RSA-OAEP 满足 IND-CCA,基于 RSA 困难问题。
6. ElGamal 加密(基于 DH)
6.1 密钥生成
sk=x$Zq,pk=gx∈G
6.2 加密
r$Zq
c=(gr, m⋅(gx)r)=(C1,C2)
6.3 解密
m=C2/C1x=m⋅grx/grx=m
6.4 安全性
CDH 假设:若对手无法从 (gx,gr) 计算 gxr,则无法解密 C2。
注意:基本 ElGamal 满足 IND-CPA,不满足 IND-CCA(可延展:C2′=2C2 解密得 2m)。
需要 Hash-ElGamal 或 ECIES 版本来实现 IND-CCA。
7. 椭圆曲线 Diffie-Hellman(ECDH)
实践中 DH 通常在椭圆曲线群上实现:
Alice:a$Zq,A=aG
Bob:b$Zq,B=bG
共享密钥:K=aB=bA=abG∈E(Fp)
常用曲线:
- P-256(NIST):FIPS 标准
- X25519(Curve25519):更快、抵抗时序攻击,TLS 1.3 默认
ECDH 密钥派生
原始共享点 K 不直接作为密钥,需经 KDF:
k=HKDF(Kx,context)
8. 密钥封装机制(KEM)
现代密码学将密钥交换抽象为 KEM(Key Encapsulation Mechanism):
Encap(pk)→(c,k)
Decap(sk,c)→k
- Alice 调用 Encap(pkB) 得到密文 c 和共享密钥 k
- Bob 调用 Decap(skB,c) 得到同样的 k
- Alice 用 k 加密数据,Bob 解密
KEM + DEM(Data Encapsulation Mechanism) = 混合加密:
cdata=AEAD(k,m)
发送:(cKEM,cdata)
效率高:大量数据用对称加密(快),只有密钥用非对称(慢)。
9. 前向安全的密钥交换
静态 DH(不提供前向安全)
Alice:A=ga (长期静态),Bob:B=gb (长期静态)
若 a 或 b 泄露,所有历史会话可被解密。
临时 DH(Ephemeral DH,提供前向安全)
每次会话生成新的随机 (a,b),会话结束后销毁:
每次:a$Zq,会话结束:erase(a)
即使服务器长期密钥泄露,攻击者也无法恢复历史会话的 a,因此无法解密历史流量。
TLS 1.3 强制使用 Ephemeral ECDH(ECDHE)。
10. HPKE(Hybrid Public Key Encryption)
HPKE(RFC 9180)是现代 KEM+AEAD 混合加密标准,被 MLS、TLS ECH 采用:
SetupS(pkB)→(enc,ctx)
SetupR(skB,enc)→ctx
ctx.Seal(m,ad)→c
ctx.Open(c,ad)→m
关键公式
ElGamal 加密:
c=(gr, m⋅pkr),解密:m=C2/C1x
ECDH 共享密钥:
K=aB=bA=abG,k=KDF(Kx)
混合加密(KEM+DEM):
(cK,k)←Encap(pk),cD=AEAD(k,m)
发送:(cK,cD)
我的理解
前向安全本质上是密钥生命周期属性:及时销毁临时秘密,才能限制长期密钥失陷后的历史影响。