RC4(アールシーフォー)とは | 意味や読み方など丁寧でわかりやすい用語解説
RC4(アールシーフォー)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
アールシーフォー (アールシーフォー)
英語表記
RC4 (アールシーフォー)
用語解説
RC4(アールシーフォー)は、共通鍵暗号方式の一つであり、特にストリーム暗号に分類される暗号アルゴリズムである。1987年にロナルド・リベストによって開発され、当初はRSA Security社(現在のRSA Laboratories)の企業秘密として扱われていたため、正式名称は「Rivest Cipher 4」からRC4と名付けられた。しかし、1994年に匿名でインターネット上にアルゴリズムのソースコードが公開されたことで、その詳細が広く知られることとなった。その単純な構造と高い処理速度から、かつてはSSL/TLS(Secure Sockets Layer/Transport Layer Security)におけるHTTPS通信、無線LANのセキュリティプロトコルであるWEP(Wired Equivalent Privacy)やWPA(Wi-Fi Protected Access)のTKIP(Temporal Key Integrity Protocol)など、幅広い用途で利用された。しかし、その後の研究により複数の脆弱性が発見され、現在では安全な利用は推奨されておらず、ほとんどの現代的なシステムでは使用が停止されている。
RC4はストリーム暗号として動作し、鍵ストリームと呼ばれる擬似乱数列を生成し、これを平文と排他的論理和(XOR)演算することで暗号化を行う。復号は暗号化と全く同じ鍵ストリームを生成し、暗号文とXOR演算することで元の平文を復元する。この鍵ストリームの生成がRC4の核心部分であり、主に二つのアルゴリズムから構成される。一つは鍵スケジューリングアルゴリズム(Key-Scheduling Algorithm, KSA)であり、もう一つは擬似乱数生成アルゴリズム(Pseudo-Random Generation Algorithm, PRGA)である。
KSAは、RC4で使用する内部状態を初期化する役割を担う。具体的には、0から255までの数値が格納された256バイトの配列S(S-boxと呼ばれることもある)を用意し、S[i] = i と初期値を設定する。次に、与えられた秘密鍵をこの配列Sと複雑に混ぜ合わせる。秘密鍵の各バイトを繰り返し利用し、S配列の要素を入れ替える操作を256回繰り返すことで、配列Sを鍵に依存したランダムな状態にシャッフルする。このシャッフル操作は、内部ポインタiとjを用いて行われる。ポインタjは、S[i]と秘密鍵のバイト、そして過去のjの値に基づいて更新され、S[i]とS[j]の要素が交換される。このプロセスにより、S配列は秘密鍵によって一意に決定される複雑な初期状態となる。
KSAによって初期化されたS配列を用いて、PRGAが鍵ストリームバイトを順次生成する。PRGAもまた、二つの内部ポインタiとjを用いる。PRGAの各ステップで、まずiを1ずつ増加させる(256に達すると0に戻る)。次に、jにS[i]の値を加算し、その結果を256で割った余りを新たなjとする。そして、S[i]とS[j]の要素を入れ替える。この入れ替え操作の後、S[i]とS[j]を足し合わせた値を256で割った余りをインデックスとして、そのインデックスが指すS配列の要素S[S[i]+S[j] mod 256]が、一つの鍵ストリームバイトとして出力される。この鍵ストリームバイトが、平文のバイトとXOR演算されることで暗号文が生成される。この一連のプロセスを、暗号化したいデータ長だけ繰り返す。
RC4の大きな特徴は、そのアルゴリズムの単純さに起因する高い処理速度であった。当時のハードウェアリソースが限られた環境においても、高速に動作するため、多くのシステムで採用された。しかし、この単純さが後に致命的な脆弱性をもたらすこととなる。
RC4の主要な脆弱性の一つは、鍵ストリームの統計的な偏りである。特に、鍵スケジューリングアルゴリズムによって初期化された直後のPRGAから出力される鍵ストリームの最初の数バイトには、ランダム性が低い、つまり特定のバイト値が出現しやすいという偏りが存在することが発見された。この偏りは、暗号化されたデータから平文の一部を推測される可能性につながる。例えば、WEPでは短い初期化ベクトル(IV)と固定された秘密鍵を組み合わせてRC4を使用していたが、IVの再利用が頻繁に発生したため、同一の鍵とIVの組み合わせが繰り返され、鍵ストリームの重複や偏りが悪用されることで秘密鍵の推測が可能となる攻撃(フロック・アタックなど)が成功した。
さらに、TLS/SSLにおけるRC4の使用においても、鍵ストリームの偏りを悪用した攻撃が発見された。特に、RC4 Bar Mitzvah AttackやRC4 NOMORE Attackといった攻撃は、多数の暗号化された通信を収集・分析することで、特定の平文(例えばCookie情報)を高い確率で復元できることを示した。これらの攻撃は、HTTPSでRC4が使用されている場合に、通信の盗聴者が繰り返し同じ平文が暗号化されるのを観察することで、その統計的な偏りから情報を抽出できることを証明した。
また、RC4には関連鍵攻撃や状態回復攻撃の可能性も指摘されている。関連鍵攻撃とは、複数の秘密鍵が関連性を持つ場合に、それらの鍵を用いた暗号文から秘密鍵や平文を推測する攻撃である。状態回復攻撃とは、十分な量の鍵ストリームが得られた場合に、PRGAの内部状態(S配列とポインタi, jの値)を推測し、それ以降の鍵ストリームを予測可能にする攻撃である。これらの攻撃は、特定の条件下でRC4の安全性に深刻な影響を与える可能性があった。
これらの脆弱性を受けて、IT業界全体でRC4の利用停止に向けた動きが加速した。インターネット技術の標準化を推進するIETF(Internet Engineering Task Force)は、RFC 7465でTLSにおけるRC4暗号スイートの使用を禁止した。TLSのバージョン1.2ではRC4のサポートは任意とされたが、TLS 1.3では完全に廃止され、RC4をサポートする暗号スイートは含まれていない。無線LANにおいても、WEPは脆弱性が明らかになったため、WPA2やWPA3といったよりセキュアなプロトコルへの移行が推奨されており、WPA1でRC4を使用していたTKIPも、AESを基盤としたCCMP(Counter Mode with CBC-MAC Protocol)へと置き換えられた。
結論として、RC4はかつて広く利用された高速なストリーム暗号であったが、その設計の単純さに起因する複数の深刻な脆弱性が発見されたため、現在では安全な暗号アルゴリズムとは見なされていない。システムエンジニアを目指す初心者にとっては、過去の主要な暗号アルゴリズムとしてその歴史と動作原理、そして何故利用が非推奨となったのかの理由を理解することは重要である。新たなシステムを設計する際には、AES(Advanced Encryption Standard)やChaCha20といった、より堅牢で現代のセキュリティ要件を満たす暗号アルゴリズムを選択すべきである。