piapia123
ja

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(互換性が最も高い選択)
  • 鍵の種類を間違えた場合(公開鍵であるべきところに秘密鍵)は明確に指摘します(パディングエラーとして現れません)

使い方

  1. 操作を選びます:鍵ペアの生成 / 暗号化 / 復号 / 署名 / 検証
  2. 暗号化や署名のときは「公開鍵 / 秘密鍵」欄に PEM を貼り付けます(鍵生成では不要)
  3. 検証の場合は署名も該当欄に入力します
  4. 内容を入力欄に貼り付け、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 ビットはフリーズではなく計算中です。

関連ツール