暗号と符号 11 · リード・ソロモン符号 — QR コード・CD・宇宙通信の主役

Chapter 11

リード・ソロモン符号 — QR コード・CD・宇宙通信の主役

最も広く使われている誤り訂正符号. CD の傷、QR コードの汚れ、ボイジャー探査機からの信号、DVD、地上デジタル放送、 RAID-6、分散ストレージ——すべてリード・ソロモン (RS) 符号が守っている。

1960 年、MIT リンカーン研究所の Irving Reed と Gustave Solomon がわずか 5 ページの論文で発表した。 当時は復号アルゴリズムが無く実用にならなかったが、 1968 年にバーレカンプ・マッシー法が現れて一気に実用化した。

強さの理由は 2 つ:

  1. MDS 符号である(06 章のシングルトン限界で等号)——冗長を 1 ビットも無駄にしていない
  2. バイト単位で扱うので、バースト誤りに極めて強い

1. 構成

パラメータ

\(\mathrm{GF}(q)\)(通常\(q = 2^8 = 256\)、つまり 1 シンボル = 1 バイト)上で:

\[ n = q - 1 = 255, \qquad k = n - 2t, \qquad d_{\min} = 2t+1 = n-k+1 \]

シングルトン限界\(d \le n-k+1\)で等号 → MDS 符号

訂正能力:

生成多項式

\(\alpha\)を\(\mathrm{GF}(q)\)の原始元として:

\[ \boxed{g(x) = \prod_{j=1}^{2t}(x - \alpha^{j}) = (x-\alpha)(x-\alpha^2)\cdots(x-\alpha^{2t})} \]

BCH(10 章)と同じ「連続する\(2t\)個の根」だが、係数が\(\mathrm{GF}(q)\)なので最小多項式を取る必要がない (\(\alpha^j\)自身が\(\mathrm{GF}(q)\)の元なので\(x-\alpha^j\)がそのまま使える)。 だから\(\deg g\)がちょうど\(2t\)になり、無駄が出ない——これが MDS になる理由である。

符号化

CRC と同じ組織符号形式:

\[ T(x) = x^{2t}m(x) + \left[x^{2t}m(x) \bmod g(x)\right] \]

データの後ろに\(2t\)個の検査シンボル(パリティバイト)を付ける。

2. なぜバースト誤りに強いのか

これが RS 最大の実用的価値である.

RS はシンボル(1 バイト)単位で誤りを数える。 1 バイトの中で 1 ビット壊れようが 8 ビット全部壊れようが、どちらも「1 シンボル誤り」である。

たとえば RS(255,223)(\(t=16\))は 16 シンボル訂正できる。これは:

ビット単位の符号(ハミングや BCH)で 128 ビット連続の誤りを訂正しようとすると、 桁違いに大きな冗長が必要になる。 「誤りが固まって起きる」という現実の性質を、シンボル化によって味方につけているわけである。

インターリーブとの組み合わせ

さらに強くするために、複数の符号語をばらして交互に並べる(インターリーブ)。

長いバーストが来ても、各符号語から見れば「ぽつぽつと数シンボル」に散らばるので、 それぞれの訂正能力内に収まる。

CD の CIRC (Cross-Interleaved Reed-Solomon Code) はこれを 2 段構えで行い、 最大 4000 ビット(約 2.4 mm)の連続傷を訂正できる。

3. 復号アルゴリズム(この章の本体)

受信語\(r(x) = T(x) + e(x)\)から誤りを特定して除去する。

ステップ 1: シンドローム計算

\[ S_j = r(\alpha^j) = e(\alpha^j) = \sum_{l=1}^{\nu} Y_l X_l^j \qquad (j=1,\dots,2t) \]

全部 0 なら誤り無しとして終了。

ステップ 2: 誤り位置多項式 Λ(x) を求める

\[ \Lambda(x) = \prod_{l=1}^{\nu}(1 - X_l x) = 1 + \Lambda_1 x + \cdots + \Lambda_\nu x^\nu \]

キーとなる関係式(ニュートンの恒等式)の導出:

\(\Lambda(X_l^{-1}) = 0\)(定義より)。両辺に\(Y_l X_l^{j+\nu}\)を掛けて\(l\)について和を取る:

\[ \sum_{l} Y_l X_l^{j+\nu}\left(1 + \Lambda_1 X_l^{-1} + \cdots + \Lambda_\nu X_l^{-\nu}\right) = 0 \]

各項を展開すると\(\sum_l Y_lX_l^{j+\nu-i} = S_{j+\nu-i}\)なので:

\[ \boxed{S_{j+\nu} + \Lambda_1 S_{j+\nu-1} + \cdots + \Lambda_\nu S_j = 0} \]

これは\(\Lambda\)の係数に関する連立一次方程式である(\(j=1,\dots,\nu\))。 未知数\(\nu\)個、式\(\nu\)本。有限体上の連立方程式なので、03 章の掃き出し法で解ける。

