CRC-32とは?
CRC-32(巡回冗長検査、32ビット) は、データの偶発的な変更を検出するために使用される高速なチェックサムアルゴリズムです。入力データの多項式除算に基づいて32ビットの値(8桁の16進数)を生成します。ネットワーク、ストレージデバイス、ファイル形式のエラーチェックにハードウェアおよびソフトウェアで一般的に実装されています。
CRC-32の動作原理
- 32ビットのレジスタをすべて1(0xFFFFFFFF)に初期化します。
- 各バイトをレジスタの最上位バイトとXORし、事前計算されたルックアップテーブルを参照して処理します。
- レジスタを8ビットシフトし、テーブルの値とXORします。
- すべてのバイトが処理されるまで繰り返します。
- レジスタを反転(ビット単位のNOT)してCRC-32値を取得します。
一般的な用途
- ZIP、gzip、PNGなどのファイル形式の整合性チェック
- Ethernet、PPPなどのネットワークプロトコル
- HDD、SSD、RAIDコントローラなどのストレージデバイス
- アーカイブの検証およびダウンロードの整合性チェック
チェックサムの例
Input | CRC-32 |
---|---|
Hello World | 4a17b156 |
password | 477dff2a |
test123 | c4b96aea |
(空) | 00000000 |
CRC-32と他のチェックサムおよびハッシュの比較
Algorithm | Output | 衝突耐性 | Speed |
---|---|---|---|
CRC-32 | 32ビット | ❌ 低い | ⚡ 非常に高速 |
MD5 | 128ビット | ❌ 破損している | ⚡ 高速 |
SHA-1 | 160ビット | ❌ 危殆化している | ⚡ 高速 |
SHA-256 | 256ビット | ✅ 安全 | 🚀 中程度 |
BLAKE3 | 256ビット | ✅ 非常に安全 | ⚡ 極めて高速 |
よくある質問
CRC-32は暗号用途に安全ですか?
いいえ。CRC-32はエラー検出用に設計されており、安全性のためではありません。意図的な衝突に対して脆弱です。
なぜ暗号ハッシュの代わりにCRC-32を使うのですか?
CRC-32ははるかに高速で偶発的なエラー検出には十分ですが、安全性が重要な用途には使用すべきではありません。
ファイルのダウンロードをどのように検証できますか?
ダウンロードしたファイルのCRC-32チェックサムを生成し、公開されている値と比較して整合性を確認します。