JWT署名検証ツール(RS256/ES256、公開鍵検証)

RS256・ES256で署名されたJWT(JSON Web Token)を、SPKI形式の公開鍵(PEM)を使ってその場で検証できる開発者向けツールです。ヘッダー・ペイロードのデコード結果と有効期限も同時に確認できます。入力内容はサーバーへ送信せずブラウザ内だけで処理します。

対応する署名アルゴリズム一覧

アルゴリズム 鍵の種類 ハッシュ関数 説明
RS256 RSA(RSASSA-PKCS1-v1_5) SHA-256 RSA公開鍵暗号方式による署名。Google・Auth0・Oktaなど主要なOAuth 2.0/OpenID ConnectプロバイダーがIDトークンに使う標準的なデフォルトアルゴリズム。
ES256 ECDSA(P-256楕円曲線) SHA-256 RSAより短い鍵長・署名サイズで同等の安全性を実現できる楕円曲線暗号による署名。モバイルアプリやIoT機器などデータ量を抑えたい用途で採用が増えている。

Tips

  • 入力する公開鍵はPEM形式(SPKI、「-----BEGIN PUBLIC KEY-----」で始まる形式)である必要があります。秘密鍵ファイルや証明書(.crt)をそのまま貼り付けても検証できません。
  • JWTのヘッダーにあるalgフィールドの値(RS256かES256か)に応じて、内部で使用する検証アルゴリズムが自動的に切り替わります。手動での選択は不要です。
  • 署名検証と同時にペイロードのexpクレームもチェックし、有効期限切れの場合は警告を表示します。ただし署名が正しくても期限切れなら本来は拒否すべきトークンです。
  • このツールはRS256・ES256のみに対応しています。HS256のような共通鍵方式のJWTを確認したい場合は、姉妹ツールのJWTエンコーダーで同じ秘密鍵を使って再署名し、生成結果が一致するか比較する方法があります。
  • 検証に使う公開鍵は秘密情報ではないため、IDプロバイダーの公開エンドポイント(JWKS等)から取得したものをそのまま貼り付けて問題ありません。

よくある質問

RS256とES256のみ検証できます。HS256・HS384・HS512は秘密鍵を共有する共通鍵方式のため、公開鍵だけを入力するこのツールの仕組みでは検証できません。HS256の署名を確認したい場合は、姉妹ツールのJWTエンコーダーで同じ秘密鍵を使って再署名し、生成結果が一致するか比較する方法があります。

IDプロバイダー(Google・Auth0・Okta等)はJWKS(JSON Web Key Set)と呼ばれる公開エンドポイントで公開鍵を配布しています。JWKS形式のJSONをPEM形式に変換するツールを使うか、対象サービスのドキュメントに記載された公開鍵をそのまま使ってください。

主な原因は、①入力した公開鍵がそのJWTを発行した秘密鍵と対になっていない、②JWTのヘッダー・ペイロード・署名のいずれかが送信途中で改ざん・破損した、③コピー時に文字が欠落した、のいずれかです。JWT文字列と公開鍵の両方を発行元からもう一度正確にコピーし直してください。

現時点ではRS256・ES256のみに対応しています。RS384/RS512・ES384/ES512といった、より長いハッシュ関数を使うバリエーションは今後の対応候補として検討中です。

はい、署名の正当性とexpの期限切れは別々に判定してどちらも表示します。署名が正しくても期限切れのトークンは、実際のシステムでは通常拒否すべきです。画面に表示される有効期限の警告も必ず確認してください。
ツールくん

余談ですが ― HMACと公開鍵署名、何が違うのか

JWTの署名方式は大きく共通鍵方式(HMAC、HS256など)と公開鍵方式(RSA/ECDSA、RS256・ES256など)に分かれる。共通鍵方式は署名する側と検証する側が同じ秘密の文字列を共有する必要があるのに対し、公開鍵方式では署名する側だけが秘密鍵を持ち、検証する側は誰でも入手できる公開鍵だけで検証できる。この違いはAPI設計における役割分担に直結する。姉妹ツールのJWTエンコーダー(HS256)は「発行者と検証者が同じサーバー内で完結する」用途向けで、このツールが対象とするRS256・ES256は「発行者と検証者が別の組織・別のサーバーである」用途向けと言い換えられる。

実際、GoogleのOAuth 2.0やOpenID Connect、Auth0、Oktaといった主要なIDプロバイダーが発行するIDトークンは、ほぼ例外なくRS256(またはRS256をデフォルトとしつつES256を選択可能)で署名されている。これはIDプロバイダー側だけが秘密鍵で署名し、無数にあるクライアントアプリ(検証する側)は公開鍵だけを使って検証できるようにするためだ。秘密鍵を全クライアントに配布する必要がないため、鍵漏洩のリスクを署名者側の1箇所に閉じ込められる。

RS256とES256はどちらもSHA-256でハッシュを取る点は共通するが、暗号方式が異なる。RS256はRSA暗号(一般に2048ビット以上の鍵長)を使うため署名サイズが大きくなりがちだが、実装の枯れ具合と対応ライブラリの多さが強み。ES256は楕円曲線暗号(P-256)を使い、RSAより大幅に短い鍵長・署名サイズで同等の安全性を確保できるため、モバイル環境やペイロードサイズを抑えたいAPIで採用が増えている。

→ すべての余談を見る