【しーあーるしー】

CRC(巡回冗長検査) とは?

最終更新:
💡 検査値を比べて、データの誤りを探す

データの誤り検出に使われるチェックサム方式。多項式の除算を利用して短い検査値を生成し、通信やストレージでデータの破損を検知する。

📌 このページのポイント
付いていたCRCと、再計算したCRCを比べる 送信側 データ CRC 受信側 データ CRC 検査値を計算 データに添える データから再計算 添付値と比較 送信 一致 誤りは検出されず 不一致 誤りを検出 一致しても、無破損や改ざんなしの保証ではない 再送・訂正は、CRCを使う側の仕組み
CRC値を同じ規則で計算・比較する例。不一致なら誤りを検出したことになりますが、一致しても見逃しがあり得て、CRCだけでデータを修復することもできません。
ひよこ ひよこ
CRCって何をするものなの?
ペンギン先生 ペンギン先生
データから短い検査値を計算して、一緒に送ったり保存したりする仕組みだよ。受け取る側や読む側が同じ規則で再計算し、付いていた値と比べて誤りを調べるんだ。
ひよこ ひよこ
普通のチェックサムとは違うの?
ペンギン先生 ペンギン先生
CRCもチェックサムの一種だけれど、単純な足し算ではなく多項式の計算を使うよ。連続したビットの誤りなどを検出するために設計されている。検出能力は多項式や検査値の長さ、データの長さなどによるので、どんな誤りでも見つかるわけではないんだ。
ひよこ ひよこ
多項式の計算って難しそう…
ペンギン先生 ペンギン先生
ビット列を0と1の係数の多項式として扱い、XORを使って計算するよ。普通の整数の割り算とは違うんだ。CRC-32の検査値は32ビットだけれど、計算に使う多項式や初期値などもそろえる必要がある。たとえばPNGの規格には、その規則が定められているよ。
ひよこ ひよこ
値が一致すれば、壊れていないってこと?
ペンギン先生 ペンギン先生
正確には「この検査では誤りを検出しなかった」だよ。違うデータが同じCRC値になることもあるし、CRCだけでは元のデータを復元できない。不一致のデータを捨てるか再送するかは、それを使う通信やアプリ側の仕組みなんだ。
ひよこ ひよこ
どんなところで使われてるの?
ペンギン先生 ペンギン先生
PNGやgzipなどで使われるよ。偶然の破損を見つける用途だけれど、攻撃者がデータとCRCの両方を変えられれば値を合わせられる。改ざんへの対策には、共有の秘密の鍵を使って検証するHMACなどの認証が必要になる。ハッシュ値を添えるだけでも、両方を書き換えられるなら十分ではないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「CRC」って出てきたら「検査値を比較して、偶然のデータ破損を見つける仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Cyclic Redundancy Check」 = 巡回冗長検査
💬 Cyclicは巡回、Redundancyは冗長性、Checkは検査の意味。巡回符号に基づき、検査用の情報を加えてデータの誤りを調べる仕組みだよ。

参考資料

← 用語集にもどる