4. Cryptographic Algorithms for Key Management (密钥管理的加密算法)
JWE 使用加密算法来加密或确定 Content Encryption Key (CEK).
4.1 "alg" Header Parameter Values for JWE (JWE 的 "alg" 参数值)
JWE 支持的密钥管理算法(简化总结):
| 算法标识 | 密钥管理算法 | 额外头部参数 | 实现要求 |
|---|---|---|---|
| RSA1_5 | RSAES-PKCS1-v1_5 | - | Recommended- |
| RSA-OAEP | RSAES OAEP (默认参数) | - | Recommended+ |
| RSA-OAEP-256 | RSAES OAEP (SHA-256) | - | Optional |
| A128KW / A192KW / A256KW | AES Key Wrap | - | Recommended |
| dir | 直接使用共享密钥 | - | Recommended |
| ECDH-ES | ECDH 密钥协商 | epk, apu, apv | Recommended+ |
| ECDH-ES+A128KW/A192KW/A256KW | ECDH + AES Key Wrap | epk, apu, apv | Recommended/Optional |
| A128GCMKW / A192GCMKW / A256GCMKW | AES GCM Key Wrap | iv, tag | Optional |
| PBES2-HS256/384/512+A128/192/256KW | 基于密码的密钥加密 | p2s, p2c | Optional |
注释:
- "+" 表示要求可能在未来版本中增强
- "-" 表示要求可能在未来版本中降低
- 除 "dir" 和 "ECDH-ES" 外,其他算法都生成 JWE Encrypted Key
4.2-4.8 算法详细说明
4.2 RSA 密钥加密 (RSAES-PKCS1-v1_5)
- 算法标识: RSA1_5
- 最小密钥大小: 2048 位
4.3 RSA-OAEP 密钥加密
- RSA-OAEP: 使用 SHA-1 和 MGF1
- RSA-OAEP-256: 使用 SHA-256 和 MGF1
- 最小密钥大小: 2048 位
4.4 AES Key Wrap
- A128KW: 128 位密钥
- A192KW: 192 位密钥
- A256KW: 256 位密钥
- 使用 RFC 3394 定义的 AES Key Wrap 算法
4.5 直接密钥加密 (dir)
- 直接使用预共享的对称密钥作为 CEK
- 不产生 JWE Encrypted Key
4.6 ECDH-ES 密钥协商
- 使用椭圆曲线 Diffie-Hellman 临时静态密钥协商
- 额外头部参数:
- epk (Ephemeral Public Key): 临时公钥
- apu (Agreement PartyUInfo): 协商方 U 信息
- apv (Agreement PartyVInfo): 协商方 V 信息
- 使用 Concat KDF 进行密钥派生
4.7 AES GCM 密钥加密
- 使用 AES GCM 算法进行密钥包装
- 额外头部参数:
- iv (Initialization Vector): 初始化向量
- tag (Authentication Tag): 认证标签
4.8 PBES2 基于密码的密钥加密
- 使用 PBES2 (Password-Based Encryption Scheme 2)
- 结合 HMAC-SHA2 和 AES Key Wrap
- 额外头部参数:
- p2s (PBES2 Salt Input): 盐输入
- p2c (PBES2 Count): 迭代次数
实现建议:
- 优先使用 ECDH-ES 和 RSA-OAEP
- 避免使用已知存在弱点的算法(如 RSA1_5)
- 选择适合应用场景的密钥大小