it

チェックサムの計算方法は?計算ツールと手順を解説!(計算式・コマンド・確認方法・IPv4・オフロードなど)

当サイトでは記事内に広告を含みます

チェックサムの計算方法を理解することは、ネットワーク技術やファイルの整合性管理において非常に役立つ知識です。

「チェックサムはどうやって計算するのか」「コマンドで確認できるのか」「IPv4のチェックサムはどう計算されているのか」という疑問をお持ちの方のために、本記事ではチェックサムの計算方法・具体的な手順・活用できるツールを詳しく解説していきます。

チェックサムの計算の基本原理

それではまず、チェックサムの計算がどのような原理に基づいているかについて解説していきます。

チェックサムの計算原理は「データの値を何らかの方法で集約して固定長の検証値を生成する」という考え方が根本にあります。

最もシンプルな方式はデータの全バイト値を加算し、その合計(またはその補数)をチェックサムとして使用する方法です。

用途によって計算方法は異なりますが、共通しているのは「同じデータからは必ず同じチェックサムが得られる」という一貫性と、「データが変化するとチェックサムも変化する」という検出能力の二点です。

計算方法の複雑さが上がるほど誤り検出能力が高まりますが、計算コストも増大するため用途に応じた選択が重要です。

チェックサムの計算方式の選択基準:計算速度が重要なリアルタイム通信には1の補数和(IPv4チェックサム)やCRC-32が適します。改ざん検出・セキュリティが重要なファイル配布・デジタル署名にはSHA-256などの暗号学的ハッシュが必要です。単純な整合性確認にはMD5(セキュリティ非重視)やCRC-32が一般的です。

加算型チェックサムの計算手順

最もシンプルな加算型チェックサムの計算を具体的な手順で確認します。

8ビット加算型チェックサムの計算例

データ:45, 00, 00, 3C(10進数)

合計:45 + 00 + 00 + 3C = 81(16進数)

チェックサム(1の補数):255 – 81 = 174 → 0xAE

受信側の検証:データ合計 + チェックサム = 255(オーバーフロー含め0になる)であれば正常

例:81 + 174 = 255 → 正常確認

1の補数を使う理由は、受信側での検証計算が「全バイトの合計が0xFF(8ビット)または0xFFFF(16ビット)になるかどうか」という単純な確認で済むためです。

1の補数和チェックサムはIPv4・TCP・UDPヘッダーで広く採用されている方式であり、ハードウェアでの高速実装が容易な点が採用理由の一つです。

IPv4ヘッダーチェックサムの計算方法

IPv4ヘッダーのチェックサム計算は16ビット1の補数和を用います。

IPv4チェックサムの計算手順

1. IPv4ヘッダー全体を16ビット(2バイト)ずつのワードに分割する

2. チェックサムフィールドを0に設定した状態で全ワードを加算する

3. 加算でキャリー(桁上がり)が発生した場合は下位16ビットに加算する(1の補数加算)

4. 最終的な合計の1の補数(ビット反転)がチェックサム値となる

受信側での検証

1. 受信したIPv4ヘッダー(チェックサムフィールドを含む)の全ワードを加算する

2. 結果が0xFFFF(全ビット1)であれば正常・それ以外はエラーと判定する

IPv4ではルーターがパケットを転送するたびにTTL(Time to Live)フィールドを減算するため、その都度チェックサムを再計算する必要があります。

IPv6ではヘッダーチェックサムが廃止されており、チェックサムの計算はICMPv6・TCP・UDPの上位層に任されています

これはIPv6ルーターの処理負荷軽減と、下位のデータリンク層(イーサネットFCSなど)での誤り検出への依存が背景にあります。

コマンドとツールでチェックサムを計算・確認する方法

続いては、実際にコマンドやツールを使ってチェックサム(ハッシュ値)を計算・確認する方法を確認していきます。

ファイルのハッシュ値確認はWindowsでもLinuxでも標準ツールで実行できます。

Windowsでのチェックサム計算コマンド

PowerShellでのハッシュ計算

SHA-256の計算

Get-FileHash “C:\Users\ファイルパス\sample.iso” -Algorithm SHA256

MD5の計算(整合性確認用途のみ)

Get-FileHash “C:\sample.zip” -Algorithm MD5

SHA-1の計算

Get-FileHash “C:\sample.exe” -Algorithm SHA1

コマンドプロンプトでの確認(certutil使用)

certutil -hashfile C:\sample.iso SHA256

certutil -hashfile C:\sample.zip MD5

PowerShellのGet-FileHashはMD5・SHA1・SHA256・SHA384・SHA512に対応しており、出力にはアルゴリズム名・ハッシュ値・ファイルパスが表示されます。

certutilコマンドはコマンドプロンプトから使用でき、スクリプトや古いシステムでの活用に適しています。

