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

9. Distinguishing between JWS and JWE Objects (JWSとJWEオブジェクトの区別)

オブジェクトがJWSかJWEかを区別する方法はいくつかあります。これらの方法はすべて、すべての正当な入力値に対して同じ結果をもたらします。不正な形式の入力に対しては、異なる結果をもたらす可能性があります。

  • コンパクト直列化 - セグメント数: オブジェクトがJWS Compact SerializationまたはJWE Compact Serializationを使用している場合、ピリオド ('.') 文字で区切られたbase64url符号化されたセグメントの数が両者で異なります。JWSは3つのセグメントがあり、2つのピリオド ('.') 文字で区切られます。JWEは5つのセグメントがあり、4つのピリオド ('.') 文字で区切られます。

  • JSON直列化 - メンバー: オブジェクトがJWS JSON SerializationまたはJWE JSON Serializationを使用している場合、使用されるメンバーが異なります。JWSには "payload" メンバーがありますが、JWEにはありません。JWEには "ciphertext" メンバーがありますが、JWSにはありません。

  • algパラメータ値: JWSのJOSE HeaderとJWEのJOSE Headerは、"alg" (algorithm, アルゴリズム) Header Parameter値を調べることで区別できます。値がデジタル署名またはMACアルゴリズムを表す場合、または値が "none" の場合、それはJWS用です。Key Encryption (鍵暗号化)、Key Wrapping (鍵ラッピング)、Direct Key Agreement (直接鍵合意)、Key Agreement with Key Wrapping (鍵ラッピング付き鍵合意)、またはDirect Encryption (直接暗号化) アルゴリズムを表す場合、それはJWE用です。(JWS Compact SerializationまたはJWE Compact Serializationを使用する場合、検査のために "alg" 値を抽出するのは簡単ですが、JWS JSON SerializationまたはJWE JSON Serializationを使用する場合はより困難な場合があります。)

  • encメンバーの存在: JWSのJOSE HeaderとJWEのJOSE Headerは、"enc" (encryption algorithm, 暗号化アルゴリズム) メンバーが存在するかどうかを判断することでも区別できます。"enc" メンバーが存在する場合、それはJWEです。そうでない場合、それはJWSです。