9. 安全考虑
所有与密钥管理相关的安全考虑都适用于本规范. 尤其是, 密钥的来源和信任对于安全应用至关重要.
9.1. 密钥来源和信任
JWK 本身不提供关于密钥来源信息的机制. 应用需要通过特定于应用的方式确保其信任密钥的来源. 使用 JWK 的应用可以选择使用 X.509 证书 [RFC5280] 来传达密钥的来源和信任信息. 使用 "x5u" (X.509 URL), "x5c" (X.509 Certificate Chain), "x5t" (X.509 Certificate SHA-1 Thumbprint), 以及 "x5t#S256" (X.509 Certificate SHA-256 Thumbprint) 参数的应用 SHOULD 处理这些证书, 并在决定是否信任密钥时使用证书中的声明.
XML DSIG 2.0 [W3C.NOTE-xmldsig-core2-20130411] 第 12.3 节中关于数字签名强度依赖于安全链中所有环节强度的安全考虑, 也适用于本规范.
[JWS] 第 8 节中的 TLS 要求也适用于本规范, 包括 JWK 用于 JWS 和 JWE 上下文时, 以及使用 "x5u" JWK member 时.
9.2. 防止非公开密钥信息泄露
必须防止私钥和对称密钥泄露给非预期各方. 一种推荐做法是将包含这些密钥的 JWK 或 JWK Set 作为 JWE 的明文值进行加密. 当然, 这预设存在一种安全方式, 可获得用于将非公开密钥信息加密给预期接收方的密钥, 并且该接收方也有安全方式获得对应的解密密钥.
RFC 3447 [RFC3447] 和 RFC 6030 [RFC6030] 中关于保护私钥和对称密钥, 密钥用途, 以及信息泄露的安全考虑也适用于本规范.
9.3. RSA 私钥表示和盲化
RSA Key Blinding 操作 [Kocher] 是抵御某些计时攻击 [Kocher] 的防护手段, 并且需要全部 RSA 密钥值 "n", "e", 和 "d". 然而, 某些 RSA 私钥表示不包含公钥指数 "e", 而只包含模数 "n" 和私钥指数 "d". 例如 Java RSAPrivateKeySpec API 就是这种情况, 它不将公钥指数 "e" 作为参数包含在内. 为启用 RSA 密钥盲化, SHOULD 避免使用此类表示. 对于 Java, 可以改用 RSAPrivateCrtKeySpec API. "Handbook of Applied Cryptography" [HAC] 第 8.2.2(i) 节讨论了在需要时如何仅使用 "n", "e", 和 "d" 计算其余 RSA 私钥参数.
9.4. 密钥熵和随机值
关于密钥熵和随机值的安全考虑, 见 [JWS] 第 10.1 节.