4. JOSE Header (JOSEヘッダー)
JWSの場合、JOSE Headerを表すJSONオブジェクトのメンバーは、JWS Protected HeaderとJWS Payloadに適用されるデジタル署名またはMAC、およびオプションでJWSの他の属性を記述します。JOSE HeaderのHeader Parameter名は一意でなければなりません (MUST)。JWSパーサーは、重複したHeader Parameter名を持つJWSを拒否するか、ECMAScript 5.1 [ECMAScript] のセクション15.12("The JSON Object")で規定されているように、字句的に最後の重複メンバー名のみを返すJSONパーサーを使用しなければなりません (MUST)。
実装は、本仕様で"MUST be understood"(理解されなければならない)と指定された特定のHeader Parametersを理解し、本仕様で定義されているとおりに処理する必要があります。本仕様で定義されているが、そのように指定されていない他のすべてのHeader Parametersは、理解されない場合は無視しなければなりません (MUST)。セクション4.1.11に従ってクリティカルHeader Parameterとしてリストされていない限り、本仕様で定義されていないすべてのHeader Parametersは、理解されない場合は無視しなければなりません (MUST)。
Header Parameter名には3つのクラスがあります: Registered Header Parameter names(登録済みヘッダーパラメータ名)、Public Header Parameter names(公開ヘッダーパラメータ名)、およびPrivate Header Parameter names(プライベートヘッダーパラメータ名)。
4.1 Registered Header Parameter Names (登録済みヘッダーパラメータ名)
以下のJWS用Header Parameter名は、セクション9.1で設立されたIANA "JSON Web Signature and Encryption Header Parameters" レジストリに登録されており、その意味は以下のサブセクションで定義されています。
汎用レジストリに示されているように、JWSとJWEは共通のHeader Parameter空間を共有しています。パラメータが両方の仕様で使用される場合、その使用法は仕様間で互換性がなければなりません。
4.1.1 "alg" (Algorithm) Header Parameter (アルゴリズムヘッダーパラメータ)
"alg" (algorithm、アルゴリズム) Header Parameterは、JWSを保護するために使用される暗号アルゴリズムを識別します。"alg"値がサポートされているアルゴリズムを表していない場合、またはデジタル署名またはMACコンテンツの当事者に関連付けられたそのアルゴリズム用の鍵がない場合、JWS Signature値は無効です。"alg"値は、[JWA] で設立されたIANA "JSON Web Signature and Encryption Algorithms" レジストリに登録されているか、Collision-Resistant Name(衝突耐性名)を含む値である必要があります (SHOULD)。"alg"値は、StringOrURI値を含む大文字と小文字を区別するASCII文字列です。このHeader Parameterは存在しなければならず (MUST)、実装によって理解され処理されなければなりません (MUST)。
[JWA] で設立されたIANA "JSON Web Signature and Encryption Algorithms" レジストリには、この目的で定義された"alg"値のリストがあります。このレジストリの初期内容は、[JWA] のセクション3.1で定義された値です。
4.1.2 "jku" (JWK Set URL) Header Parameter (JWKセットURLヘッダーパラメータ)
"jku" (JWK Set URL) Header Parameterは、JSON形式でエンコードされた公開鍵のセットのリソースを参照するURI [RFC3986] です。そのうちの1つは、JWSをデジタル署名するために使用された鍵に対応します。鍵はJWK Set [JWK] としてエンコードされなければなりません (MUST)。リソースを取得するために使用されるプロトコルは、完全性保護を提供しなければなりません (MUST)。JWK Setを取得するHTTP GETリクエストは、Transport Layer Security (TLS) [RFC2818] [RFC5246] を使用しなければならず (MUST)、RFC 6125 [RFC6125] のセクション6に従ってサーバーのアイデンティティを検証しなければなりません (MUST)。TLS要件についてはセクション8も参照してください。このHeader Parameterの使用は任意 (OPTIONAL) です。
4.1.3 "jwk" (JSON Web Key) Header Parameter (JSON Web鍵ヘッダーパラメータ)
"jwk" (JSON Web Key) Header Parameterは、JWSをデジタル署名するために使用された鍵に対応する公開鍵です。この鍵はJSON Web Key [JWK] として表現されます。このHeader Parameterの使用は任意 (OPTIONAL) です。
4.1.4 "kid" (Key ID) Header Parameter (鍵IDヘッダーパラメータ)
"kid" (key ID、鍵ID) Header Parameterは、JWSを保護するためにどの鍵が使用されたかを示すヒントです。このパラメータにより、発信者は受信者に鍵変更を明示的に通知できます。"kid"値の構造は指定されていません。その値は、大文字と小文字を区別する文字列でなければなりません (MUST)。このHeader Parameterの使用は任意 (OPTIONAL) です。
JWKと共に使用する場合、"kid"値はJWK "kid"パラメータ値と一致するために使用されます。
4.1.5 "x5u" (X.509 URL) Header Parameter (X.509 URLヘッダーパラメータ)
"x5u" (X.509 URL) Header Parameterは、JWSをデジタル署名するために使用された鍵に対応するX.509公開鍵証明書または証明書チェーン [RFC5280] のリソースを参照するURI [RFC3986] です。識別されたリソースは、RFC 5280 [RFC5280] に準拠した証明書または証明書チェーンの表現を、PEMエンコード形式で提供しなければならず (MUST)、各証明書はRFC 4945 [RFC4945] のセクション6.1で規定されているように区切られます。JWSをデジタル署名するために使用された鍵に対応する公開鍵を含む証明書は、最初の証明書でなければなりません (MUST)。その後に、前の証明書を認証するために使用された証明書である追加の証明書が続いてもかまいません (MAY)。リソースを取得するために使用されるプロトコルは、完全性保護を提供しなければなりません (MUST)。証明書を取得するHTTP GETリクエストは、TLS [RFC2818] [RFC5246] を使用しなければならず (MUST)、RFC 6125 [RFC6125] のセクション6に従ってサーバーのアイデンティティを検証しなければなりません (MUST)。TLS要件についてはセクション8も参照してください。このHeader Parameterの使用は任意 (OPTIONAL) です。
4.1.6 "x5c" (X.509 Certificate Chain) Header Parameter (X.509証明書チェーンヘッダーパラメータ)
"x5c" (X.509 certificate chain、X.509証明書チェーン) Header Parameterは、JWSをデジタル署名するために使用された鍵に対応するX.509公開鍵証明書または証明書チェーン [RFC5280] を含みます。証明書または証明書チェーンは、証明書値文字列のJSON配列として表現されます。配列内の各文字列は、DER [ITU.X690.2008] PKIX証明書値のbase64エンコード([RFC4648] セクション4 - base64urlエンコードではない)です。JWSをデジタル署名するために使用された鍵に対応する公開鍵を含む証明書は、最初の証明書でなければなりません (MUST)。その後に、前の証明書を認証するために使用された証明書である追加の証明書が続いてもかまいません (MAY)。受信者は、RFC 5280 [RFC5280] に従って証明書チェーンを検証しなければならず (MUST)、検証の失敗が発生した場合は証明書または証明書チェーンを無効として扱わなければなりません。このHeader Parameterの使用は任意 (OPTIONAL) です。
"x5c"値の例については、付録Bを参照してください。
4.1.7 "x5t" (X.509 Certificate SHA-1 Thumbprint) Header Parameter (X.509証明書SHA-1サムプリントヘッダーパラメータ)
"x5t" (X.509 certificate SHA-1 thumbprint、X.509証明書SHA-1サムプリント) Header Parameterは、JWSをデジタル署名するために使用された鍵に対応するX.509証明書 [RFC5280] のDERエンコーディングのbase64urlエンコードされたSHA-1サムプリント(ダイジェストとも呼ばれる)です。証明書サムプリントは、証明書フィンガープリントと呼ばれることもあります。このHeader Parameterの使用は任意 (OPTIONAL) です。
4.1.8 "x5t#S256" (X.509 Certificate SHA-256 Thumbprint) Header Parameter (X.509証明書SHA-256サムプリントヘッダーパラメータ)
"x5t#S256" (X.509 certificate SHA-256 thumbprint、X.509証明書SHA-256サムプリント) Header Parameterは、JWSをデジタル署名するために使用された鍵に対応するX.509証明書 [RFC5280] のDERエンコーディングのbase64urlエンコードされたSHA-256サムプリント(ダイジェストとも呼ばれる)です。証明書サムプリントは、証明書フィンガープリントと呼ばれることもあります。このHeader Parameterの使用は任意 (OPTIONAL) です。
4.1.9 "typ" (Type) Header Parameter (タイプヘッダーパラメータ)
"typ" (type、タイプ) Header Parameterは、JWSアプリケーションがこの完全なJWSのメディアタイプ [IANA.MediaTypes] を宣言するために使用します。これは、アプリケーションデータ構造に複数のオブジェクトタイプが存在する可能性があり、JWSを含む可能性がある場合にアプリケーションで使用することを目的としています。アプリケーションは、この値を使用して、存在する可能性のある異なるタイプのオブジェクトを区別できます。オブジェクトのタイプが既知の場合、アプリケーションは通常これを使用しません。JWS実装はこのパラメータを無視します。このパラメータの処理は、JWSアプリケーションによって実行されます。このHeader Parameterの使用は任意 (OPTIONAL) です。
RFC 2045 [RFC2045] に従って、すべてのメディアタイプ値、サブタイプ値、およびパラメータ名は大文字と小文字を区別しません。ただし、パラメータ値は、特定のパラメータで別途指定されていない限り、大文字と小文字を区別します。
一般的なケースでメッセージをコンパクトに保つために、プロデューサーは、メディアタイプ値に他の'/'が出現しない場合、"typ" Header Parameterのメディアタイプ値から"application/"プレフィックスを省略することが推奨されます (RECOMMENDED)。メディアタイプ値を使用する受信者は、'/'を含まない"typ"値の前に"application/"を追加するものとして扱わなければなりません (MUST)。たとえば、"typ"値"example"は"application/example"メディアタイプを表すために使用すべきです (SHOULD)が、メディアタイプ"application/example;part="1/2""は"example;part="1/2""に短縮できません。
アプリケーションは、"typ"値"JOSE"を使用して、このオブジェクトがJWS Compact SerializationまたはJWE Compact Serializationを使用するJWSまたはJWEであることを示すことができます (MAY)。アプリケーションは、"typ"値"JOSE+JSON"を使用して、このオブジェクトがJWS JSON SerializationまたはJWE JSON Serializationを使用するJWSまたはJWEであることを示すことができます (MAY)。アプリケーションは他のタイプ値も使用できます (MAY)。
4.1.10 "cty" (Content Type) Header Parameter (コンテンツタイプヘッダーパラメータ)
"cty" (content type、コンテンツタイプ) Header Parameterは、JWSアプリケーションが保護されたコンテンツ(ペイロード)のメディアタイプ [IANA.MediaTypes] を宣言するために使用します。これは、JWS Payloadに複数のオブジェクトタイプが存在する可能性がある場合にアプリケーションで使用することを目的としています。アプリケーションは、この値を使用して、存在する可能性のある異なるタイプのオブジェクトを区別できます。オブジェクトのタイプが既知の場合、アプリケーションは通常これを使用しません。JWS実装はこのパラメータを無視します。このパラメータの処理は、JWSアプリケーションによって実行されます。このHeader Parameterの使用は任意 (OPTIONAL) です。
RFC 2045 [RFC2045] に従って、すべてのメディアタイプ値、サブタイプ値、およびパラメータ名は大文字と小文字を区別しません。ただし、パラメータ値は、特定のパラメータで別途指定されていない限り、大文字と小文字を区別します。
一般的なケースでメッセージをコンパクトに保つために、プロデューサーは、メディアタイプ値に他の'/'が出現しない場合、"cty" Header Parameterのメディアタイプ値から"application/"プレフィックスを省略することが推奨されます (RECOMMENDED)。メディアタイプ値を使用する受信者は、'/'を含まない"cty"値の前に"application/"を追加するものとして扱わなければなりません (MUST)。たとえば、"cty"値"example"は"application/example"メディアタイプを表すために使用すべきです (SHOULD)が、メディアタイプ"application/example;part="1/2""は"example;part="1/2""に短縮できません。
4.1.11 "crit" (Critical) Header Parameter (クリティカルヘッダーパラメータ)
"crit" (critical、クリティカル) Header Parameterは、本仕様および/または [JWA] への拡張が使用されており、これらの拡張は理解され処理されなければならない (MUST) ことを示します。その値は、これらの拡張を使用するJOSE HeaderのHeader Parameter名をリストする配列です。受信者がリストされた拡張Header Parametersのいずれかを理解およびサポートしていない場合、JWSは無効です。プロデューサーは、"crit"リストに、本仕様または [JWA] がJWSでの使用のために定義したHeader Parameter名、重複した名称、またはJOSE HeaderのHeader Parameter名として出現しない名称を含めてはなりません (MUST NOT)。プロデューサーは、"crit"値として空のリスト"[]"を使用してはなりません (MUST NOT)。クリティカルリストに、本仕様または [JWA] がJWSでの使用のために定義したHeader Parameter名が含まれている場合、またはその使用に関する他の制約に違反している場合、受信者はJWSを無効として扱うことができます (MAY)。使用する場合、このHeader Parameterは完全性保護されなければなりません (MUST)。したがって、JWS Protected Headerにのみ出現しなければなりません (MUST)。このHeader Parameterの使用は任意 (OPTIONAL) です。このHeader Parameterは、実装によって理解され処理されなければなりません (MUST)。
使用例と仮想の"exp" (expiration time、有効期限) フィールドの例:
{"alg":"ES256",
"crit":["exp"],
"exp":1363284000
}
付録Eの"crit"に関する否定的テストケースも参照してください。
4.2 Public Header Parameter Names (公開ヘッダーパラメータ名)
JWSを使用する人は、追加のHeader Parameter名を定義できます (MAY)。ただし、競合を防ぐために、新しいHeader Parameter名は、セクション9.1で設立されたIANA "JSON Web Signature and Encryption Header Parameters" レジストリに登録されるか、Collision-Resistant Nameを含む値であるPublic Nameである必要があります (SHOULD)。いずれの場合も、名前または値の定義者は、Header Parameter名を定義するために使用される名前空間の部分を制御していることを確認するために、合理的な予防措置を講じる必要があります。
新しいHeader Parametersは慎重に導入する必要があります。これらは相互運用できないJWSにつながる可能性があるためです。
4.3 Private Header Parameter Names (プライベートヘッダーパラメータ名)
JWSのプロデューサーとコンシューマーは、Registered Header Parameter names(セクション4.1)またはPublic Header Parameter names(セクション4.2)ではない名前であるPrivate Namesを使用するHeader Parameter名を使用することに同意できます (MAY)。Public Header Parameter Namesとは異なり、Private Header Parameter Namesは競合する可能性があり、慎重に使用する必要があります。