JWK ⇄ PEM キーコンバータ
実際の Web Crypto API を使用して暗号キーを JWK 形式と PEM 形式の間で変換し、アルゴリズム/曲線/サイズをデコードし、RFC 7638 JWK サムプリントを計算します。
結果
JSON Web キー (JWK) と PEM エンコードされたキーは、JWT ライブラリ、TLS ツール、OAuth/OIDC 構成全体で同じように表示されますが、この 2 つを手動で変換するには、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 サムプリント - 厳密な辞書順でシリアル化された JWK の必須メンバーの SHA-256 ハッシュ (RSA の場合は e/kty/n、EC の場合は crv/kty/x/y、OKP/Ed25519/X25519 の場合は crv/kty/x)。この拇印は多くのシステムがキーの「子供」識別子として使用するもので、メンバーの順序を間違えると完全に異なるハッシュが生成されます。これはまさに手作業で実装した場合に起こりやすい間違いです。
すべてがブラウザ タブの crypto.subtle を介して実行されるため、秘密鍵マテリアルがデバイスから流出することはありません。変換のどの時点でも、サーバー、アップロード、外部 API 呼び出しは必要ありません。