RC4(ARCFOUR)とは:Rivestのストリーム暗号—仕組み・WEP/TLSでの脆弱性解説
RC4(ARCFOUR)の仕組みとWEP/TLSでの脆弱性を図解と実例で分かりやすく解説。攻撃手法・対策・安全性評価も丁寧に紹介。
暗号技術では、RC4(ARC4またはARCFOURとも呼ばれ、Alleged RC4の意味で後述)は、最も一般的なソフトウェアストリーム暗号の1つです。セキュア・ソケット・レイヤー(SSL)(インターネット・トラフィックを保護するため)やWEP(無線ネットワークを保護するため)のような一般的なプロトコルで使用されています。
RC4 はシンプルで素早いことで知られていますが、出力キーストリームの開始部分が削除されていなかったり、1つのキーストリームが2回使用されていたりすると、攻撃が起こりやすくなります。
RC4は、1987年にRSA SecurityのRon Rivest氏によって作成されました。正式名称は「Rivest Cipher 4」ですが、RCの略語は「Ron's Code」の略としても知られています(RC2、RC5、RC6も参照)。
RC4は最初は企業秘密として作成されたが、1994年9月にCypherpunksのメーリングリストにその説明が投稿された。それはすぐにsci.cryptニュースグループに投稿され、そこからインターネット上の多くのウェブサイトに投稿されました。コードは、その出力がライセンスされたRC4を使用してプロプライエタリなソフトウェアのそれと一致したので、本物であることが確認されました(偽物ではありません)。アルゴリズムが知られているため、もはや企業秘密ではありません。しかし、「RC4」という名称は商標登録されています。RC4は、商標上の問題を避けるため、「ARCFOUR」または「ARC4」(Alleged RC4の意)と呼ばれることが多いです(RSAがアルゴリズムを公式に発表したことがないため)。無線カード用のWEPやWPA、TLSなど、いくつかの一般的に使用されている暗号化プロトコルや規格の一部となっています。
このような幅広いアプリケーションでの使用を可能にした2つの主な理由は、そのスピードとシンプルさです。ソフトウェアとハードウェアの両方でRC4を使用すると、開発が非常に簡単になります。
RC4暗号化アルゴリズムは、キースケジューリングアルゴリズム(KSA)を使用して、異なるキー長、通常は40ビットから256ビットの間で開始されます。これが完了すると、疑似ランダム生成アルゴリズム(PRGA)を使用して暗号化されたビットのストリームが作成されます。
RC4 は多くの点で安全な暗号のために暗号家によって設定された基準を逸脱しており、RC4 を攻撃する方法が多く存在するため、新しいアプリケーションでの使用は推奨されていません。キーストリームから最初の1キロバイトのデータを削除することで、セキュリティを多少向上させることができます。
RC4の仕組み(要点)
RC4は内部状態として256バイトの配列 S と、2つの1バイトのインデックス i, j を持つ単純なストリーム暗号です。暗号処理は大きく2段階に分かれます。
- KSA(Key-Scheduling Algorithm):与えられたキー(任意長)から初期状態配列 S を生成します。典型的な鍵長は40ビットから256ビット(5〜32バイト)です。
- PRGA(Pseudo-Random Generation Algorithm):S を更新しながら疑似乱数バイト(キーストリーム)を出力します。出力は平文とのXORで暗号化/復号に使われます(対称)。
簡潔な擬似コード(概念説明):
- KSA:
- S[i] = i for i = 0..255
- j = 0
- for i = 0..255: j = (j + S[i] + key[i mod keylen]) mod 256; swap(S[i], S[j])
- PRGA:
- i = 0; j = 0
- while generating bytes: i = (i + 1) mod 256; j = (j + S[i]) mod 256; swap(S[i], S[j]); output = S[(S[i] + S[j]) mod 256]
主要な脆弱性と歴史的経緯
RC4は設計がシンプルな分、様々な解析により複数の脆弱性が見つかっています。主な問題は次の通りです。
- 初期キーストリームのバイアス:出力ストリームの先頭には統計的な偏り(バイアス)が存在することが知られており、これを放置すると平文や鍵に関する情報が漏れる可能性があります。Mantin & Shamir などの研究で指摘され、後続の実用攻撃につながりました。
- キーストリームの再利用(キー/IVの再利用):同じキー(または同じ鍵とIVの組合せ)で複数メッセージを暗号化すると、相互にXORして平文の情報が得られます。これはストリーム暗号全般の致命的な欠点です。
- KSAに由来する弱キー(WEP特有の問題):KSAとIVの結合方法に設計上の欠陥があり、特定のIVが出現すると鍵の一部が統計的に漏れることを利用した攻撃(Fluhrer, Mantin, Shamir:FMS攻撃)が知られています。
WEPでの脆弱性(具体例)
無線LANの古い規格であるWEPは24ビットのIV(Initialization Vector)をRC4の鍵に連結して使用していました。このIVが短く頻繁に再利用されるため、以下の問題が発生しました。
- IV空間が小さい(2^24)ため、短時間でIVが衝突(再利用)する。
- WEPはIVを平文で送信するため、攻撃者は同一キーに対する多数のRC4出力を収集できる。
- FMS攻撃およびそれに続く改良攻撃により、収集した多数のパケットから秘密鍵(WEPキー)を統計的に回復できる。
結果としてWEPは事実上破られ、現在は使用が強く非推奨です。WPA/WPA2のCCMP(AES)など、より安全な方式へ移行すべきです(WEPは廃止推奨)。
TLS/HTTPSでのRC4の問題
TLSでは、過去にRC4が別の攻撃(CBCモードのパディングを狙った攻撃など)を回避する代替として使われた時期がありました。しかし、RC4自体のキーストリームのバイアスを利用した攻撃が実用的であることが示され、TLSにおけるRC4の使用は撤回されました。
- 2013年以降の研究(例:AlFardanら)は、TLSでのRC4使用下での平文復元攻撃が現実的であることを示しました。
- これを受け、IETFはRC4をTLSから削除する動きを進め、最終的にRFC 7465(2015年)でTLSにおけるRC4の禁止が勧告されました。
既知の攻撃の種類(概略)
- FMS攻撃:WEPで利用された、特定IVを利用した鍵バイトの推定を行う攻撃。
- PT attack(偏り利用攻撃):初期のキーストリームバイアスを多数の接続から統計的に解析して平文を復元する攻撃。TLSに対して実用化された例もある。
- キーストリーム再利用攻撃:同じキーストリームを使った2つの暗号文のXORで平文の組合せ情報が得られる。
回避策と現在の推奨
- 新規実装ではRC4を使用しない:RC4は現在では非推奨であり、TLSや無線通信など新しいシステムでは使用すべきではありません。
- TLSではAEADを使う:AES-GCM、ChaCha20-Poly1305などのAEAD(Authenticated Encryption with Associated Data)を使用してください。これらは機密性と整合性を同時に提供します。
- 無線ではWPA2/WPA3の利用:WEPは破られているため使わない。WPA2(AES-CCMP)またはWPA3を使用すること。
- RC4-dropNは限定的な緩和策:出力の最初のNバイト(例:256、512、1024)を捨てるRC4-dropNは一部のバイアスを緩和しますが、完全な安全性を保障するものではありません。
- 既存システムの移行:互換性のためにRC4を残しているシステムは、早急に安全な暗号スイートへ移行する計画を立てるべきです。
実装上の注意点
- 同じ鍵・IVの組合せで二度暗号化しない。IVが短いプロトコルでは特に注意。
- 可能な限り暗号ライブラリの最新の安全勧告に従う。多くのライブラリはRC4をデフォルトから削除または非推奨にしています。
- 脆弱性の解説や攻撃論文は実運用に役立つ具体的な移行指針も示すため、運用者はそれらの最新情報を追うこと。
まとめ
RC4は設計がシンプルで高速なため広く使われましたが、初期出力のバイアスやKSA周りの欠陥、IV再利用問題などにより多くの実用的攻撃が可能になっています。結果として、現代の安全基準ではRC4の使用は推奨されず、TLSでは廃止され、無線の分野でもWEPは完全に廃棄されています。新しい実装や既存システムの更新では、AES-GCMやChaCha20-Poly1305のような堅牢なアルゴリズムへの移行を強く推奨します。
RC4ベースの暗号システム
- WEP
- WPA
- BitTorrent プロトコルの暗号化
- マイクロソフトのポイントツーポイント暗号化
- セキュアソケットレイヤー(オプション
- セキュアシェル(オプション)
- リモートデスクトップクライアント(RDC over RDP)
- Kerberos (オプション)
- SASL 機構ダイジェスト-MD5 (オプション)
- Gpcode.AK, 2008年6月初旬、Microsoft Windows用のコンピュータウイルスで、RC4とRSA-1024暗号化で文書を隠蔽することで、文書を人質にして身代金を要求してきます。
暗号システムが"(optionally)でマークされている場合、RC4はシステムが使用するように設定できるいくつかの暗号のうちの1つです。
関連ページ
質問と回答
Q:RC4とは何ですか?
A:RC4(ARC4またはARCFOURとも呼ばれ、Alleged RC4の意味)は、Secure Sockets Layer(SSL)やWEPなどの一般的なプロトコルで使用されるソフトウェアストリーム暗号の一つです。
Q:RC4は誰が作ったのですか?
A: RC4は、1987年にRSA Security社のRon Rivest氏によって作成されました。
Q: このアルゴリズムはどのようにして公開されたのですか?
A:1994年9月にCypherpunksメーリングリストに投稿され、その後、インターネット上の多くのWebサイトに拡散され、公開されました。
Q:RC4は商標登録されているのか?
A:はい、「RC4」という名称は商標登録されています。
Q: RC4が広く使われるようになった2つの理由は何ですか?
A:RC4がこれほど広範囲に利用されている理由は、その速度とシンプルさの2つです。ソフトウェアでもハードウェアでも、RC4の利用は極めて容易である。
Q:暗号化アルゴリズムはどのように動作するのですか?
A:暗号化アルゴリズムは、キースケジューリングアルゴリズム(KSA)を用いて、通常40~256ビットの異なる鍵長で開始します。これが完了すると、擬似ランダム生成アルゴリズム(PRGA)を用いて暗号化されたビットのストリームが作成されます。
Q:RC4は新しいアプリケーションでも安全だと考えられているのでしょうか?
A:いいえ、攻撃する方法がたくさんあるため、新しいアプリケーションでの使用は推奨されません。
百科事典を検索する