3. JSON Web Encryption (JWE) Overview (JWE 概述)
JWE 使用 JSON data structure 和 base64url encoding 表示 encrypted content. 一个 JWE 逻辑上包含 JOSE Header, JWE Encrypted Key, JWE Initialization Vector, JWE AAD, JWE Ciphertext 和 JWE Authentication Tag.
对 JWE 来说, JOSE Header 成员是 JWE Protected Header, JWE Shared Unprotected Header 和 JWE Per-Recipient Unprotected Header 中出现成员的并集. JWE 使用 authenticated encryption 来保护 plaintext 的 confidentiality 和 integrity, 同时保护 JWE Protected Header 和 JWE AAD 的完整性.
3.1 JWE Compact Serialization Overview (紧凑序列化概述)
JWE Compact Serialization 不使用 shared/per-recipient unprotected header. 在这种情况下, JOSE Header 与 JWE Protected Header 相同. 表示形式为五个 base64url-encoded 部分, 以句点连接:
BASE64URL(UTF8(JWE Protected Header)) || '.' ||
BASE64URL(JWE Encrypted Key) || '.' ||
BASE64URL(JWE Initialization Vector) || '.' ||
BASE64URL(JWE Ciphertext) || '.' ||
BASE64URL(JWE Authentication Tag)
3.2 JWE JSON Serialization Overview (JSON 序列化概述)
JWE JSON Serialization 中, JWE Protected Header, JWE Shared Unprotected Header 和 JWE Per-Recipient Unprotected Header 至少有一个必须存在. JSON object 可包含 protected, unprotected, header, encrypted_key, iv, ciphertext, tag 和 aad 等 member.
该形式支持多个 recipient. base64url 字符串用于表示 octet sequence, unprotected header 则以 JSON object 原样表示.
3.3 Example JWE (JWE 示例)
典型 JWE Protected Header 可声明:
{"alg":"RSA-OAEP","enc":"A256GCM"}
其中 alg 表示用 RSAES-OAEP 加密 CEK, enc 表示用 AES GCM 256-bit key 对 plaintext 做 authenticated encryption. 生成 JWE 时, producer 生成 CEK 和 IV, 计算 AAD, 产生 ciphertext 和 Authentication Tag, 然后按 Compact 或 JSON Serialization 组装输出.