RC2とは:64ビット対称鍵ブロック暗号の定義・設計・鍵拡張・脆弱性
RC2とは?64ビット対称鍵ブロック暗号の定義・設計・鍵拡張と既知の脆弱性をわかりやすく詳解。歴史・攻撃手法も網羅。
暗号の分野において、RC2は対称鍵ブロック暗号です。1987年にロナルド・リヴェスト(Ronald Rivest)によって設計され、「RC」は"Rivest Cipher"の略で、しばしば"Ron's Code"とも呼ばれます。
基本仕様:RC2は可変長の鍵を受け取り、64ビット(4つの16ビットワード)ブロックを処理するブロック暗号です。設計上は合計18ラウンドを採用しており、ラウンドの型は「ミキシングラウンド」と「マッシングラウンド」の2種類です。
ラウンド構造と全体の流れ
ラウンドはフェイステル風の反復構造として配置され、18回のラウンドは以下のインターリーブ(織り交ぜ)シーケンスで実行されます。
- 5回のミキシングラウンドを行います。
- 1回のマッシングラウンドを行う。
- 6回のミキシングラウンドを行います。
- 1回のマッシングラウンドを行う。
- 5回のミキシングラウンドを行います。
各ミキシングラウンドは、64ビットブロックを構成する4つの16ビットワードに対して、加算(モジュラー演算)、排他的論理和(XOR)、およびビット回転(ローテーション)を組み合わせた非線形な「ミックスアップ」操作を複数回適用することで、十分な拡散と混合を達成します。マッシングラウンドでは、拡張された鍵(後述)の16ビットワードのうち1つを状態のワードに加算する(「マッシュ(混ぜ込む)」)ことで、鍵依存性を導入します(RFC 2268準拠の記述)。
鍵拡張(キー・スケジュール)
RC2の鍵拡張アルゴリズムは、供給された可変長の入力鍵(ユーザー鍵)を受け取り、内部で使用するための固定長の拡張鍵を生成します。最終的には64個の16ビットワード(合計128バイト相当)に展開され、ラウンドごとの鍵として利用されます。
鍵拡張は、入力鍵の各バイトを複雑に混ぜ合わせる手続きを含み、内部には256バイト長の定数テーブル(しばしば「pi-table」と呼ばれる置換表)を用いることで非線形性を導入します。さらに、輸出規制に対応するための「有効鍵長(effective key length)」パラメータを用いることで、意図的に鍵の有効ビット数を削減することが可能です(これにより例えば40ビット相当の強度に制限できます)。この機構がRC2を輸出規制下で採用しやすくしていました。
設計上の特徴
- ブロック長は64ビット(4×16ビットワード)で、ワード単位の操作を中心に設計されているため、16ビットや8ビット幅の環境にも実装しやすい。
- ラウンド関数は単純な算術・論理演算(加算、XOR、回転)を多用し、組み込み・ソフトウェア実装で効率的に動作することを意図している。
- 可変鍵長と有効鍵長の設定が可能で、用途や規制に応じた柔軟性がある。
安全性と既知の攻撃
設計当初は広く使われましたが、その後の暗号解析によりいくつかの深刻な弱点が明らかになっています。
- 関連鍵攻撃:Kelseyら(1997年)により、RC2は関連鍵攻撃に脆弱であることが示されました。報告された攻撃は約2^34の選択平文を用いることで可能なもので、設計上の鍵拡張とラウンド構造の組み合わせが利用されています(文献参照)。この種の攻撃は実運用での脅威となり得ます。
- 短い鍵長(輸出時の40ビットなど):RC2は40ビットなど短い有効鍵長で輸出されることがありましたが、現代では40ビット鍵は実用的に容易に解読されます。ブルートフォース攻撃に対して安全ではありません。
- ブロック長の制約:64ビットブロックは大量データを長時間同じ鍵で暗号化する用途では衝突(いわゆるバースデー攻撃)のリスクが高く、現代の推奨では128ビットブロック(AESなど)が好まれます。
歴史的背景と標準化・流出
RC2の開発はLotusがスポンサーとなり、Lotus Notesソフトウェア向けの輸出可能な暗号の検討が発端でした。開発段階でNSAによる評価といくつかの修正提案が行われ、Ronald Rivestはその提案の一部を取り入れました。交渉の結果、この暗号は1989年に輸出が承認されています。
当初、アルゴリズムの詳細は非公開でしたが、1996年1月29日にRC2のソースコードがユーズネットのフォーラムsci.cryptに匿名で投稿され、広く参照可能になりました。同様の経緯でRC4の実装も以前に公開されています。これらの流出が仕様の一般化と解析を促進しました。
実装上の注意点と推奨
現代のセキュリティ要求に照らすと、RC2はもはや推奨されません。特に次の点に留意してください。
- 短い有効鍵長(例:40ビット)を用いる実装は容易に破られるため避けること。
- 大量データの暗号化には64ビットブロックの制限から生じるリスクがあるため、AESなどの128ビットブロック暗号への移行を検討すること。
- 新規システムには、認証付き暗号モード(例:AES-GCMやChaCha20-Poly1305)を採用することが望ましい。
参考
RC2の正式な仕様と鍵拡張の詳細はRFC 2268に記載されています(RFCでは鍵拡張手順や内部定数などが具体的に説明されています)。また、関連鍵攻撃に関する解析はKelseyらの論文(1997年)などを参照してください。
まとめ:RC2は歴史的に重要な対称ブロック暗号であり、柔軟な鍵長や当時の輸出規制への対応が特徴でした。しかし、公開後の暗号解析や鍵長/ブロック長に関する現代の要求を鑑みると、現在は実運用での使用は推奨されず、より強固な最新アルゴリズムへの移行が望まれます。

RC2のミックスアップ変換;ミキシングラウンドは、「ミックスアップ」変換を4回適用することで構成されています。
質問と回答
Q:RC2とは何ですか?
A:RC2とは、1987年にRonald Rivestによって設計された共通鍵ブロック暗号です。64ビットのブロックサイズと18ラウンドの暗号化を使用します。
Q:「RC」とは何の略ですか?
A:「RC」は「Rivest Cipher」の略で、「Ron's Code」とも呼ばれます。
Q:RC2を使用する場合、何ラウンド行われるのですか?
A:RC2の場合、16回のミキシングラウンドと2回のマッシングラウンドの合計18ラウンドが行われます。
Q:鍵拡張アルゴリズムはどのように動作するのか?
A:鍵拡張アルゴリズムは、与えられた可変長入力鍵の各ビットに応じて、64(16ビットワード)からなる拡張鍵を生成します。
Q:RC2はどのような攻撃を受けやすいのでしょうか?
A:RC2は、234の選択平文攻撃を用いた関連鍵攻撃の影響を受けやすい。
Q:RC2の開発スポンサーは誰ですか?
A:RC2の開発は、Lotus Notesソフトウェアの一部としてエクスポートされるカスタム暗号を必要としていたLotus社によってスポンサーされたものです。
百科事典を検索する