9. Security Considerations (安全考虑)
所有与密钥管理相关的安全考虑都适用于本规范. 特别是,密钥的来源 (Provenance) 和信任 (Trust) 对于安全应用程序至关重要.
9.1. Key Provenance and Trust (密钥来源和信任)
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) 处理证书并在决定是否信任密钥时使用证书中的声明 (Claims).
XML DSIG 2.0 [W3C.NOTE-xmldsig-core2-20130411] 第12.3节中关于数字签名的强度取决于安全链中所有环节的安全考虑也适用于本规范.
[JWS]第8节中的TLS要求也适用于本规范,但本规范定义的唯一使用TLS的功能是"x5u" JWK成员.
9.2. Preventing Disclosure of Non-public Key Information (防止泄露非公开密钥信息)
必须 (MUST) 防止私钥和对称密钥向非预期方泄露. 实现此目的的一种推荐方法是通过使用JWK或JWK Set值作为JWE的明文来加密包含它们的JWK或JWK Set. 当然,这要求有一种安全的方式将用于加密非公开密钥信息的密钥获取给预期方,并且该方有一种安全的方式获取相应的解密密钥.
RFC 3447 [RFC3447] 和RFC 6030 [RFC6030] 中关于保护私钥和对称密钥、密钥用途和信息泄漏的安全考虑也适用于本规范.
9.3. RSA Private Key Representations and Blinding (RSA私钥表示和盲化)
RSA密钥盲化操作 (RSA Key Blinding Operation) [Kocher] 是针对某些时序攻击 (Timing Attacks) 的防御,需要所有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. Key Entropy and Random Values (密钥熵和随机值)
有关密钥熵和随机值的安全考虑,请参见[JWS]第10.1节.