Rabbit ストリーム暗号の復号
CryptoJS の Rabbit ストリーム暗号データ(パスフレーズ付き Salted__ Base64)、または 128 ビットの 16 進鍵と任意の 64 ビット IV による生の暗号文を復号します。
出力は Base64 の OpenSSL「Salted__」形式で、鍵と IV はパスフレーズから導出されます。CryptoJS.Rabbit.encrypt(text, passphrase) と同じ形式です。OpenSSL 自体は Rabbit をサポートしていません。
すべてブラウザ内で実行されます。データがアップロードされることはありません。
Rabbit 復号とは?
Rabbit ストリーム暗号で暗号化されたデータ(通常は CryptoJS.Rabbit.encrypt が生成したもの)を復号します。Base64 の U2FsdGVkX1… 文字列とパスフレーズ、または生の暗号文と 16 進の鍵・IV を指定してください。
Rabbit 復号の使い方
- 暗号化時と同じ 鍵の指定方法 を選びます。
U2FsdGVkX1…(「Salted__」)のデータなら パスフレーズ(OpenSSL 互換)、生の暗号文なら 生の鍵 + IV(16 進) です。 - パスフレーズ、または 16 バイトの 16 進鍵(IV を使った場合は 8 バイトの IV も)を入力します。
- 暗号文 を貼り付けて 復号 をクリックします。
例
U2FsdGVkX19PD1rihUsU44L3vJkKAmy580QhQw== (passphrase "secret")
Hello Rabbit
CryptoJS.Rabbit.encrypt("Hello Rabbit", "secret") の暗号文。
Rabbit 復号を使うべき場面
CryptoJS Rabbit を使うアプリケーションのデータの読み取りやデバッグに使ってください。正しいパスフレーズや鍵がなければ復号できません。
Rabbit 復号の仕組み
Salted__ ヘッダーからソルトを読み取り、16 バイトの鍵と 8 バイトの IV を再導出し(EVP_BytesToKey MD5 または PBKDF2-SHA256)、Rabbit の鍵ストリームを暗号文と XOR します。生の鍵モードでは、指定した鍵と IV をそのまま使います。ストリーム暗号にはパディングがないため、誤った鍵は無効な UTF-8 の出力として現れます。
一般的な使用例
- CryptoJS.Rabbit を使う Web アプリが保存した値を復号する
- 自分の Rabbit 実装が CryptoJS と一致するか確認する
- デバッグ中にテストデータを復元する
- Rabbit で暗号化したデータを AES に移行する
セキュリティ注意事項
Rabbit に実用的な解読法は知られていませんが、あまり使われておらず、完全性保護もなく、対応するライブラリも少ないです。新しいシステムには AES-GCM を使ってください。
よくある質問
「invalid UTF-8」エラーが出るのはなぜですか?
パスフレーズか鍵が間違っている可能性が高いです。Rabbit 自体はそれを検出できません。元のデータがバイナリなら、出力を Hex に切り替えてください。
暗号文に U2FsdGVkX1 の接頭辞がありません。
その場合、CryptoJS は鍵と IV を明示して呼び出されています。生の鍵 + IV(16 進) を選び、16 進で入力してください。
RabbitLegacy には対応していますか?
いいえ、標準の CryptoJS.Rabbit のバリアントのみ対応します。