JWK / JWKS Studio(JWK・JWKS 確認)

JWK か JWKS を貼ると、鍵ごとの種類・kid・鍵長・thumbprint を表にして、RFC 7517 と 7518 に照らした問題点を理由つきで示します。公開鍵の PEM 変換もできます。署名の検証や鍵の生成は行いません。

端末内で処理・アップロードなしスマホ対応オフライン対応

ファイルや入力内容はお使いの端末(ブラウザ)の中だけで処理され、サーバーへは送信されません。

JSON 形式の JWK / JWKS、または PEM を貼り付けます。

使い方

  1. JWK(1 個の鍵の JSON)か JWKS({"keys":[…]})を入力欄に貼り付けます。PEM(-----BEGIN…)を貼ると、PEM から JWK に変換する操作になります。

  2. 鍵ごとに kty・kid・alg・曲線・鍵長・公開か秘密か・JWK Thumbprint が表に出ます。問題は鍵の行の下に、理由と該当するメンバー名つきで並びます。

  3. 「変換」で、選んだ鍵を PEM にしたり、秘密の値を除いた公開鍵の JWK にしたりできます。JWKS 全体は公開用にまとめ、kid がない鍵には thumbprint を kid として付けます。

  4. 秘密鍵を含む入力や出力は既定で伏せます。「表示」で見えるようにできます。

  5. 結果はコピーするか保存します。新しく鍵を作る場合は、暗号・ハッシュツールを使います。

できること

JWK と JWKS を 1 画面で検査

RSA・EC・OKP(Ed25519 など)・oct を判別し、kid・use・key_ops・alg・曲線・鍵長・公開か秘密かを鍵ごとに表にします。

RFC に沿った検査

RFC 7517・7518・8037 に照らして、必須項目の欠け、base64url の不正、alg と kty・曲線の不一致、曲線ごとの座標の長さ、use と key_ops の矛盾、kid の重複を指摘します。

秘密鍵の混入を警告

公開用の JWKS に d・p・q・dp・dq・qi・oth(oct は k)が入っていると、その鍵の行に誤りとして示します。単独の秘密鍵 JWK は正常な入力として扱います。

JWK Thumbprint(RFC 7638)

RFC 7638 §3.2 の必須項目だけを並べて SHA-256 を取り、base64url で表示します。コピーボタンで取り出せます。

JWK と PEM の相互変換

WebCrypto で公開鍵は SPKI、秘密鍵は PKCS#8 の PEM にします。PEM から JWK にも戻せます。WebCrypto で扱えない鍵は、その理由を示して変換しません。

秘密の値は既定で伏せる

秘密鍵を含む入力や出力は伏せて表示し、保存(localStorage など)はしません。ページを閉じると内容は消えます。

こんなときに

  • 配布された JWKS の鍵の種類・kid・鍵長を、貼り付けて確かめたい
  • 公開用の JWKS に、誤って d や p・q などの秘密の値が入っていないか確認したい
  • JWK の公開鍵を PEM にして、OpenSSL や別のライブラリに渡したい
  • RFC 7638 の thumbprint を kid にして、鍵を区別できるようにしたい

対応形式

入力

JWK(JSON オブジェクト 1 個)JWK Set({"keys": [JWK, …]})PEM(PUBLIC KEY・PRIVATE KEY)

鍵の種類

RSA(kty: RSA)EC(P-256・P-384・P-521)OKP(Ed25519・Ed448・X25519・X448)oct(共通鍵。検査のみ)

対応状況

