Rabbit ストリーム暗号の復号

CryptoJS の Rabbit ストリーム暗号データ(パスフレーズ付き Salted__ Base64)、または 128 ビットの 16 進鍵と任意の 64 ビット IV による生の暗号文を復号します。

Rabbit はマイナーなストリーム暗号で、完全性保護がなく、ライブラリのサポートも少ないです。新しいアプリでは AES-GCM を推奨します。

出力は Base64 の OpenSSL「Salted__」形式で、鍵と IV はパスフレーズから導出されます。CryptoJS.Rabbit.encrypt(text, passphrase) と同じ形式です。OpenSSL 自体は Rabbit をサポートしていません。

すべてブラウザ内で実行されます。データがアップロードされることはありません。

Rabbit 復号とは?

Rabbit ストリーム暗号で暗号化されたデータ(通常は CryptoJS.Rabbit.encrypt が生成したもの)を復号します。Base64 の U2FsdGVkX1… 文字列とパスフレーズ、または生の暗号文と 16 進の鍵・IV を指定してください。

Rabbit 復号の使い方

  1. 暗号化時と同じ 鍵の指定方法 を選びます。U2FsdGVkX1…(「Salted__」)のデータなら パスフレーズ(OpenSSL 互換)、生の暗号文なら 生の鍵 + IV(16 進) です。
  2. パスフレーズ、または 16 バイトの 16 進鍵(IV を使った場合は 8 バイトの IV も)を入力します。
  3. 暗号文 を貼り付けて 復号 をクリックします。

例

入力
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 のバリアントのみ対応します。

他のカテゴリを見る