11. Security Considerations (安全考虑)
与任何加密应用程序相关的所有安全问题都必须由 JWS/JWE/JWK 代理解决. 这些问题包括保护用户的非对称私钥和对称秘密密钥, 以及采用针对各种攻击的对策.
JWS 规范中的所有安全考虑也适用于本规范. 同样, XML Encryption 1.1 [W3C.REC-xmlenc-core1-20130411] 中的所有安全考虑也适用, 除了那些特定于 XML 的考虑.
11.1 Key Entropy and Random Values (密钥熵和随机值)
有关密钥熵和随机值的安全考虑, 请参见 [JWS] 第 10.1 节. 除了那里列出的随机值用途之外, 请注意, 在执行加密时, 随机值还用于 Content Encryption Keys (CEK) 和 Initialization Vectors (IV).
11.2 Key Protection (密钥保护)
有关密钥保护的安全考虑, 请参见 [JWS] 第 10.2 节. 除了必须保护的那里列出的密钥之外, 执行加密的实现还必须保护密钥加密密钥和 Content Encryption Key. 密钥加密密钥的泄露可能导致使用该密钥保护的所有内容的泄露. 同样, Content Encryption Key 的泄露可能导致相关加密内容的泄露.
11.3 Using Matching Algorithm Strengths (使用匹配的算法强度)
应尽可能一起使用强度匹配的算法. 例如, 当 AES Key Wrap 与给定密钥大小一起使用时, 建议在同时使用 AES GCM 时使用相同的密钥大小. 如果密钥加密和内容加密算法不同, 则有效安全性由两种算法中较弱的一种确定.
另请参见 RFC 3766 [RFC3766], 了解有关确定用于交换对称密钥的公钥强度的信息.
11.4 Adaptive Chosen-Ciphertext Attacks (自适应选择密文攻击)
解密时, 必须特别注意不允许将 JWE 接收方用作解密消息的预言机. 应参考 RFC 3218 [RFC3218] 了解针对 RSAES-PKCS1-v1_5 攻击的具体对策. 攻击者可能会将 "alg" Header Parameter 的内容从 "RSA-OAEP" 修改为 "RSA1_5", 以生成可以检测并用于恢复 CEK 的格式错误, 即使使用 RSAES-OAEP 加密了 CEK. 因此, 当拒绝加密内容时, 将 CEK、Additional Authenticated Data 或密文的所有格式错误报告为单个错误尤为重要.
此外, 通过将密钥的使用限制为一组有限的算法 (通常是一个) 可以防止这种类型的攻击. 例如, 这意味着, 如果密钥标记为仅用于 "RSA-OAEP", 则使用该密钥使用 "RSA1_5" 算法解密消息的任何尝试都应由于密钥的无效使用而立即失败.
11.5 Timing Attacks (时序攻击)
为了缓解 RFC 3218 [RFC3218] 中描述的攻击, 接收方禁止 (MUST NOT) 区分加密密钥的格式、填充和长度错误. 强烈建议在接收到格式不正确的密钥时, 接收方替换随机生成的 CEK 并继续执行下一步, 以缓解时序攻击.