RSA 鍵ペアジェネレーター

ブラウザ内でRSA鍵ペア(2048/4096ビット)をPEM/JWK形式で生成。秘密鍵はブラウザ外に出ません。

  • ブラウザ内で処理
  • データはブラウザ外に出ません
  • 無料 · 登録不要

鍵ペアを生成すると、ここに公開鍵と秘密鍵を表示します。

例・詳しい説明・よくある質問 実際の出力つきの例、ほかのツールとの違い、よくある質問。

セキュリティに関する注意

  • 秘密鍵は厳重に保管してください。秘密鍵を持つ人は誰でもメッセージを復号したり署名を偽造できます。
  • 共有するのは公開鍵だけにしてください——公開鍵は公開されることを前提に設計されています。
  • このツールはテスト・開発用途に適しています。本番環境では専用の鍵管理サービス(AWS KMS、HashiCorp Vaultなど)を使ってください。

出力の形式

PEM では、公開鍵は SubjectPublicKeyInfo(-----BEGIN PUBLIC KEY-----)、秘密鍵は暗号化なしの PKCS#8(-----BEGIN PRIVATE KEY-----)で出力されます。OpenSSL 3.6 はどちらもそのまま読めます(Private-Key: (2048 bit, 2 primes))。PKCS#1(-----BEGIN RSA PRIVATE KEY-----)しか受け付けない古いソフトウェアでは変換が必要です。コマンドは下にあります。

JWK(RFC 7517)はブラウザの Web Crypto API がエクスポートする形式です。RSA-OAEP で生成した公開鍵は次のとおりです(モジュラスは省略):

{
  "alg": "RSA-OAEP-256",
  "e": "AQAB",
  "ext": true,
  "key_ops": ["encrypt"],
  "kty": "RSA",
  "n": "6mqtvNrIisYdKt30jcmQN_za5t3OYQJ-8uhu_DkGEF5iZE4SrseP1CkxnD1yDEdgdD3E…"
}

RSASSA-PKCS1-v1_5 を選ぶと公開鍵の JWK は "alg": "RS256"、"key_ops": ["verify"] になります。出力に kid と use はありません。JWT のヘッダーは kid で鍵を指すため、JWKS エンドポイントで公開する前に kid を追加してください。

OpenSSH と OpenSSL で使う

次のコマンドは、ダウンロードしたファイルに対して macOS の OpenSSH と OpenSSL 3.6.1 で実行して確認しました。秘密鍵ファイルを他人が読める状態だと ssh-keygen は拒否する(「Permissions 0644 … are too open」)ので、先に権限を絞ります:

chmod 600 private-key.pem

# OpenSSH public key for ~/.ssh/authorized_keys
ssh-keygen -y -f private-key.pem
ssh-keygen -i -m PKCS8 -f public-key.pem      # same result from the public key

# PKCS#1 ("BEGIN RSA PRIVATE KEY") for older software
openssl rsa -in private-key.pem -traditional -out private-key-pkcs1.pem

# Inspect the key
openssl pkey -in private-key.pem -noout -text

鍵長とアルゴリズムの選び方

鍵長セキュリティ強度(NIST SP 800-57 Part 1 Rev. 5 表 2)
1024 ビット80 ビット、使用不可
2048 ビット112 ビット
3072 ビット128 ビット(このツールにはなし)
4096 ビット128 と 192 ビットの間

アルゴリズムの設定は、ブラウザが鍵に許す用途と JWK の記載を決めます。RSA-OAEP(SHA-256)は暗号化用、RSASSA-PKCS1-v1_5(SHA-256、JWT の RS256)は署名用です。PEM ファイルにはアルゴリズムの情報がないため、OpenSSL では同じ PEM 鍵をどちらの用途にも使えます。

制限

  • 鍵長は 2048 と 4096 のみで、公開指数は常に 65537(AQAB)です。
  • 秘密鍵の PEM はパスフレーズで暗号化されません。保護された場所に保存するか、openssl pkcs8 -topk8 -in private-key.pem -out encrypted.pem で暗号化してください。
  • OpenSSH 形式の秘密鍵、証明書、CSR は出力しません。ssh-keygen と openssl req を使ってください。
  • 生成はメインスレッドで行われ、4096 ビットは 2048 ビットより明らかに時間がかかります。

FAQ

鍵はサーバーに送信されますか?

いいえ。ブラウザ内蔵のWeb Crypto API(crypto.subtle.generateKey)を使って生成するため、データは一切外部に送信されません。「鍵はこのブラウザから出ません」バッジは技術的な保証です。

RSA-OAEPとRSASSA-PKCS1-v1_5の違いは?

RSA-OAEPは非対称暗号化(公開鍵でデータを暗号化、秘密鍵で復号)に使います。RSASSA-PKCS1-v1_5はデジタル署名(秘密鍵で署名、公開鍵で検証)に使います。

どのキーサイズを選ぶべきですか?

2048ビットは現在の業界最低基準で、ほとんどの用途に十分です。長期利用や高いセキュリティが求められる場合は4096ビットを選んでください。生成には少し時間がかかります。

PEM形式とは何ですか?

PEM(Privacy Enhanced Mail)は Base64 でエンコードした DER データを -----BEGIN/END----- の行で囲んだ形式で、ラベルが中身(PUBLIC KEY、PRIVATE KEY、CERTIFICATE)を示します。OpenSSL、nginx、多くの TLS ソフトウェアが鍵と証明書をこの形式で扱います。

JWK形式とは何ですか?

JWK(JSON Web Key)はRFC 7517で定義された鍵のJSON表現です。OAuth 2.0・OIDC・JWT認証フローで広く使われています。