PASETO vs JWT vs Branca — トークン形式比較
PASETO、JWT、Brancaのトークン形式を構造、暗号化方式、エコシステムの成熟度、各々が最も適合するユースケースで比較。
詳細な説明
JWT、PASETO、Brancaは、付随するクレーム付きベアラートークン形式の最も一般的な3つです。それぞれが異なるトレードオフを行います。
JWT(RFC 7519):
現職。JSONヘッダー + JSONペイロード + Base64url、JOSE経由で署名または暗号化。巨大なエコシステムサポート — 主要な認証ベンダーすべてが話し、OAuth 2.0/OIDCはこれを必須としています。欠点:alg 交渉は持続的な脆弱性源で、JWS/JWEファミリは大きく混乱させる。
PASETO:
JWTのフットガンへの反応。バージョン管理された暗号スイート(アルゴリズム交渉なし)、ISO 8601タイムスタンプ、任意の認証フッター、任意の暗黙アサーション。JWTより小さなエコシステムだが主要言語でしっかりしたライブラリサポート。グリーンフィールドの内部システムに推奨されるデフォルト。
Branca:
3つの中で最も意見的でミニマル。Brancaトークンは常にXChaCha20-Poly1305で暗号化され、常に24バイトのnonce + 4バイトのタイムスタンプ + 暗号文 + 16バイトのタグレイアウトを持ち、Base64ではなくBase62でエンコードされます。ペイロードは不透明バイト — Brancaはペイロード内のJSONや構造について何も主張しません。小さなライブラリで、監査が非常にシンプル。
横並び比較:
| 観点 | JWT | PASETO | Branca |
|---|---|---|---|
| 対称モード | JWE(複数オプション) | v*.local | 組み込み(唯一のモード) |
| 非対称モード | JWS(多数のalg) | v*.public | なし |
| アルゴリズム選択 | トークンごと alg ヘッダー |
バージョンごと | 固定 |
| ペイロード形式 | JSONのみ | JSONのみ | 不透明バイト |
| エンコーディング | Base64url | Base64url | Base62 |
| タイムスタンプ組み込み | なし(クレーム内) | なし(クレーム内、ISO 8601) | あり(4バイトepoch) |
| 標準化 | RFC | GitHubの仕様 | GitHubの仕様 |
それぞれの使い時:
- JWT — OAuth 2.0、OIDC、またはそれを要求するアイデンティティベンダーと統合する必要があるとき。
- PASETO — 両端を制御し、JWTのフットガンなしでJWT風の使い勝手が欲しいとき。サービス間トークンに良い。
- Branca — 最もシンプルな暗号化ベアラートークン形式が欲しく、独自のペイロードスキーマを定義することを厭わないとき。クッキー、不透明セッショントークン、単一信頼ドメインシステムに最適。
ミックスもできます:ユーザー向けエッジでPASETO、内部セッションクッキーにBranca、サードパーティアイデンティティプロバイダと話すのにJWT — 各形式が強みを発揮します。
ユースケース
チームが新しい内部APIメッシュ用のトークン形式を評価し、サービス間トークンにPASETO v4を選択、OAuth境界ではJWTを残し、不透明セッションクッキーにはBrancaを使用 — 各形式が強みを発揮します。