4. Key Management 的密码算法
JWE 使用密码算法来加密或确定 Content Encryption Key (CEK).
4.1 "alg" Header Parameter Values for JWE
JWE 支持的 key management 算法 (摘要):
| Algorithm ID | Key Management Algorithm | Additional Header Params | Implementation Requirements |
|---|---|---|---|
| RSA1_5 | RSAES-PKCS1-v1_5 | - | Recommended- |
| RSA-OAEP | RSAES OAEP (default parameters) | - | Recommended+ |
| RSA-OAEP-256 | RSAES OAEP (SHA-256) | - | Optional |
| A128KW / A192KW / A256KW | AES Key Wrap | - | Recommended |
| dir | 直接使用共享对称密钥 | - | Recommended |
| ECDH-ES | ECDH key agreement | 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 Key Encryption (RSAES-PKCS1-v1_5)
- Algorithm ID: RSA1_5
- 最小密钥大小: 2048 bits
4.3 RSA-OAEP Key Encryption
- RSA-OAEP: 使用 SHA-1 和 MGF1
- RSA-OAEP-256: 使用 SHA-256 和 MGF1
- 最小密钥大小: 2048 bits
4.4 AES Key Wrap
- A128KW: 128-bit key
- A192KW: 192-bit key
- A256KW: 256-bit key
- 使用 RFC 3394 中定义的 AES Key Wrap algorithm
4.5 Direct Encryption (dir)
- 直接将预共享对称密钥用作 CEK
- 不产生 JWE Encrypted Key
4.6 ECDH-ES Key Agreement
- 使用 Elliptic Curve Diffie-Hellman Ephemeral Static key agreement
- 额外 header parameters:
- epk (Ephemeral Public Key): 临时公钥
- apu (Agreement PartyUInfo): Party U 信息
- apv (Agreement PartyVInfo): Party V 信息
- 使用 Concat KDF 进行密钥派生
4.7 AES GCM Key Encryption
- 使用 AES GCM algorithm 进行密钥包装
- 额外 header parameters:
- iv (Initialization Vector): 初始化向量
- tag (Authentication Tag): 认证标签
4.8 PBES2 Password-Based Key Encryption
- 使用 PBES2 (Password-Based Encryption Scheme 2)
- 组合使用 HMAC-SHA2 和 AES Key Wrap
- 额外 header parameters:
- p2s (PBES2 Salt Input): 盐值输入
- p2c (PBES2 Count): 迭代次数
实现建议:
- 优先使用 ECDH-ES 和 RSA-OAEP
- 避免使用存在已知弱点的算法 (例如 RSA1_5)
- 选择适合应用需求的密钥大小