0

JWK ⇄ PEM 鍵変換

Web Crypto API を実際に使用して、暗号鍵を JWK と PEM 形式の間で変換し、アルゴリズム/曲線/サイズをデコードし、RFC 7638 JWK サムプリントを計算します。

🔒 ブラウザ内で完全に処理されます。ここに入力した内容はアップロードされません。

処理中... 0%
鍵を解析中
フォーマットを変換中
サムプリントを計算中
完了

結果

JSON Web Key(JWK)と PEM エンコード鍵は、JWT ライブラリ、TLS ツール、OAuth/OIDC 設定で交錯して現れますが、手動変換は DER 構造の base64 デコードや JSON の再整形を伴い、微妙な誤りが起こりがちです。このツールはテキスト操作ではなくブラウザの実際の Web Crypto API で変換を行います。貼り付けられた PEM ブロックは crypto.subtle.importKey('spki'|'pkcs8', ...) でインポートされ、exportKey('jwk', ...) で JWK として再出力されます。貼り付けられた JWK は importKey('jwk', ...) でインポートされ、SPKI または PKCS8 DER として再出力された後、正しい PEM ヘッダーでラップされます。ブラウザ自身が鍵素材を検証・デコードするため、不正な鍵や不適切なアルゴリズム選択は黙ってゴミを生成する代わりに、はっきりとエラーになります。

サポートされるアルゴリズムは、RSA(RSASSA-PKCS1-v1_5)、P-256/P-384/P-521 曲線上の EC、そしてブラウザが実装している場合は Ed25519 と X25519 です。Web Crypto における Ed25519/X25519 のブラウザ対応はエンジンによってまだ一貫していないため、ユーザーエージェント文字列から推測する代わりに、選択された曲線について実際の crypto.subtle.generateKey() プローブを実行し、ここではサポートされていない場合は作り物の結果を返さずに明示します。

すべての変換では、鍵の実際のメタデータもデコードされます。RSA 鍵では CryptoKey オブジェクトから直接モジュラスビット長とハッシュアルゴリズムが、EC および OKP 鍵では名前付き曲線が、そしてすべての鍵について RFC 7638 JWK サムプリント(必須メンバーを厳格な辞書順でシリアル化した SHA-256 ハッシュ、RSA は e/kty/n、EC は crv/kty/x/y、OKP/Ed25519/X25519 は crv/kty/x)が取得されます。このサムプリントは多くのシステムが鍵の「kid」識別子として使用するものであり、メンバー順序を誤るとまったく異なるハッシュが生成されます。これは手作りの実装が陥りやすい典型的なミスです。

すべての処理はご自身のブラウザタブ内で crypto.subtle を通じて実行されるため、秘密鍵素材がデバイスから外に出ることは一切なく、サーバーもアップロードも外部 API 呼び出しも変換の過程で関与しません。