日本語

開発者ツール · JWT デコーダー

RFC 7519 および JOSE ファミリ: JWT、JWS、JWE、JWK、および JWA の説明

· 背景

jwt 暗号化 規格

JWT クレームと署名および暗号化された JOSE エンベロープを接続するマップ
オリジナル ToolAcre ベクトル イラスト

JWT は、IETF JOSE ワーキング グループの仕様ファミリーのメンバーの 1 つです。この投稿では、各 RFC の定義、それらがどのように組み合わされるか、および JWT が通常 JWS である理由について説明します。

5 つの頭字語、1 つのトークン — JWT についてのみ質問したのに、ドキュメントで JWS と JWE について言及しているのはなぜですか

トークンのドキュメントは、JWT、JWS、JWE、JWK、JWA の間で移動します。これらは同じエコシステムの異なるレイヤーを説明しているためです。 「JWT」がすべてのコンパクトな 3 部構成の署名付きトークンの短縮表現として使用されると、混乱が始まります。クレームをエンベロープおよびキー表現から分離すると、実装の推論が容易になります。

ToolAcre のデコーダーは、ファミリーより意図的に狭くなっています。これは、最初の 2 つのデコードされたセグメントが JSON オブジェクトである 3 つの部分からなる JWS 形式の入力を処理します。受信者のキーなしで暗号文を読み取ると同じものを復号できないため、5 つの部分からなる暗号化されたコンパクト入力を検出して停止します。

JOSE ドキュメントは関連する形式を定義します。このリポジトリはワーキンググループのタイムラインを確立していません

関連する仕様は IETF JOSE の作業から来ていますが、リポジトリ ソースでは、アウトラインで要求されている詳細な組織スケジュールが確立されていません。したがって、この記事では日付やプロセス履歴の捏造を避け、ツールと計画で観察できる形式の関係に焦点を当てます。

実際的な問題は、どの層が各決定を所有するかということです。クレーム名はアプリケーション ステートメントを記述し、署名はエンコードされたマテリアルを保護し、暗号化はコンテンツを保護し、JSON キー オブジェクトはキー情報を表し、アルゴリズム識別子は操作に名前を付けます。他の略語に代わる略語はありません。

JWS (RFC 7515) — 任意のコンテンツの署名と JWT が使用するコンパクトなシリアル化

JWS は、署名されたコンテンツまたは MAC で保護されたコンテンツを記述します。そのコンパクトな形式には、保護されたヘッダー、ペイロード、署名の 3 つのセグメントがあります。署名入力では、ドットで結合された最初の 2 つのエンコードされたセグメントが使用されます。 JWT は通常、このエンベロープ内で移動します。これは、ToolAcre が分割して検査する形式です。

ヘッダーとペイロードは JSON にデコードできますが、署名は 3 番目のオブジェクトではなくバイトです。 ToolAcre は署名の存在とサイズを報告しますが、常に未検証としてマークされます。したがって、暗号化の結果を主張することなく、JWS 構造を示すことができます。

JWE (RFC 7516) — 5 部構成のシリアル化によるコンテンツの暗号化

JWE は暗号化されたコンテンツを記述します。そのコンパクトな形式には、保護されたヘッダー、暗号化されたキー マテリアル、初期化値、暗号文、および認証タグを表す 5 つのセグメントがあります。したがって、4 つのドットは、3 つの部分からなる JWT デコーダーが異なるエンベロープを受信したことを示す強力な構造上の手がかりとなります。

ToolAcre は特定の JWE エラーを発行し、復号化キーがないとコンテンツを読み取ることができないことを説明します。暗号文を不正な形式の JSON として扱ったり、ランダムなバイトを表示しようとしたりしません。暗号化と署名も構成できますが、ネストされた処理はこのルートの外にあります。

JWK および JWA (RFC 7517 および 7518) — キーを JSON として表し、アルゴリズムに名前を付ける

JWK は暗号鍵情報の JSON 表現を提供し、JWA は JOSE 全体で使用されるアルゴリズム識別子と関連パラメーターに名前を付けます。それらの存在は、トークンが独自の信頼できるキーまたはアルゴリズムを選択できることを意味するものではありません。検証者は、発行者ポリシーとアプリケーション ポリシーの両方を制約する必要があります。

ToolAcre アルゴリズム ノートは、ソース内に存在するラベルの有限セットのみを説明し、その他の認識されないものはすべて呼び出します。これらは説明であり、実装ではありません。デコーダは JWK をインポートせず、JWA からアルゴリズムを実行しないため、検査境界が明示的に保たれます。

JWT (RFC 7519) — JWS または JWE に基づくクレーム形式

JWT は、クレーム オブジェクトと、発行者、件名、対象者、NumericDates などの登録名を定義します。これらのクレームは、署名または暗号化された JOSE 構造で保持できます。したがって、ペイロード層は「どのようなステートメントが表現されているか」に応答し、エンベロープはそれらのバイトがどのように保護または隠蔽されるかに応答します。

ToolAcre は、デコードされたペイロードが JSON オブジェクトであることを予期し、そのクレームをリストします。このツールでは、配列、数値、または null は拒否されます。適切な形状のオブジェクトであっても、関連するエンベロープが構成された検証者または受信者によって処理されるまでは信頼できないままになります。

これでカバーされないもの — RFC 8725 ベスト プラクティスや RFC 9068 アクセス トークンなど、独自の投稿がある後のプロファイル

後のベスト プラクティスとプロファイルの文書により、これらの一般的なメカニズムの使用方法が絞り込まれる可能性があります。基本形式ではアプリケーション固有の発行者、対象者、またはトークン タイプのポリシーが提供されないため、これらは別個に扱う必要があります。この記事は、デコーダがそのようなプロファイルを実装しているとは主張しません。

システムをレビューするときは、正確なプロファイル、予想されるエンベロープ、受け入れられたアルゴリズム、キー ソース、およびクレーム ルールを書き留めてください。このリストにより、頭字語の親しみやすさが互換性やセキュリティの思い込みに変わるのを防ぎます。

要点: JWT はクレーム、JWS はエンベロープです。ToolAcre JWT デコーダーは JWS コンパクト フォームを読み取り、内部の JWT ヘッダーとクレームを表示します。

JWT はクレーム レイヤーの名前を指定します。 JWS と JWE は保護エンベロープを提供します。 JWK はキーデータを表します。 JWA はアルゴリズムの選択肢に名前を付けています。 ToolAcre は、共通の 3 部構成の署名付き形状を読み取り、検証や復号化を拒否しながらヘッダーとクレームを表示します。

そのマップを使用して、次の適切な質問をしてください。読み取り可能な JSON は、クレーム レイヤーを識別します。 3 つまたは 5 つのセグメントにより、可能性のあるエンベロープ ファミリが特定されます。信頼は依然として、頭字語を認識するデコーダではなく、個別に設定された暗号化とポリシーに依存します。