秘密鍵による RSA 復号
RSA の暗号文(Base64 または 16 進)を PEM 秘密鍵で復号。RSA-OAEP SHA-256、OAEP SHA-1、PKCS#1 v1.5 に対応し、鍵やパディングの誤りは分かりやすいエラーで通知します。
推奨されるパディングは OAEP です。MGF1 には同じハッシュを使います(Web Crypto や openssl pkeyutl -pkeyopt rsa_oaep_md と同じ)。
すべてブラウザ内で実行されます。データがアップロードされることはありません。
RSA 復号とは?
PEM 形式の秘密鍵(PKCS#8 の BEGIN PRIVATE KEY または PKCS#1 の BEGIN RSA PRIVATE KEY)で RSA の暗号文を復号します。SHA-256 または SHA-1 の RSA-OAEP とレガシーな PKCS#1 v1.5 パディングに対応し、OpenSSL、Web Crypto、Java、Node.js の出力と一致します。
RSA 復号の使い方
- 秘密鍵 (PEM)(暗号化されていないもの)を貼り付けるか、テスト用の鍵ペアを生成(2048 ビット) をクリックして試します。
- 暗号化に使われた パディング を選びます。
- 暗号文 を貼り付け、そのエンコーディングとして Base64 か Hex を選びます。
- 復号 をクリックします。平文がバイナリ(AES 鍵など)なら出力を Hex に切り替えます。
例
Ciphertext from Node.js `crypto.publicEncrypt` (RSA-OAEP, oaepHash sha256) of "Hello RSA", with the matching 2048-bit PKCS#8 private key
Hello RSA
RSA 復号を使うべき場面
自分のコードが生成した暗号文の確認、テストデータの復号、プラットフォーム間の相互運用の検証に使ってください。本番の秘密鍵をブラウザに貼り付けるのは避け、テスト用の鍵を使ってください。パスワード保護された秘密鍵は、先にパスフレーズなしで書き出す必要があります。
RSA 復号の仕組み
秘密指数でパディング済みのメッセージ m = cᵈ mod n を復元し(CRT による最適化あり)、パディングを取り除いて検査します。OAEP では選択した SHA-256 または SHA-1 に対して MGF1 マスクとラベルハッシュを検証し、PKCS#1 v1.5 では 00 02 のヘッダーと区切りを検証します。暗号文の長さはモジュラスとちょうど同じ(2048 ビット鍵なら 256 バイト)である必要があります。鍵、パディング、ハッシュのいずれかが一致しなければ、誤った出力ではなく復号エラーになります。
一般的な使用例
- ブラウザ側の RSA-OAEP 出力がサーバーの鍵で復号できるか確認する
- ハイブリッド暗号のテストで RSA によりラップされた AES 鍵を復号する
- Java と Node.js の間での OAEP SHA-1 と SHA-256 の不一致を診断する
- レガシーシステムの PKCS#1 v1.5 データを復号する
セキュリティ注意事項
鍵とメッセージはブラウザ内でのみ処理されます。自分で管理していないウェブサイトに本番の秘密鍵を貼り付けないでください。代わりにテスト用の鍵ペアを生成してください。
よくある質問
「復号に失敗しました」と出ます。何が問題ですか?
多くは、パディングや OAEP のハッシュが一致していない(SHA-1 と SHA-256)、暗号文が別の鍵ペアのもの、またはコピー中に壊れた場合です。まずもう一方の OAEP ハッシュを試してください。
鍵が BEGIN ENCRYPTED PRIVATE KEY で始まります。
パスワード保護された鍵には対応していません。テスト用のコピーを openssl pkey -in key.pem -out plain.pem で変換し、暗号化されていない鍵の扱いには注意してください。
暗号文の長さのエラーで 256 バイトである必要があると出ます。
RSA の暗号文は常にモジュラスと同じ長さです。Base64 文字列全体を貼り付けたか、入力のエンコーディング(Base64 か Hex)が正しいか確認してください。