メインコンテンツまでスキップ

7. Serializations (シリアライゼーション)

JWSは、JWS Compact Serialization (JWSコンパクトシリアライゼーション) またはJWS JSON Serialization (JWS JSONシリアライゼーション) のいずれかのシリアライゼーションを使用します。本仕様を使用するアプリケーションは、そのアプリケーションで使用されるシリアライゼーションとシリアライゼーション機能を指定する必要があります。たとえば、アプリケーションは、JWS JSON Serializationのみを使用すること、単一の署名またはMAC値に対するJWS JSON Serializationのサポートのみを使用すること、または複数の署名および/またはMAC値に対するサポートを使用することを指定する場合があります。JWS実装は、サポートするように設計されたアプリケーションに必要な機能のみを実装する必要があります。

7.1 JWS Compact Serialization (JWSコンパクトシリアライゼーション)

JWS Compact Serializationは、デジタル署名またはMACで保護されたコンテンツをコンパクトでURLセーフな文字列として表現します。この文字列は次のとおりです:

BASE64URL(UTF8(JWS Protected Header)) || '.' ||
BASE64URL(JWS Payload) || '.' ||
BASE64URL(JWS Signature)

JWS Compact Serializationは、1つの署名/MACのみをサポートし、JWS Unprotected Header値を表現する構文は提供しません。

7.2 JWS JSON Serialization (JWS JSONシリアライゼーション)

JWS JSON Serializationは、デジタル署名またはMACで保護されたコンテンツをJSONオブジェクトとして表現します。この表現は、コンパクト性に最適化されておらず、URLセーフでもありません。

JWS JSON Serializationには、密接に関連する2つの構文が定義されています: 複数のデジタル署名および/またはMAC操作を使用してコンテンツを保護できる完全に汎用的な構文と、単一のデジタル署名またはMACのケースに最適化されたフラット化構文です。

7.2.1 General JWS JSON Serialization Syntax (汎用JWS JSONシリアライゼーション構文)

以下のメンバーは、完全に汎用的なJWS JSON Serialization構文のトップレベルJSONオブジェクトに対して定義されます:

payload : "payload"メンバーは存在しなければならず (MUST)、値BASE64URL(JWS Payload)を含みます。

signatures : "signatures"メンバーの値は、JSONオブジェクトの配列でなければなりません (MUST)。各オブジェクトは、JWS PayloadとJWS Protected Headerに対する署名またはMACを表します。

以下のメンバーは、"signatures"配列要素のJSONオブジェクトに対して定義されます:

protected : JWS Protected Header値が空でない場合、"protected"メンバーは存在しなければならず (MUST)、値BASE64URL(UTF8(JWS Protected Header))を含みます。それ以外の場合は、存在してはなりません (MUST)。これらのHeader Parameter値は完全性保護されます。

header : JWS Unprotected Header値が空でない場合、"header"メンバーは存在しなければならず (MUST)、値JWS Unprotected Headerを含みます。それ以外の場合は、存在してはなりません (MUST)。この値は、文字列ではなく、エンコードされていないJSONオブジェクトとして表現されます。これらのHeader Parameter値は完全性保護されません。

signature : "signature"メンバーは存在しなければならず (MUST)、値BASE64URL(JWS Signature)を含みます。

各署名/MAC計算について、"alg" Header Parameter値を伝達するために、"protected"および"header"メンバーの少なくとも1つが存在しなければなりません (MUST)。

上記で定義されたJSONオブジェクトには、他のメンバーが存在してもかまいません。実装がそれらを理解しない場合、それらに遭遇したときに無視しなければなりません (MUST)。

単一の署名またはMAC値を作成または検証するときに使用されるHeader Parameter値は、存在する可能性のある2つのHeader Parameter値のセットの和集合です: (1) 署名/MACの配列要素の"protected"メンバーで表現されるJWS Protected Header、および (2) 署名/MACの配列要素の"header"メンバーのJWS Unprotected Header。これらのHeader Parametersセットの和集合がJOSE Headerを構成します。2つの場所のHeader Parameter名は互いに素でなければなりません (MUST)。

各JWS Signature値は、対応するJOSE Header値のパラメータを使用して、JWS Compact Serializationと同じ方法で計算されます。これには、"signatures"配列で表現される各JWS Signature値が、その署名/MAC計算のJWS Protected Header値(完全性保護されたHeader Parameter値を表す)がJWS Compact Serializationで使用される値と一致する場合、同じパラメータに対してJWS Compact Serializationで計算される値と同一であるという望ましい特性があります。

まとめると、汎用JWS JSON Serializationを使用するJWSの構文は次のとおりです:

{
"payload":"<payload contents>",
"signatures":[
{"protected":"<integrity-protected header 1 contents>",
"header":<non-integrity-protected header 1 contents>,
"signature":"<signature 1 contents>"},
...
{"protected":"<integrity-protected header N contents>",
"header":<non-integrity-protected header N contents>,
"signature":"<signature N contents>"}]
}

汎用JWS JSON Serialization構文を使用したJWSの例については、付録A.6を参照してください。

7.2.2 Flattened JWS JSON Serialization Syntax (フラット化JWS JSONシリアライゼーション構文)

フラット化JWS JSON Serialization構文は、汎用構文に基づいていますが、単一のデジタル署名/MACのケースに最適化するためにフラット化されています。"signatures"メンバーを削除し、"signatures"配列での使用のために定義されたメンバー("protected"、"header"、および"signature"メンバー)をトップレベルJSONオブジェクト("payload"メンバーと同じレベル)に配置することでフラット化します。

この構文を使用する場合、"signatures"メンバーは存在してはなりません (MUST NOT)。この構文の違いを除いて、フラット化構文を使用するJWS JSON Serializationオブジェクトは、汎用構文を使用するオブジェクトとまったく同じ方法で処理されます。

まとめると、フラット化JWS JSON Serializationを使用するJWSの構文は次のとおりです:

{
"payload":"<payload contents>",
"protected":"<integrity-protected header contents>",
"header":<non-integrity-protected header contents>,
"signature":"<signature contents>"
}

フラット化JWS JSON Serialization構文を使用したJWSの例については、付録A.7を参照してください。