機能対応補足
JWK・JWKS の検査(必須項目・base64url・alg と kty・曲線)対応—
JWK Thumbprint(RFC 7638・SHA-256)対応—
JWK → PEM(公開鍵 SPKI・秘密鍵 PKCS#8)一部対応WebCrypto が扱える鍵だけ。Ed448・X448 や secp256k1 は変換できず、Ed25519 は一部のブラウザで失敗することがあります
PEM → JWK一部対応SPKI と PKCS#8 の RSA・EC・Ed25519・X25519 のみ。PKCS#1 と暗号化された PEM は非対応
秘密鍵から公開鍵の JWK を作る対応d・p・q などを除き、kty に必要な公開メンバーだけを残します
kid の付与(thumbprint を kid にする)対応—
鍵の生成非対応鍵の生成は暗号・ハッシュツール(crypto_studio)で行います
署名・検証・暗号化・JWT の検証非対応鍵の検査と変換だけを行います
URL から JWKS を取得非対応通信しません。JWKS は貼り付けて受け取ります
対称鍵(oct)の PEM 変換非対応対称鍵には PEM の形式がありません
オフラインでの利用対応一度開いたあとは通信なしで動作

制限・注意事項

  • 入力は 20 万文字まで、JWK Set に含められる鍵は 500 件までです。
  • RSA の鍵長は n の実際のビット数で判定します。2048 ビット未満には警告を出します(RFC 7518 §3.3 は RS256 などに 2048 ビット以上を求めます)。
  • 秘密鍵と公開鍵が対になっているかは確かめません。鍵の数学的な正しさも検査しません。
  • 証明書(BEGIN CERTIFICATE)・PKCS#1 の PEM・暗号化された PEM は扱いません。証明書は別のツールで確認してください。
  • 秘密鍵の値は、ページの中で表示して読むだけの用途にしてください。この画面は保存しません。

プライバシーと安全性

入力した JWK・JWKS・PEM はお使いのブラウザの中だけで処理し、サーバーへ送信・保存されることはありません。秘密鍵を含む入力や出力は既定で伏せ、ページを閉じると内容は消えます。

よくある質問

JWK と JWKS の違いは何ですか?
JWK は 1 つの鍵を表す JSON オブジェクトです。JWKS(JWK Set)は {"keys": [JWK, …]} の形で鍵をまとめたもので、公開鍵の配布(OpenID Connect の jwks_uri など)に使われます(RFC 7517 §5)。
JWK Thumbprint(RFC 7638)とは何ですか?
鍵を表す必須の値(RSA なら e・kty・n など)だけを決まった順に並べ、SHA-256 を取って base64url で表した値です。同じ鍵からは同じ値になるため、kid として使えます(RFC 7638 §3)。
JWKS に秘密鍵が入っているとなぜ問題ですか?
JWKS は公開される前提の鍵の一覧です。d や p・q などの秘密の値が入っていると、その鍵の秘密鍵が外に漏れます。公開用の JWKS からは取り除き、秘密鍵は別の場所で管理してください。
RSA の鍵長はどう判定しますか?
n(モジュラス)を big-endian の整数として見て、先頭の 0 を除いたビット数で判定します。RFC 7518 §3.3 は RS256 などに 2048 ビット以上の鍵を求めるため、これより短い鍵には警告を出します。
PEM を JWK に変換できないのはなぜですか?
PKCS#1 の PEM(BEGIN RSA PUBLIC KEY)、暗号化された PEM、証明書(BEGIN CERTIFICATE)は扱いません。SPKI(BEGIN PUBLIC KEY)と PKCS#8(BEGIN PRIVATE KEY)の RSA・EC・Ed25519・X25519 鍵に対応しています。
鍵を新しく作るにはどうしますか?
このツールは鍵を作りません。RSA・EC・Ed25519 の鍵ペアは暗号・ハッシュツール(crypto_studio)で生成でき、PEM と JWK で出力できます。

暗号・ハッシュ計算(Crypto Studio)

テキストを入れるだけで SHA-256 や SHA-3 など 12 種類のハッシュ値を一度に表示。Webhook 署名の HMAC 照合、パスワードでのテキスト暗号化、鍵ペアの生成、bcrypt の作成と照合まで、送信なしで手元の端末だけで行えます。

アップロードなし

証明書・CSR・PEM Studio

PEM・DER(.cer/.crt)・CSR・PKCS#7(.p7b)を読み、Subject・有効期限(残り日数)・SAN・公開鍵・署名アルゴリズム・SHA-256 フィンガープリントなどを一覧にします。チェーンの並び順と署名も確かめ、PEM と DER を変換できます。すべてブラウザの中で処理し、秘密鍵は読み込みません。

アップロードなし

エンコード・デコード(Encode / Decode Studio)

文字化けした %E3%81%82 や eyJ… のトークンを貼るだけで形式を自動判別して元に戻します。エラーは「何文字目の何が不正か」まで表示し、処理はすべてブラウザ内で完結します。

アップロードなし

OAuth / PKCE Studio(PKCE・認可 URL 作成)

PKCE の code_verifier を作るか貼り付けて検査し、S256 の code_challenge を計算します。認可リクエストの URL を組み立て、認可サーバーから戻った URL の state が作ったものと一致するかを確かめます。公開クライアント向けの仕組みで、client_secret は使いません。トークンの交換は通信を伴うため、curl のコマンドを表示するだけです。

アップロードなし

テキスト・コード Diff

変更前と変更後を貼り付けるかファイルをドロップするだけで、追加・削除された行と、行の中で変わった単語まで色分けして表示します。結果は unified 形式のパッチとしてコピー・保存でき、入力はブラウザの外へ出ません。

アップロードなし

UUID / ULID / NanoID / トークン生成

ページを開いた瞬間に UUID が 1 件生成済み。種類を選ぶだけで UUID v7・ULID・NanoID・ランダムトークンに切り替わり、最大 1 万件を .txt / .csv / .json で保存できます。既存の UUID や ULID を貼り付ければ、埋め込まれた時刻やバージョンも読み取れます。

アップロードなし

最終更新: