# JWK / JWKS Studio（JWK・JWKS 確認）

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

- URL: https://tools.itlibra.com/ja/jwk-jwks-studio
- 端末内で処理・アップロードなし
- 最終更新: 2026-10-26

## 使い方

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. 結果はコピーするか保存します。新しく鍵を作る場合は、暗号・ハッシュツールを使います。

## こんなときに

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

## できること

### 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 など）はしません。ページを閉じると内容は消えます。


## 対応形式

### 入力

- 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 で出力できます。