03 章で「有限体の上では実数と同じ手順で連立方程式が解ける」と強調した理由がここで回収される. 誤り訂正の核心は、結局のところ有限体上の線形代数である。

バーレカンプ・マッシー法

上の連立方程式を直接解く(ガウス消去、\(O(t^3)\))よりも効率的な方法がある。 上の式は「線形帰還シフトレジスタ (LFSR) が\(S_1,S_2,\dots\)を生成する」という形をしている。 その最短の LFSR を求める問題に読み替えると、\(O(t^2)\)で解ける。

アルゴリズムの骨子:

  1. \(\Lambda(x)=1\)、\(L=0\)(現在の次数)から開始
  2. 各シンドローム\(S_j\)について、現在の\(\Lambda\)が予測する値とのズレ(discrepancy)\(\Delta\)を計算
  3. \(\Delta \neq 0\)なら、過去の\(\Lambda\)を使って補正
  4. 必要なら\(L\)を増やす

13 章の LFSR と同じ数学がここに出てくる. 暗号(乱数生成)と誤り訂正(復号)という無関係に見える 2 つが、 「線形帰還シフトレジスタ」という同一の対象を、片や作る側、片や推定する側から扱っている。 ちなみに「短い LFSR で生成できてしまう」ことは、暗号にとっては弱点である(13 章)。

ステップ 3: チェン探索(誤り位置の特定)

\(\Lambda(x)=0\)の根を、\(x = \alpha^{-i}\)(\(i=0,1,\dots,n-1\))と総当たりで探す。 \(\Lambda(\alpha^{-i})=0\)なら位置\(i\)が誤り。

(総当たりだが、有限体の要素は\(n\)個しかないので\(O(nt)\)で終わる。 ハードウェアでは全位置を並列評価できる。)

ステップ 4: フォニー・アルゴリズム(誤り値の計算)

誤り評価多項式\(\Omega(x)\)を

\[ \Omega(x) = \left[S(x)\Lambda(x)\right] \bmod x^{2t}, \qquad S(x) = \sum_{j=1}^{2t}S_j x^{j-1} \]

と定義すると、誤り値は

\[ \boxed{Y_l = \frac{X_l\Omega(X_l^{-1})}{\Lambda'(X_l^{-1})}} \]

(\(\Lambda'\)は形式的微分。標数 2 では偶数次の項が消えるので計算が簡単。)

導出のあらすじ: \(\Omega\)と\(\Lambda\)の定義から \(\Omega(x) = \sum_l Y_l X_l \prod_{p\neq l}(1-X_px)\)と書ける。 \(x = X_l^{-1}\)を代入すると\(l\)以外の項が消え、 分母の\(\Lambda'(X_l^{-1}) = -X_l\prod_{p\neq l}(1-X_pX_l^{-1})\)と組み合わせると上式が出る ∎

ステップ 5: 訂正

\[ c(x) = r(x) - \sum_l Y_l x^{i_l} \]

(\(\mathrm{GF}(2^m)\)なので引き算は XOR。)

4. 実例: QR コードの RS 符号

QR コードは\(\mathrm{GF}(2^8)\)、既約多項式\(x^8+x^4+x^3+x^2+1\)(0x11D)、原始元\(\alpha=2\)を使う。

誤り訂正レベル冗長率復元可能な汚れ
L7%約 7%
M15%約 15%
Q25%約 25%
H30%約 30%

QR コードの真ん中にロゴを載せられるのはこのため. レベル H なら約 30% が欠けても復元できるので、中央にロゴを置いても読み取れる。 「壊れることを前提に、あらかじめ冗長を持たせておく」という設計思想の勝利である。

5. RS 符号の応用一覧

分野符号備考
CDCIRC (RS(32,28) + RS(28,24))2 段インターリーブ
DVDRS-PC (208,192)+(182,172)積符号
QR コードRS over GF(256)4 段階のレベル
ボイジャー探査機RS(255,223) + 畳み込み符号連接符号
地上デジタル放送RS(204,188)外符号
RAID-6RS(2 パリティ)消失訂正
分散ストレージRS(k+m, k)Erasure Coding

6. まとめ

項目内容
構成\(g(x)=\prod_{j=1}^{2t}(x-\alpha^j)\)、\(\mathrm{GF}(2^8)\)上
最適性MDS(\(d=n-k+1\)、冗長に無駄なし)
訂正能力誤り\(t\)個 / 消失\(2t\)個
強みシンボル単位なのでバースト誤りに極めて強い
復号シンドローム → BM 法 → チェン探索 → フォニー
数学的基盤GF(2^8)(05 章)+ 有限体上の線形代数(03 章)

これで第 II 部(誤り検出・訂正)は完了である。次章から暗号に入る。 第 I 部で作った代数——特に\(\mathrm{GF}(2^8)\)と合同算術——が、再び主役として登場する。