公式サイトが提示するSHA-256ハッシュ値とPowerShellの出力を目視または自動比較することで、ダウンロードファイルの安全性を確認できます。

LinuxでのチェックサムとMD5確認コマンド

Linuxでのハッシュ計算コマンド

SHA-256の計算

sha256sum sample.iso

SHA-1の計算

sha1sum sample.tar.gz

MD5の計算

md5sum sample.zip

チェックサムファイルによる一括検証(SHA-256)

sha256sum -c checksum.sha256

(配布元が提供するchecksum.sha256ファイルを使って自動検証する)

LinuxのshaXXXsumコマンドはほぼすべてのディストリビューションに標準搭載されており、ファイルのパスを引数として渡すだけで計算できます。

「-c」オプションは.sha256形式のチェックサムファイルを使って複数ファイルを一括検証できる便利な機能であり、大量のファイルの整合性をスクリプトで自動チェックする際に特に役立ちます

Pythonスクリプトでのハッシュ計算にはhashlibモジュールを使い、hashlib.sha256()でデータを読み込んでhexdigest()で16進数文字列として出力できます。

オンラインチェックサム計算ツールの活用

コマンドを使わずにチェックサムを計算したい場合は、オンラインのハッシュ計算ツールを活用できます。

ブラウザ上でファイルをアップロードまたはテキストを入力するだけで、MD5・SHA-1・SHA-256・CRC-32などのハッシュ値を即座に計算できるWebツールが複数公開されています。

ただし機密情報・個人情報を含むファイルをオンラインツールにアップロードすることはセキュリティ上のリスクがあるため、機密性の高いファイルのチェックサム計算はローカルのコマンドやツールを使用することが原則です。

テキスト文字列のハッシュ確認・学習目的での利用など、リスクが低い用途に限定してオンラインツールを活用しましょう。

CRC-32チェックサムの計算と確認

続いては、ファイル整合性確認やネットワーク通信で広く使われるCRC-32の計算方法を確認していきます。

CRC-32は32ビット出力のCRCであり、ZIPファイル・PNG・イーサネットFCSなどで標準的に採用されています。

CRC-32の計算の仕組み

CRC(巡回冗長検査)はデータを「多項式」として扱い、生成多項式(Generator Polynomial)による除算の余りをチェックサムとして使います。

CRC-32計算の概要

1. データをビット列として並べる

2. CRC-32の生成多項式(0x04C11DB7)を使ってモジュロ2除算を行う

3. 余りの32ビットがCRC-32チェックサムとなる

4. 実際の実装ではルックアップテーブルを使って高速計算する

Pythonでのシンプルな実装例(zlibモジュール使用)

import zlib

data = b”Hello, World!”

crc32 = zlib.crc32(data) & 0xFFFFFFFF

print(hex(crc32)) # 出力例:0xec4ac3d0

PythonのzlibモジュールはCRC-32計算をネイティブでサポートしており、1行でデータのCRC-32値を計算できます。

CRC-32はバーストエラー(連続したビット反転)の検出能力が高く、最大32ビットのエラーバーストを100%検出できるという優れた特性を持ちます。

ZIPファイルを展開する際に「CRC failed」エラーが発生した場合は、ZIPファイル内のCRC-32値と計算値が一致しないことを示しており、ファイルの破損または不完全なダウンロードが原因です。

チェックサムオフロードと計算への影響

前述のIPv4チェックサムオフロードについて、計算の観点から詳しく確認します。

チェックサムオフロードが有効な場合、OSがパケットを組み立てる時点ではチェックサムフィールドに仮の値(0や誤った値)が入っています。

実際のチェックサム計算はNIC(ネットワークインターフェースカード)の専用ハードウェアが送信直前に行うため、ソフトウェアからは「計算済み」のパケットしか見えません。

この仕組みによりCPUの計算負荷が軽減されますが、ソフトウェアでパケットをインターセプトした場合に未計算の値が見えてしまうことがトラブルの原因となります。

チェックサムオフロードを理解しておくことで、Wiresharkなどでのパケットキャプチャにおけるチェックサムエラー誤検出への適切な対処ができるようになります。

まとめ

チェックサムの計算は加算型・CRC・ハッシュ関数など方式によって異なり、用途に応じた計算方法を選択することが重要です。

IPv4ヘッダーのチェックサムは16ビット1の補数和を使用し、ルーターがTTLを更新するたびに再計算される仕組みになっています。

WindowsではPowerShellのGet-FileHashまたはcertutilコマンド、Linuxではsha256sum・md5sumコマンドで簡単にファイルのハッシュ値を計算・確認できます。

CRC-32はバーストエラー検出に優れた方式であり、ZIPファイルやイーサネットFCSで広く採用されており、Pythonのzlibモジュールで簡単に計算できます。

チェックサムオフロードの仕組みを理解することで、ネットワーク解析時のチェックサムエラー誤検出への適切な対処が可能となるでしょう。