RSA 鍵ペアジェネレーター
ブラウザ内でRSA鍵ペア(2048/4096ビット)をPEM/JWK形式で生成。秘密鍵はブラウザ外に出ません。
- ブラウザ内で処理
- データはブラウザ外に出ません
- 無料 · 登録不要
WeChat でスキャンしてシェア
例・詳しい説明・よくある質問 実際の出力つきの例、ほかのツールとの違い、よくある質問。
セキュリティに関する注意
- 秘密鍵は厳重に保管してください。秘密鍵を持つ人は誰でもメッセージを復号したり署名を偽造できます。
- 共有するのは公開鍵だけにしてください——公開鍵は公開されることを前提に設計されています。
- このツールはテスト・開発用途に適しています。本番環境では専用の鍵管理サービス(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認証フローで広く使われています。