暗号と符号 13 · ストリーム暗号と LFSR — GF(2) 上の漸化式

Chapter 13

ストリーム暗号と LFSR — GF(2) 上の漸化式

ワンタイムパッドの夢と現実. 12 章で「ワンタイムパッドは完全に安全だが、鍵が長すぎて使えない」と分かった。

ならば——短い鍵から、長い「ランダムに見える」列を作れないか?

これがストリーム暗号の発想である。短い種(鍵)から擬似乱数列を生成し、それを平文と XOR する。 安全性は「その擬似乱数列が本物のランダムと区別できないこと」に懸かっている。

この章では、その最も基本的な生成器である LFSR を扱う。 LFSR は\(\mathrm{GF}(2)\)上の漸化式そのものであり、04・05 章の多項式論が直接使われる。 そして——重要なことに——LFSR 単独では暗号として破れる。その理由も導出する。

1. ストリーム暗号の枠組み

\[ C_i = P_i \oplus Z_i \]

\(Z_i\)は鍵\(K\)から生成される鍵ストリーム。復号は同じ\(Z_i\)をもう一度 XOR するだけ。

必須の要件: 同じ鍵ストリームを 2 度使ってはならない(12 章のワンタイムパッド再利用問題と同じ)。 そのため実用では鍵\(K\)に加えてIV / ノンス(毎回変わる公開値)を入力する。

2. LFSR (線形帰還シフトレジスタ)

構造

\(L\)個のビットを持つレジスタ。毎クロック:

  1. 最下位ビットを出力
  2. 全体を 1 ビットシフト
  3. 特定の位置(タップ)のビットの XOR を、空いた最上位に入れる

漸化式で書くと:

\[ \boxed{s_{n+L} = c_1 s_{n+L-1} \oplus c_2 s_{n+L-2} \oplus \cdots \oplus c_L s_n} \]

(\(c_i \in \{0,1\}\)がタップの有無。)

特性多項式

タップの構成を多項式で表す:

\[ f(x) = x^L + c_1x^{L-1} + \cdots + c_{L-1}x + c_L \]

これを特性多項式(または帰還多項式)という。

04 章の多項式論がそのまま適用できる. LFSR の振る舞いは、この多項式の性質で完全に決まる。特に周期が:

\(f(x)\)の性質周期
可約短くなる(初期値によっても変わる)
既約だが原始でない\(f\)の位数(\(2^L-1\)の約数)
原始多項式\(2^L-1\)(最大)

原始多項式を使ったときの出力を M 系列 (maximal length sequence) という。 「原始多項式なら\(x\)のべきが全非零要素を巡る」(04・05 章)ことが、 そのまま「レジスタの状態が全\(2^L-1\)通りを巡る」に対応している。

実例: L=4, f(x) = x⁴+x+1(原始多項式)

漸化式: \(s_{n+4} = s_{n+3} \oplus s_n\) … ではなく、多項式の対応から \(s_{n+4} = s_{n+1} \oplus s_n\)(タップは\(x\)と定数項)。

初期状態 1000 から始めると:

クロック状態出力
01000
101000
200100
310010
411001
501100
610110
701011
151000

15 クロック(\(2^4-1\))で元の状態に戻る = 最長周期

M 系列の統計的性質

1 周期(\(2^L-1\)ビット)の中で:

これらは「ランダムに見える」ための良い性質である. だから M 系列は通信の同期、GPS の測距符号、レーダー、スペクトラム拡散で広く使われる。 GPS 衛星が送る C/A コードは長さ 1023 の M 系列(Gold 符号)である。

ただし「統計的にランダムに見える」ことと「暗号的に安全」は全く別物である。次節でそれを見る。

3. LFSR はなぜ暗号として使えないのか

バーレカンプ・マッシー攻撃

定理: 長さ\(L\)の LFSR の出力を連続\(2L\)ビット観測すれば、 その LFSR の構成(タップと状態)が完全に決定できる。

なぜか: 漸化式\(s_{n+L} = \sum_i c_i s_{n+L-i}\)は、係数\(c_i\)に関する線形方程式である。 未知数は\(c_1,\dots,c_L\)の\(L\)個。\(2L\)ビットあれば\(L\)本の式が立ち、 03 章の掃き出し法で解ける。\(O(L^2)\)(バーレカンプ・マッシー法なら効率的)。

11 章と同じアルゴリズムがここに出てくる. RS 符号の復号では「シンドロームを生成する最短 LFSR を求める」ためにバーレカンプ・マッシー法を使った。 ここでは攻撃者が「鍵ストリームを生成する LFSR を求める」ために同じ手法を使う。

符号理論では味方、暗号では敵——同じ数学が立場によって役割を変える好例である。

帰結

\(L = 128\)の LFSR でも、256 ビット観測されれば終わり。 既知平文攻撃(平文と暗号文のペアが少しでも手に入る状況)で、鍵ストリームは即座に露見する。

根本原因は「線形性」。線形な仕組みは連立方程式で解ける。

4. 非線形化の工夫

LFSR を使いつつ線形性を壊す手法:

手法内容
非線形結合複数 LFSR の出力を非線形関数で混ぜるGeffe 生成器
非線形フィルタ1 つの LFSR の状態を非線形関数に通す
不規則クロックある LFSR の出力で別の LFSR のクロックを制御A5/1(GSM)、Shrinking 生成器
メモリ付き内部に繰り上がりを持つSummation 生成器

しかし、これらも多くが破られている.

相関攻撃(LFSR の出力と最終出力に統計的相関があると、各 LFSR を個別に攻撃できる)や 代数的攻撃(非線形関数を多変数連立方程式として解く)が有効なためである。

5. 現代のストリーム暗号

LFSR ベースを離れた設計が主流:

暗号構造用途
ChaCha20ARX(加算・回転・XOR)TLS、WireGuard、Linux の乱数
Salsa20ChaCha の前身
Trivium3 個の非線形シフトレジスタ軽量用途(eSTREAM 選定)
GrainLFSR + NFSRIoT 向け
RC4状態配列の交換廃止(偏りが発見され TLS から除外)

ChaCha20 が現代の標準である. 加算・ビット回転・XOR という単純な演算だけで構成され、

モバイル端末の HTTPS では ChaCha20-Poly1305 が広く使われている。

6. まとめ

項目内容
ストリーム暗号\(C = P \oplus Z\)、\(Z\)は鍵から生成
LFSR\(\mathrm{GF}(2)\)上の線形漸化式
最長周期の条件特性多項式が原始多項式(04・05 章)
M 系列の用途通信同期、GPS、レーダー(暗号以外では現役)
暗号としての致命傷線形なので \(2L\) ビットで完全に解読される
現代の主流ChaCha20(ARX 構造)