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 要件も、JWK が JWS および JWE コンテキストで使用される場合と、「x5u」JWK メンバーが使用される場合の両方で、本仕様に適用されます。
9.2. Preventing Disclosure of Non-public Key Information (非公開鍵情報の開示防止)
秘密鍵 (Private Keys) および対称鍵 (Symmetric Keys) は必ず (MUST)、意図しない当事者への開示から保護されなければなりません。これを行う推奨される手段の 1 つは、それらを含む JWK または JWK Set を、JWK または JWK Set 値を JWE の平文として使用して暗号化することです。もちろん、これは、意図された当事者に非公開鍵情報を暗号化するための鍵を取得する安全な方法があり、その当事者が対応する復号化鍵を取得する安全な方法を持っていることを前提としています。
RFC 3447 [RFC3447] および RFC 6030 [RFC6030] における秘密鍵と対称鍵の保護、鍵の使用、および情報漏洩に関するセキュリティ考慮事項も、本仕様に適用されます。
9.3. RSA Private Key Representations and Blinding (RSA 秘密鍵の表現とブラインディング)
RSA 鍵ブラインディング操作 (RSA Key Blinding Operation) [Kocher] は、特定のタイミング攻撃 (Timing Attacks) [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. Key Entropy and Random Values (鍵エントロピーとランダム値)
鍵エントロピーとランダム値に関するセキュリティ考慮事項については、[JWS] のセクション 10.1 を参照してください。