跳到主要内容

4. Key Management 的密码算法

JWE 使用密码算法来加密或确定 Content Encryption Key (CEK).

4.1 "alg" Header Parameter Values for JWE

JWE 支持的 key management 算法 (摘要):

Algorithm IDKey Management AlgorithmAdditional Header ParamsImplementation Requirements
RSA1_5RSAES-PKCS1-v1_5-Recommended-
RSA-OAEPRSAES OAEP (default parameters)-Recommended+
RSA-OAEP-256RSAES OAEP (SHA-256)-Optional
A128KW / A192KW / A256KWAES Key Wrap-Recommended
dir直接使用共享对称密钥-Recommended
ECDH-ESECDH key agreementepk, apu, apvRecommended+
ECDH-ES+A128KW/A192KW/A256KWECDH + AES Key Wrapepk, apu, apvRecommended/Optional
A128GCMKW / A192GCMKW / A256GCMKWAES GCM Key Wrapiv, tagOptional
PBES2-HS256/384/512+A128/192/256KW基于口令的密钥加密p2s, p2cOptional

说明:

  • "+" 表示该要求可能会在未来版本中增强
  • "-" 表示该要求可能会在未来版本中削弱
  • 除 "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)
  • 选择适合应用需求的密钥大小