チェックサムとは?
チェックサムとは、ファイルやネットワークのパケットなどのデータのまとまりから計算される短い値で、データと一緒に保存または送信されます。後でもう一度計算して2つの値を比べると、破損や通信エラーによってデータが変わったかどうかが分かります。
更新日: 2026年9月24日
| チェックサム | 送信 | 受信 | 結果 |
|---|---|---|---|
| バイトの合計 (mod 256) | 60 | 60 | 一致 |
| CRC-32 | 6AD9BD02 | 6AD9BD02 | 一致 |
1ビットを反転すると、どちらのチェックサムも変わります。2文字を入れ替えた場合はバイトがすべて残っているので合計は同じです。順序に依存するCRC-32だけが気づきます。
UbuntuやDebianなどのLinuxディストリビューションは、インストール用イメージの隣に SHA256SUMS というファイルを公開しています。各行には64文字の文字列とファイル名が書かれています。ダウンロードが終わったら、受け取ったファイルに対してコマンドを1つ実行します。同じ文字列が表示されれば、何十億バイトもの中身がすべて無事に届いたということです。途中でビットが1つでも反転していれば、まったく違う文字列が出てきます。
この文字列がチェックサムです。データが変わると変化する、小さな要約です。
チェックサムの仕組みを順を追って
- 送信側が、データに対して1バイトずつチェックサムのアルゴリズムを実行し、短い結果を得ます。
- その結果は、データと一緒に送られるか保存されます。ネットワークのパケットのヘッダ、ZIPファイルの中の圧縮された各ファイルの隣、ダウンロードページなどです。
- 受信側が、実際に受け取ったデータに対して同じアルゴリズムを実行します。
- 2つの結果を比べます。等しければ、データはほぼ確実に変わっていません。違っていればデータは壊れていて、受信側はそれを拒否するか、もう一度要求するか、チェックサムエラーを表示します。
チェックサムは損傷を検出するだけで、どのバイトが変わったのかを示すことも、修復することもできません。修復には、CDやQRコードで使われているリード・ソロモン符号のような誤り訂正符号が必要です。
もっとも単純なチェックサムは、すべてのバイトを足し合わせ、合計の下位8ビットだけを残すものです。次のコードを実行して、この考え方がうまくいく場面と失敗する場面を確かめてください。
original sum= 78 crc32=a1628836
flipped sum= 80 crc32=a597580b
swapped sum= 78 crc32=59dbf74b
文字を1つ変えると合計が変わります。しかし2つの文字を入れ替えても合計は変わりません。足し算は順番を気にしないからです。そのため、バイトの合計は100ではなく10の支払いを通してしまいます。CRC-32(巡回冗長検査)はデータを1つの長い2進数として扱い、決まった33ビットの多項式で割ります。32ビットの余りはすべてのビットの位置に左右されるので、入れ替えも見つかります。上のデモでは、自分のテキストで試せます。CRC-32は、長さ32ビットまでの連続したエラー(バーストエラー)をすべて検出します。
よく使われるチェックサムのアルゴリズム
| アルゴリズム | サイズ | 目にする場面 |
|---|---|---|
| パリティビット | 1ビット | シリアル接続、パリティ付きメモリ |
| Luhnのチェックディジット | 1桁 | クレジットカード番号、IMEI番号 |
| インターネットチェックサム | 16ビット | IPv4、TCP、UDPのヘッダ |
| Adler-32 | 32ビット | zlibの圧縮形式 |
| CRC-32 | 32ビット | ZIP、gzip、PNG、Ethernetフレーム |
| MD5 | 128ビット | 古いダウンロードページ、重複ファイル検索ツール |
| SHA-256 | 256ビット | ソフトウェアのダウンロード、Linuxのイメージ、Bitcoin |
最初の5つが検出するのは事故であって、攻撃者ではありません。ファイルを書き換えた人は、数バイトを調整してCRC-32を再び一致させられます。MD5とSHA-256は暗号学的ハッシュ関数で、同じ出力になる2つの入力を見つけることが現実的に不可能になるよう設計されています。ただしMD5はすでに破られていて(2004年に衝突が公表されました)、SHA-1も同様です(2017年)。そのため、安全性が重要なダウンロードにはSHA-256かそれより強いものが使われます。偶然の破損を検出する目的なら、MD5は今でも十分に役立ちます。
チェックサムの確認方法
自分のコンピュータでは、どのオペレーティングシステムにも組み込みのコマンドがあります。
# Windows (PowerShell)
Get-FileHash ubuntu.iso -Algorithm SHA256
# macOS
shasum -a 256 ubuntu.iso
# Linux
sha256sum ubuntu.iso
出力を公式のダウンロードページにある値と比べます。大文字か小文字かは関係ありません。Pythonでは hashlib で同じ確認ができます。ファイルを少しずつ読むので、6 GBのファイルでもメモリに丸ごと載せる必要はありません。
a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a447
OK
hello world を hello World に変えてもう一度実行してみてください。チェックサムのすべての文字が変わり、最後の行が Checksum mismatch になります。
チェックサムエラーとは?
チェックサムエラーとは、チェックに失敗したという意味です。手元のデータから計算した値が、データと一緒に保存または送信された値と一致しません。データが変わったか、保存されているチェックサムが壊れたかのどちらかです。メッセージと対処法は、どこで表示されたかによって異なります。
起動時のCMOSやBIOSのチェックサムエラー
PCのファームウェア(BIOSまたはUEFI)は、起動順序や時計といった設定を小さなメモリに保存しています。このメモリは、コンピュータの電源プラグが抜かれている間も、ボタン電池(たいていはCR2032)によって保持されています。設定のチェックサムはその隣に保存されています。起動のたびにファームウェアがチェックサムを計算し直し、値が違っていれば CMOS Checksum Error - Defaults Loaded のようなメッセージを表示して工場出荷時の設定に戻ります。
よくある原因は、電池が弱っているか切れていることで、時計もリセットされる場合は特にそうです。設定の保存中の停電や、ジャンパでCMOSをクリアした場合も同じ結果になります。対処法は次のとおりです。
- 設定画面を開き(たいていはPCの起動中にDeleteキーかF2キー)、日付、時刻、変更していた設定を入力してから、保存して終了します(多くはF10キー)。メッセージが再び出なければ、一度きりの出来事です。
- 電源を完全に切ってから起動するたびにメッセージが出るなら、シャットダウンし、電源プラグを抜いて、CR2032の電池を交換します。
BIOS ROM checksum errorやMain BIOS checksum errorのように、メッセージがファームウェアそのものを名指ししている場合は、ファームウェアのイメージが壊れています。バックアップのBIOSチップを持つマザーボードは自動で復元します。そうでないものは、マザーボードのBIOS復旧機能を使うか、メーカーのサイトからファームウェアを書き込み直します。更新中に電源を切らないでください。
ダウンロード後のチェックサムの不一致
ファイルのSHA-256が、ダウンロードページにあるものと一致しない場合です。ファイルが不完全か壊れている(接続が途切れた、ディスクがいっぱいだった)、別のファイル(別のバージョンやCPUアーキテクチャ)のチェックサムと比べている、あるいは異なる2つのアルゴリズムを比べている、といった可能性があります。MD5の値は16進数32文字、SHA-256の値は64文字です。まれに、ファイルが改ざんされていることもあります。
アルゴリズムとファイル名を確認し、公式サイトからもう一度ダウンロードしてください。公式の配布元から取り直したファイルでも一致しないなら、実行してはいけません。パッケージマネージャはこの確認を自動で行います。ダウンロードしたパッケージが固定したハッシュと異なると、pipは THESE PACKAGES DO NOT MATCH THE HASHES と表示して停止します。
ZIP、RAR、7zの圧縮ファイルのチェックサムエラー
圧縮ファイルの形式は、各ファイルの元の中身のCRC-32を保存しています。展開するときにツールがそれを計算し直し、一致しなければWinRARは Checksum error、7-Zipは CRC Failed と報告します。暗号化された圧縮ファイルでは、パスワードが間違っていても同じメッセージが出ます。間違ったパスワードで復号すると、でたらめなデータになるからです。圧縮ファイルをもう一度ダウンロードし、分割された圧縮ファイル(.part1.rar、.part2.rar)のパートがすべてそろっていて同じアップロードのものであることを確認し、パスワードを入力し直してください。WinRARの「書庫を修復」コマンドは、リカバリレコード付きで作成された圧縮ファイルにもっとも効果があります。また「壊れたファイルを残す」オプションを使えば、正しく展開できた部分は保存できます。
ゲームやネットワークツールのチェックサムエラー
ゲームは自分のファイルのチェックサムを比べるので、途中で終わったアップデートや変更されたファイルはチェックに失敗します。Steamの「ゲームファイルの整合性を確認」は、チェックサムが一致しないファイルをすべてダウンロードし直します。Wiresharkで、自分のコンピュータが送信したパケットにチェックサムの警告が出ても、たいていは本当のエラーではありません。Wiresharkがパケットを取り込んだ後で、ネットワークカードがチェックサムを書き込んでいるからです。
よくある誤解
- 「チェックサムが一致すれば、ファイルは安全だと証明される」 証明されるのは、ファイルが公開された値と一致することです。攻撃者がWebサイトを乗っ取っていれば、両方を書き換えられます。だからこそ、プロジェクトはチェックサムのファイルに鍵で署名もしているのです。
- 「チェックサムで壊れたファイルを直せる」 チェックサムは損傷を検出するだけです。直すには、正しいコピーを手に入れるしかありません。
- 「チェックサムとハッシュは別物だ」 チェックサムは役割を表す言葉で、SHA-256のようなハッシュ関数は、その役割を果たせる道具の1つです。
次に読むページ
ハッシュ生成ツールでは、任意のテキストのMD5、SHA-1、SHA-256の値を計算できます。チェックサムは生のデータに対して働くので、実際に何が足し合わされているのかはバイトとは何かとビットとは何かで説明しています。データベースはディスクの破損を見つけるためにページのチェックサムを使っています。ハッシュテーブルの可視化では、データから計算される短い値の別の使い方を見られます。
よくある質問
SHA-256はチェックサムですか?
チェックサムエラーはどうすれば直せますか?
チェックサムエラーの原因は何ですか?
なぜチェックサムが必要なのですか?
チェックサムはどうやって生成しますか?
sha256sum file、macOSでは shasum -a 256 file、WindowsのPowerShellでは Get-FileHash file を使います。Pythonでは、hashlib.sha256(data).hexdigest() でSHA-256のチェックサムが、zlib.crc32(data) でCRC-32が得られます。