ツール
ガイド

RSA 暗号化 / 署名

暗号

Web Crypto による RSA-OAEP 暗号化と RSASSA-PKCS1-v1_5 署名。鍵ペア生成または PEM 鍵貼り付け。

100% クライアントサイド バックエンドなし
メッセージ
署名
鍵 (PEM)
出力
公開鍵 (PEM)
秘密鍵 (PEM)
このページの内容

RSA とは?#

RSA は非対称暗号です: 1 つの共有秘密ではなく、対になった鍵ペアで動きます。公開鍵は誰にでも配れます——その唯一の仕事はデータをロックし、署名を検証することです。秘密鍵はあなたの手元に留まり、公開鍵で暗号化されたデータをアンロックできる、あるいは誰もが検証できる署名を生成できる唯一のものです。この分割こそが、秘密を共有したことがない 2 者が機密メッセージを交換し、真正性を証明できるようにする仕組みです。

このページは、RSA が通常使われる 4 つの操作を、すべてブラウザのネイティブ Web Crypto エンジン経由で扱います:

  • 暗号化 / 復号 は RSA-OAEP(SHA-256 付き)——モダンで認証付きパディングの方式——を使います。公開鍵で暗号化した短いメッセージは、秘密鍵でのみ読み返せます。
  • 署名 / 検証 は RSASSA-PKCS1-v1_5(SHA-256 付き)——最も広く相互運用可能な署名方式であり、ほとんどの JWT や X.509 チェーンが今も使うもの——を使います。
  • 鍵生成 は 2048、3072、4096 ビットのペアを公開指数 65537 で生成し、標準的な PEM(公開鍵は SubjectPublicKeyInfo、秘密鍵は PKCS#8)として書き出します。

RSA は意図的に短いペイロードに限定されます。RSA-2048 と SHA-256 で暗号化できる最大のメッセージは約 190 バイトです。それ以上には共通鍵ツールを使い、その鍵を RSA で保護してください。

使い方#

  1. ペアを生成します。 鍵サイズ(2048 / 3072 / 4096)を選び、鍵ペアを生成をクリックします。2 つの読み取り専用ボックス——公開鍵と秘密鍵、どちらも PEM——が埋まります。それぞれを安全な場所にコピーしてください。秘密鍵は決して共有してはならないものです。
  2. モードを選びます: 暗号化、復号、署名、検証。
  3. モードに応じて正しい鍵を鍵フィールドに入れます:
    • 暗号化 → 公開鍵を貼り付け。
    • 復号 → 秘密鍵を貼り付け。
    • 署名 → 秘密鍵を貼り付け。
    • 検証 → 公開鍵を貼り付け。
  4. メッセージを入力します。検証では、署名フィールドに署名(base64)も貼り付けます。
  5. 実行します。ステータス行が結果を報告します——検証では、署名が有効か無効かを明示的に述べます。

主な特徴#

  • 1 つの鍵ペアで 2 つのアルゴリズム。 同じ PEM が OAEP 暗号化と PKCS#1 署名の両方に機能します。Web Crypto がインポート時にアルゴリズムを受け取るからです。
  • 標準 PEM 出力。 公開鍵は SPKI、秘密鍵は PKCS#8——すべての言語とプラットフォームがネイティブに読む形式です。
  • 65537 の公開指数。 普遍的に選ばれる値で、高速なほど十分に小さく、既知の弱点を避けるほど十分に大きいです。
  • 相互運用可能な署名。 RSASSA-PKCS1-v1_5 は、現実の JWT、コード署名、証明書チェーンが期待する形式です。
  • ゼロアップロード。 鍵生成、暗号化、署名はすべてブラウザ内でローカルに走ります。秘密鍵がサーバーに触れることはありません。

実例#

2048 を選んで鍵ペアを生成をクリックします。公開鍵ボックスは次のような形の PEM ブロックで埋まります:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyY7v...(lines of base64)
-----END PUBLIC KEY-----

秘密鍵ボックスはより長い -----BEGIN PRIVATE KEY----- ブロックで埋まります。ここで暗号化に切り替え、公開鍵を鍵フィールドに貼り付け、メッセージとして handshake: 0x4F2A と入力して実行します。出力は約 344 文字の単一の base64 塊です——まさに 256 バイトの RSA-2048 暗号文を base64 エンコードしたものです。

復号に切り替え、秘密鍵を鍵フィールドに貼り付け、その塊をメッセージフィールドに落として実行すると、元の handshake: 0x4F2A が戻ります。署名については、同じ流れを署名で行うと 344 文字の base64 署名が生成され、検証が公開鍵に対してそれを有効と確認します——メッセージの文字を 1 文字でも変えておけば、無効と報告します。

よくある質問#

なぜ RSA は短いメッセージしか暗号化できないのですか?#

RSA は鍵サイズを法とする数の上で動きます。RSA-2048 では 256 バイトのブロックがあり、OAEP パディングがそのうち 2 * hashLen + 2 バイト(SHA-256 では 98)を消費し、メッセージ自身には 190 バイトが残ります。これは意図的です——RSA はデータの一括転送ではなく、鍵と署名のためのものです。標準パターンは「ハイブリッド」です: 一括データを AES で暗号化し(共通鍵ツールを使う)、AES 鍵だけを RSA で暗号化します。

2048、3072、4096 ビットのどれですか?#

2048 は現在の基準であり、ほとんどの用途に依然として適切と見なされています。3072 は概ね 128 ビットの共通鍵強度に相当し、4096 は 10 年以上持たせたい鍵に対する保守的な選択です。1 段階上げるごとに、鍵生成とすべての操作で実際の時間がかかり、セキュリティの向上は漸減します。

暗号化と署名の違いは何ですか?#

暗号化は機密性に関するものです: 公開鍵がロックし、秘密鍵がアンロックします。署名は真正性に関するものです: 秘密鍵が署名を作り、公開鍵がそれを検証します。同じ鍵ペアを使いますが、異なるアルゴリズム(OAEP 対 PKCS#1)で、異なる問いに答えます——「誰でも読めるか?」対「この鍵の持ち主が本当にこれを作ったか?」。

生成や使用のとき、秘密鍵はどこかに送信されますか?#

いいえ。生成、暗号化、復号、署名、検証はすべて Web Crypto によってページ内で行われます。PEM ブロックはあなたのブラウザタブにしか存在せず、何も送信されません。本番の秘密鍵を扱う場合は、ウェブページに貼り付けるのではなく、自分が制御する環境で生成してください。