CRC は、ファイルがアーカイブに追加された時点で、その内容から計算される短い数値です。指紋のような役割を果たし、後でファイルをチェックして、アーカイブから取り出されたものが追加したときとまったく同じであることを確認できます。CRC は cyclic redundancy check(巡回冗長検査)の略です。
どこから来たのか、どのファイルにあるのか
アーカイブにはCRCが含まれています。つまり、ZIPファイルと、ZIPを基盤とする多くの形式(.docx、.xlsx、.epub、.jar、.apk など)にはCRCがあり、RAR や 7z などの他の形式はそれぞれ独自のチェックサムを保持しているということです。.epub ファイルはCRCを内部に保存していても、レポートにCRCが表示されない場合があります。
圧縮プログラムは、ファイルの元の非圧縮データをもとに値を計算し、そのエントリと一緒に保存します。そのため、アーカイブ内の各メンバーはそれぞれ固有の CRC を持ちます。CRC を自分で選んだり入力したりすることはできず、あなたやあなたのコンピューターに関する情報でもありません。あくまでファイルのバイト列からのみ算出されます。
CRC を保存する目的は、後で行う比較のためです。アーカイブを展開するとき、プログラムは取り出した内容から再度 CRC を計算し、保存されている値と比較します。もし異なっていれば、WinZip、7-Zip、unzip などで見慣れた CRC エラーが表示されます。これは、展開されたファイルが元々追加されたファイルと一致していないことを意味します。途中でのどこかで損傷があった可能性を示しており、ダウンロードの中断、ディスク障害、中途半端なコピーなどが考えられます。アーカイブ内の他のファイルが正常でも、1 つのメンバーが壊れているだけでこのメッセージは表示されます。
その値がどのように表示されるか
ZIP は CRC-32 と呼ばれる方式を使っており、32 ビットの数値を生成します。通常は 0x8f3d2b1c のように 8 桁の 16 進数で表示され、一部のアプリは同じ値を長い 10 進数として表示します。単位はなく、値に良し悪しの尺度もありません。空のファイルや、データを持たないフォルダーのエントリは 0x00000000 と表示されます。
それが重要な理由
これは整合性を表すフィールドであり、内容が保存や転送を無事に通過したことを示す、アーカイブ自身の内蔵証拠です。メタデータレポートに CRC が載っていても、アーカイブに問題があることを意味するわけではありません。それは単にアーカイブ作成時に記録された値であり、実際のチェックは閲覧時ではなく展開時に行われます。
CRC には便利な副次的な使い方もあります。同じ内容からは必ず同じ CRC が生成されるため、CRC とサイズが同じ 2 つのエントリは、ほぼ確実に同一のファイルです。これにより、大きなアーカイブ内で重複ファイルを素早く見つけることができます。
CRC はセキュリティ機能ではありません。CRC は偶発的な損傷を検出するために設計されており、値が短いため、同じ CRC になるよう意図的に細工することも可能です。そのため、CRC が一致しているからといって、誰もファイルを改ざんしていない証拠にはなりません。その目的には SHA-256 のような暗号学的ハッシュが使われます。また、CRC 値は内容から算出されるため、異なる 2 つのアーカイブに同じファイルが含まれているかを判定する目的にも使えます。これはときどき役に立つことがあり、アーカイブを渡す前に覚えておく価値があります。