RSA の暗号化・復号、署名検証と鍵生成
エンコード処理はすべてブラウザ内で完結します。データは送信されません
RSA の公開鍵で暗号化、秘密鍵で復号、あるいは署名と検証を行います —— すべてブラウザ内で完結し、鍵も内容も送信されません。4種類の PEM ヘッダーに対応します:`PUBLIC KEY` と `PRIVATE KEY`(X.509 / PKCS#8)、そして `RSA PUBLIC KEY` と `RSA PRIVATE KEY`(PKCS#1。古い OpenSSL や `ssh-keygen` の変換でよく見る形で、本ツールが ASN.1 の外殻を補ってからブラウザの暗号 API に渡します)。手元に鍵が無ければ「鍵ペアを生成」を使ってください:ローカルで新しいペアを作り、PKCS#8 の秘密鍵と SPKI の公開鍵 PEM を出力します。そのままファイルに保存できます。⚠️ 3点知っておいてください:暗号化は OAEP パディングを使います —— ブラウザ API は Bleichenbacher パディングオラクル攻撃のため PKCS#1 v1.5 の暗号化を意図的に提供していません。`PKCS1Padding` しか受け付けない旧システムとの接続にはサーバー側が必要です。RSA で暗号化できるデータはごく短く、2048 ビット鍵 + OAEP-SHA256 で上限 190 バイトです。長い内容にはハイブリッド暗号(AES 鍵を生成して本文を暗号化し、その鍵だけを RSA で暗号化)を使ってください。1024 ビットはすでに安全とは見なされておらず、旧システム互換のためだけに使ってください。新規には 2048 ビット以上を使ってください。
機能
- 5つの操作:鍵ペアの生成・暗号化・復号・署名・検証
- ローカルで 1024 / 2048 / 3072 / 4096 ビットの RSA 鍵ペアを生成し、PKCS#8 の秘密鍵と SPKI の公開鍵 PEM を出力
- 4種類の PEM ヘッダーに対応(PKCS#1 は ASN.1 の外殻を自動で補います)
- 改行・インデント・前後の空白を含む鍵もそのまま使えます
- 暗号文と署名は Base64 または16進数で出力
- 暗号化・復号は OAEP-SHA256、署名・検証は RSASSA-PKCS1-v1_5(互換性が最も高い選択)
- 鍵の種類を間違えた場合(公開鍵であるべきところに秘密鍵)は明確に指摘します(パディングエラーとして現れません)
使い方
- 操作を選びます:鍵ペアの生成 / 暗号化 / 復号 / 署名 / 検証
- 暗号化や署名のときは「公開鍵 / 秘密鍵」欄に PEM を貼り付けます(鍵生成では不要)
- 検証の場合は署名も該当欄に入力します
- 内容を入力欄に貼り付け、Ctrl/⌘ + Enter か「実行」を押します。3072 / 4096 ビットの鍵生成は数秒かかります
よくある質問
- PKCS#1 v1.5 での暗号化ができないのはなぜですか?
- ブラウザの Web Crypto が OAEP しか実装していないためです。これは意図的で、v1.5 の暗号化には Bleichenbacher パディングオラクル攻撃があります —— 「パディングが不正」と「パディングは正しいが中身が違う」という2種類の失敗の違いを観察することで、攻撃者が平文を段階的に復元できます。1998 年の発表以降も変種が現れ続けています。そのため仕様は暗号化からこれを除外し、パディングオラクルが生じない署名にのみ残しました。したがって本ツールでは `RSA/ECB/PKCS1Padding`(旧システムでよく見る書き方)は扱えません —— サーバーか専用ライブラリが必要です。
- RSA で暗号化できるデータはどれくらいですか?
- ごくわずかで、鍵長に比例します:RSA-OAEP + SHA-256 では 2048 ビット鍵で上限 190 バイト(256 から 32 バイトのハッシュ2つと 2 を引いた値)、4096 ビットで 446 バイトです。超えると失敗します。これは実装上の制限ではなく、RSA の数学的構造から来るものです。長い内容にはハイブリッド暗号が標準的な手法です:ランダムな AES 鍵で本文を暗号化し、その AES 鍵だけを RSA で暗号化します —— AES 鍵は 16 か 32 バイトなので、上限に十分収まります。
- 署名と暗号化は何が違い、どちらを使うべきですか?
- 暗号化は「他人に読めない」を解決します(相手の公開鍵で暗号化し、相手だけが秘密鍵で復号できます)。署名は「確かに本人が送り、改変されていない」を解決します(自分の秘密鍵で署名し、誰でもあなたの公開鍵で検証できます)。方向は逆です:暗号化は公開鍵で入れて秘密鍵で出す、署名は秘密鍵で入れて公開鍵で出す。実際のシステムでは両方使うことが多く、たとえば契約書の送付では相手の公開鍵で暗号化して機密性を、自分の秘密鍵で署名して出所を保証します。本ツールの2つのモードはまさにこの2つに対応するので、鍵を取り違えないよう注意してください。
- 「鍵ペアを生成」が出力するものは何ですか?鍵長はどれを選ぶべきですか?
- 標準的な PEM が2つ、つまり PKCS#8 の秘密鍵と SPKI の公開鍵です。ブラウザの暗号学的乱数源から生成し、この出力の中にだけ存在します。長さは 2048 ビットが現在の推奨値で、互換性と安全性のバランスが取れています。1024 ビットはすでに安全とは見なされておらず(分解コストが現実的な範囲に入っています)、旧システムとの互換のためだけに使ってください。3072 / 4096 は将来により強い一方、生成に数秒かかり、その後の演算も遅くなります。生成は純粋な計算です —— 実行後は少しお待ちください。3072 / 4096 ビットはフリーズではなく計算中です。
関連ツール
AES / DES
エンコードAES・DES・3DES でテキストを暗号化・復号します。CBC・GCM・CTR・ECB の4モードに対応し、鍵はテキスト・16進数・Base64 で指定できます。
ハッシュ計算
エンコードMD5・SHA-1・SHA-256・SHA-512 のダイジェストを計算します(旧システム向けの MD4・MD2 も可)。日本語も UTF-8 バイトで計算します。
Bcrypt
エンコードbcrypt のパスワードハッシュ($2y$)を生成、または既存のハッシュと照合します。コスト係数は変更でき、すべてブラウザ内で完結します。
Base64 変換
エンコードテキストを Base64 に変換し、Base64 からテキストへ戻します。日本語や中国語、emoji も UTF-8 として正しく処理。すべてブラウザ内で完結し、内容は送信しません。
URL エンコード
エンコード日本語や中国語、空白・記号を %XX にエスケープし、復元します。URL 全体とパラメータ値では方式が異なり、間違えるとリンクが開けません。ブラウザ内で処理します。
HTML 実体参照
エンコード< > & と引用符を HTML 実体参照に変換し、文字へ戻します。デコードは1回だけで、&lt; は山括弧ではなく < になります。すべてブラウザ内で処理します。