RC5とは:可変パラメータとデータ依存回転を持つブロック暗号の定義
暗号の分野において、RC5は Ronald Rivest が 1994 年に設計した、設計が極めてシンプルかつパラメータ化された対称鍵のブロック暗号です。名称の "RC" は "Rivest Cipher" の略で、設計者の愛称を取って "Ron's Code" とも呼ばれます。RC5 の設計思想は、少数の基本的な演算(ワード単位の加算、排他的論理和 (Xor)、およびデータ依存の回転)を組み合わせて、実装が短く高速で、かつ解析研究に適した暗号を作ることにあります。
設計とパラメータ
RC5 は可変パラメータを持つのが特徴です。主なパラメータは次のとおりです。
- ワード長 w(ビット):一般に 16、32、64 など。ブロック長は 2w(例:w=32 のときブロック長は 64ビット)。ブロックサイズの可変性により、用途や性能要件に応じた選択が可能です。
- ラウンド数 r:通常は 0~255 の範囲で選べます。提案された標準的な値の一つは r = 12 です。
- 鍵長 b(バイト)/鍵サイズ(ビット):0 ~ 2040 ビット(0~255 バイト)まで可変です。提案例としては 128 ビット(16 バイト)がよく使われます。
一般的な表記は RC5-w/r/b(例:RC5-32/12/16)です。初期の提案での標準選択はブロックサイズ 64ビット(= 2×32)、鍵長 128ビット、ラウンド 12 回でした。
基本的な動作(概要)
RC5 の暗号化は、ワード長 w の 2 つのワード A, B を持つ構造をとります。主要ループは r ラウンドで、各ラウンドで次の操作を行います:
- A = A + S[2*i]
- B = B + S[2*i+1]
- A = ((A xor B) <<< (B mod w)) + S[2*i]
- B = ((B xor A) <<< (A mod w)) + S[2*i+1]
ここで「<<<」はワード長 w に対する左回転(rotate left)を表します。回転量は他のワードの下位ビットに依存する、いわゆるデータ依存回転であり、RC5 の最も特徴的な要素です。復号はこの手順を逆順に実行することで行います。暗号化・復号のルーチンは短く、C言語などで数行にまとめられる点も設計上の利点です(暗号化と復号のルーチンが短く書けるという点)。
鍵スケジュール
鍵のスケジュールは暗号本体よりも複雑で、入力鍵を 2(r+1) 個のサブキー群 S[] に展開します。展開は本質的に繰り返しの加算と回転を用いる混合処理であり、ここで使用される定数は設計上の「袖の中に何もない(nothing-up-my-sleeve)」数として、eと黄金比の二進展開に基づく定数が採用されています。
鍵スケジュールの主要手順(概略):
- ワード長 w に応じて 1 ワードあたりのバイト数 u = w/8 を決定し、鍵を小端(little-endian)で u バイトずつワード L[0..c-1] に詰める(c = ceil(b/u))。
- サブキー配列 S[0..t-1](t = 2(r+1))を初期化:S[0] = Pw、S[i] = S[i-1] + Qw(i=1..t-1)。ここで Pw, Qw は w に依存する定数で、前述の e と黄金比に基づく奇数化された値です(一般に Pw = odd((e − 2) × 2^w), Qw = odd((φ − 1) × 2^w) と定義される)。
- その後、S と L を相互に混ぜるループを 3×max(c,t) 回程度実行して、S の全要素と L の全要素を十分に混合する。具体的には A = B = 0、i = j = 0 として各ステップで
- A = S[i] = ROTL(S[i] + A + B, 3)
- B = L[j] = ROTL(L[j] + A + B, (A + B))
- i = (i + 1) mod t, j = (j + 1) mod c
この鍵スケジュールによって、鍵から得られるサブキー列 S[] は多数の加算・Xor・回転を通じて拡散され、鍵のわずかな違いが S 全体に広がるようになっています。
実装と性能
RC5 は基本演算がワード単位の加算・Xor・回転(通称 ARX 構成)だけであるため、ソフトウェア実装では非常に高速に動作します。回転がデータ依存であるため分岐やテーブル参照が不要で、パイプライン化やSIMDとの相性も良い場合があります。一方で、鍵スケジュールはやや重く、キーを頻繁に入れ替える用途では鍵展開コストを考慮する必要があります。
セキュリティと解析
RC5 の設計とシンプルさは暗号解析の対象として研究者の関心を集めました。データ依存回転を含む ARX 構造に対しては、差分攻撃や回転暗号解析(rotational cryptanalysis)など、独自の解析手法が提案されています。ラウンド数やワード長、鍵長の選択によって安全性は大きく変わります。
- 鍵幅に依存する基礎的な安全性はブルートフォース攻撃に依存します。鍵長が十分に長ければ総当たり解読は現実的ではありません。
- しかし多くの研究が RC5 の短縮ラウンドバージョン(r を小さくした実装)に対する効果的な攻撃を示しており、選ぶパラメータによっては実用的な攻撃が可能です。
- 設計の後、派生設計である RC6 が AES コンテストに提出されるなど、RC5 の思想はその後のブロック暗号設計にも影響を与えました。
用途と歴史的背景
RC5 は学術的な研究対象としての側面が強く、設計の簡潔さから教育・解析用によく用いられました。また RC5 は RSA 社(設計者の Rivest が関係する組織)により広められ、多くの実装例やベンチマーク報告があります。RC5 を対象とした分散鍵探索プロジェクトなども行われ、パラメータ選択の重要性が示されました。
まとめると、RC5 は可変パラメータとデータ依存回転を特徴とするシンプルで柔軟なブロック暗号です。設計が明快で解析研究の題材になりやすいため、用途に応じたパラメータ選択(特に鍵長とラウンド数)の検討が重要です。
暗号解析
12 ラウンドの RC5 (64 ビットブロック) は、244 の選択された平文を用いた差分攻撃の影響を受けやすい。18-20 ラウンドが十分な防御として提案されています。
このアルゴリズムの特許を持つ RSA Security は RC5 で暗号化された暗号文を破るために 10,000 米ドルの賞金を提供していたが、2007 年 5 月をもってこれらのコンテストは中止された。これらの課題の多くはDistributed.netによって組織された分散コンピューティングを利用している。Distributed.netは56ビットと64ビットの鍵で暗号化されたRC5メッセージをブルートフォースし、現在は72ビットの鍵の解読に取り組んでいる。現在のレート(2008年11月12日現在)では、このプロジェクトを完成させるには、可能性のある全ての鍵をテストするのに約1,000年かかるという。
質問と回答
Q:RC5とは何ですか?
A:RC5は、1994年にRonald Rivestによって設計されたシンプルな共通鍵ブロック暗号です。
Q:「RC」とは何の略ですか?
A:「RC」は「Rivest Cipher」、または「Ron's Code」の略です。
Q:RC5のパラメータは何ですか?
A:RC5のパラメータには、可変ブロックサイズ(32、64、128ビット)、可変キーサイズ(0~2040ビット)、可変ラウンド数(0~255)があります。当初の提案では、ブロックサイズ64ビット、鍵サイズ128ビット、ラウンド数12ラウンドでした。
Q: アルゴリズムの一般的な構造は?
A:アルゴリズムの一般的な構造は、Feistelのようなネットワークです。
Q:鍵のスケジュールはどの程度複雑か?
A:鍵のスケジュールはより複雑で、2進数展開を数字のソースとする本質的に一方通行の関数を用いて鍵を展開します。
Q: RC5が暗号解読者にとって魅力的なのはなぜか?
A:アルゴリズムのシンプルさと、データ依存のローテーションという新規性が、RC5を暗号解読者にとって魅力的な研究対象としています。