Last modified: Wed Feb 28 22:45:14 JST 2007

CRC32の解説

CRC32.exe は ISO 3309 で規定され、 RFC 2083 にサンプルコードがあります。 efg's Mathematics Projects -- CRC Calculator にも詳しい解説があります。この CRC32.exe はこれを Borland C でコンパイルしたで物す。

CRC を使えば、ファイルが転送中に通信エラーで壊れたり、ファイルをすり替えられた場合に検出できますので、解説したいと思います。

国産の有名なダウンローダーの Iriaでも CRC は使用されています。

CRC32 を GUI 操作で扱えるプログラムもありますが、この CRC32.exe は 32 ビットの CRC を計算するだけの至ってシンプルな CUI のプログラムです。バッチファイルから使いたいといった用途にはこちらの方が簡単かもしれません。

使い方

CRC32.exe をダウンロードしてください。そしてコマンドプロンプトで

CRC32 CRC32.exe
とすると

File     Bytes      CRC-32         Filename
----  -----------  --------  --------------------
  1         58880  fd1195b9  CRC32.exe
となったでしょうか?

この様にして、ファイルの CRC 値を計算できます。

もしこのサイトが改竄されたら?

その場合 (あるいは、偽サイトに誘導された場合) は、 CRC32.exe とその CRC 値の両方が改竄される可能性があります。しかし、この CRC32.exe はベクターさんのサイトに掲載していただいておりますので、そうなると、私のサイトとベクターさんのサイト、及びそのミラーサイトを見比べれば改竄がバレます。 この辺の詳しい解説は小島 肇さんのサイトの「その情報って本物? あるいは、なぜ未だにこうなのか」 (PDF ファイル) に詳しく書かれています。

CRC で十分なの?

計算上は CRC32 においては、異なるファイルの CRC 値が偶然に一致する確率は約4億分の1(16の8乗)ですが、CRC32 に限らず、ハッシュ値に意図的に衝突を起こす攻撃方法が知られています。

ファイルの配布に MD5 (Message Digest 5) 値を掲げる事でチェックする場合が多いですが、 MD5 も弱点がある事が明らかになってツールも公開されていますので、「CRC32 では不十分だ」というなら、MD5 もやめて SHA-1 (Secure Hash Algorithm) を使うべきですが、今や SHA-1 も衝突が見つかったらしいという報道があります。それを改良したとするSHA256も、いま何かを開発中なら、迷わずSHA256を選択しようという意見から、向こう5年以内に欠陥規格と見なされるのではないかとの強い疑念を持っているという意見まであります。際限が無い気もします。

CRC32 は暗号の一部として用いられるというよりは、通信路における誤り検出を考えた物で、計算も MD5 や SHA-1 より早いです。改竄してハッシュ値も一致させるようなファイルを作成される事まで考えるか、そこまで疑っても仕方ない、ダウンロードの途中で壊れていない事がチェックできればいいと考えるか、です。そういう用途である場合ですとか、それに何より、ハッシュ値が CRC32 で表示されている場合は、このプログラムも使ってみてくださいね。