RC4 暗号化(レガシー)
RC4(ARC4)ストリーム暗号でテキストを暗号化。OpenSSL 互換のパスフレーズまたは 16 進の生の鍵を使えます。レガシー互換とテストベクター用途に限った機能です。
出力は Base64 の OpenSSL「Salted__」形式です(8 バイトのランダムなソルト+暗号文)。鍵と IV はパスフレーズとソルトから導出されるため、同じテキストでも毎回結果が変わります。同等のコマンド:
OpenSSL と同様に、パスフレーズから 128 ビットの RC4 鍵を導出します。CryptoJS.RC4 はパスフレーズ使用時に 256 ビット鍵を使うため、その出力はここでは復号できません。
openssl enc -rc4 -md md5 -a -A -provider legacy -provider default -k '…'すべてブラウザ内で実行されます。データがアップロードされることはありません。
RC4 暗号化とは?
WEP、初期の TLS、多くのファイル形式で使われたストリーム暗号 RC4(ARC4、ARCFOUR とも呼ばれます)でデータを暗号化します。RC4 はデータを鍵ストリームと XOR するため、出力は入力と同じ長さになります。
RC4 暗号化の使い方
- パスフレーズ(OpenSSL 互換) を選んでパスフレーズを入力するか、生の鍵 + IV(16 進) を選んで 1〜256 バイトの鍵を 16 進で入力します(RC4 に IV はありません)。
- 平文 を入力または貼り付けます。
- 暗号化 をクリックし、出力のエンコーディング で Base64 か Hex を選びます。
- 暗号文をコピーします。
例
Raw key 4b6579 ("Key"), plaintext "Plaintext", Hex output bbf316e8d940af0ad3
古典的な RC4 のテストベクター。
RC4 暗号化を使うべき場面
古いソフトウェアとの相互運用や、RC4 のテストベクター(RFC 6229)の確認に使ってください。新しい暗号化には絶対に RC4 を使わないでください。鍵ストリームの先頭バイトから鍵の情報が漏れ、完全性チェックもありません。
RC4 暗号化の仕組み
RC4 は鍵から 256 バイトの置換表を作り(鍵スケジューリング)、入力 1 バイトごとに鍵ストリーム 1 バイトを生成して平文と XOR します。生の鍵モードでは入力した鍵のバイト列(1〜256 バイト)をそのまま使います。パスフレーズモードでは、openssl enc -rc4 と同様に、パスフレーズとランダムなソルトから 16 バイトの鍵を導出し(EVP_BytesToKey MD5 または PBKDF2-SHA256)、Salted__ 形式で出力します。暗号化と復号は同じ操作です。
一般的な使用例
- Key/Plaintext → BBF316E8D940AF0AD3 のような RC4 テストベクターを検証する
- ARC4 を使うレガシーアプリケーション向けのデータを作成する
- WEP や TLS の RC4 が破られた理由を学ぶ
-
openssl enc -rc4の出力を再現する
セキュリティ注意事項
RC4 は破られています。鍵ストリームには強い統計的偏りがあり、TLS では RFC 7465 で禁止されています。完全性保護もありません。レガシーデータにのみ使ってください。
よくある質問
パスフレーズで作った CryptoJS.RC4 の出力を復号できないのはなぜですか?
CryptoJS はパスフレーズから 256 ビットの RC4 鍵を導出し、OpenSSL は 128 ビットの鍵を導出します。このツールは OpenSSL に従います。生の鍵なら両者は同じ結果になります。
RC4 は IV を使いますか?
いいえ。そのため、2 つのメッセージで同じ鍵を使い回すと致命的です。2 つの暗号文を XOR すると鍵ストリームが打ち消されます。パスフレーズモードは毎回ランダムなソルトを使うため、これを避けられます。
対応する OpenSSL コマンドは?
openssl enc -rc4 -md md5 -a -A -provider legacy -provider default -k <passphrase> です(OpenSSL 3 ではレガシープロバイダーが必要です)。