md5sum / sha256sum 入門 - チェックサムで改ざん・破損を検証する
この記事で学べること
- チェックサム(ハッシュ) が何のためにあるのかが腑に落ちる
sha256sum/md5sumで ファイルの指紋を計算 できる-cを使って 「壊れていないか」「すり替えられていないか」を照合 できる- 破損検出 と 改ざん検出 の違い、そして なぜ今 MD5 が非推奨なのか が分かる
結論(先に覚える型)
- とりあえず指紋を見たい →
sha256sum file - 公式サイトの値と一致するか確認したい →
sha256sum -c SHA256SUMS - 改ざん対策なら SHA-256。MD5 / SHA-1 は 偶発的な破損検出にしか使わない
前提(対象環境)
- OS:Ubuntu / 一般的な Linux
md5sum/sha256sumは GNU coreutils に含まれ 標準搭載(追加インストール不要)- 同じ仲間に
sha1sum/sha512sum/b2sumなどがある
1. チェックサムって何?
結論: チェックサムはファイルの中身から計算する「指紋」。中身が1ビットでも変われば値が大きく変わる。
チェックサムでできること
- ダウンロードしたファイルが 途中で壊れていないか(破損検出)
- 配布元と 中身が同じか(すり替え・改ざんの検出)
- 2 つのファイルが 完全に同一か の比較
2. sha256sum で指紋を計算する
結論:
sha256sum fileでハッシュを計算する。出力は「ハッシュ+スペース2つ+ファイル名」の形式。
2-1. 基本:1 ファイルの指紋を出す
$ sha256sum ubuntu.iso
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 ubuntu.iso
出力の読み方
e3b0c4...b855 ubuntu.iso
└─ ハッシュ値 ─┘└┘└ ファイル名
2つのスペース- 1 つ目のスペースは区切り
- 2 つ目の文字は 入力モード(
=テキスト /*=バイナリ)を表す - GNU 版では両モードに中身の差はない(歴史的な互換用)
2-2. md5sum も使い方は同じ
$ md5sum ubuntu.iso
d41d8cd98f00b204e9800998ecf8427e ubuntu.iso
md5sum は MD5、sha256sum は SHA-256 を計算するだけで 使い方は全く同じ。sha1sum / sha512sum も同様。
3. 複数ファイルと一覧の保存
結論: 複数ファイルをまとめて計算でき、
>で一覧ファイルに保存しておけば後で-c照合に使える。
3-1. 複数ファイルを一括で
$ sha256sum *.iso
e3b0c4...b855 ubuntu.iso 9f86d0...0a08 debian.iso
3-2. 一覧をファイルに保存
$ sha256sum *.iso > SHA256SUMS
SHA256SUMS という名前は配布サイトでよく使われる慣習。中身は「ハッシュ+ファイル名」が並んだただのテキスト。
-c で「保存しておいた指紋と、今のファイルが一致するか」をまとめて照合できる。バックアップが壊れていないかの定期チェックにも便利だよ。4. -c で照合する(ここが本番)
結論:
sha256sum -c 一覧ファイルで、記録済みハッシュと現在のファイルを照合する。一致ならOK、不一致ならFAILED。
4-1. 一覧と照らし合わせる
$ sha256sum -c SHA256SUMS
ubuntu.iso: OK debian.iso: OK
中身が変わっていたら、こうなる。
ubuntu.iso: OK debian.iso: FAILED sha256sum: WARNING: 1 computed checksum did NOT match
FAILED が出たら、それは壊れてるってことですか?4-2. 配布元の値 1 つと照合する
ダウンロードページに「SHA256: 公式の値」が 1 行だけ載っている場合は、その 1 行を一覧ファイルにして照合できる。
# 公式の値とファイル名を 1 行で書く(スペースは2つ) $ echo "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 ubuntu.iso" > check.txt $ sha256sum -c check.txt
ubuntu.iso: OK
スペースは必ず2つ
一覧ファイルの「ハッシュ」と「ファイル名」の間は 半角スペース2つ。1 つだとフォーマット不正で照合に失敗する。sha256sum の出力をそのまま使えば間違えない。
4-3. 検証で便利なオプション
# OK 行を出さず、失敗だけ表示 $ sha256sum -c --quiet SHA256SUMS # 一覧に無いファイルを無視(一部だけ確認したいとき) $ sha256sum -c --ignore-missing SHA256SUMS # 何も表示せず終了コードだけで判定(スクリプト向け) $ sha256sum -c --status SHA256SUMS && echo "全て一致"
--status は結果を画面に出さず、終了コード(成功 0 / 失敗 1)だけで判断する。シェルスクリプトでの自動チェックに向く。
5. 破損検出と改ざん検出は別物
結論: 偶発的な破損の検出はどのハッシュでもできるが、悪意ある改ざんへの防御は SHA-256 を使う必要がある。
2 つの目的
| 目的 | 何を防ぐ | 使えるハッシュ |
|---|---|---|
| 破損検出 | 通信・ディスク由来の偶発破損 | MD5 / SHA-1 でも可 |
| 改ざん検出 | 攻撃者による意図的なすり替え | SHA-256 以上を推奨 |
6. なぜ今 MD5 は非推奨なのか
結論: MD5 と SHA-1 は「異なる中身で同じ指紋」を作る衝突攻撃が現実的になったため、セキュリティ用途では非推奨。
MD5 / SHA-1 を使ってはいけない場面
- ダウンロードファイルの 真正性(本物か) の確認
- パスワードのハッシュ化
- 署名・証明書など セキュリティが絡む 用途
これらは SHA-256 以上(sha256sum / sha512sum)を使う。
7. よくある初心者のつまずき
結論: 大文字小文字の見間違い、スペースの数、改行コード混入が照合失敗の典型原因。
7-1. 目視で比較して見落とす
64 桁を目で比べるのは事故のもと。必ず -c で機械的に照合 する。
# NG: 目で見比べる(見落とす) # OK: 一覧にして -c で照合 $ sha256sum -c SHA256SUMS
7-2. FAILED の原因がスペース
一覧ファイルの区切りが スペース1つ だとフォーマット不正になる。
sha256sum: SHA256SUMS: 1 line is improperly formatted
sha256sum file > SHA256SUMS で作った一覧をそのまま使えば、スペースは正しく2つになる。
7-3. Windows で作った一覧がうまく照合できない
Windows 由来のファイルは改行が \r\n(CRLF)で、末尾の \r が悪さをすることがある。
# CRLF を LF に直してから照合 $ tr -d '\r' < SHA256SUMS.txt | sha256sum -c -
7-4. ハッシュが一致するのに「違うファイル」に見える
ファイル名が違うだけで 中身が同じ なら、ハッシュは一致する。ハッシュは 中身だけ を見て、ファイル名や更新日時は見ないことを覚えておく。
8. ミニ課題:手を動かして確かめよう
結論: 自分でファイルを作り、ハッシュ計算・一覧保存・照合・破損検出の流れを実際に体験して定着させる。
課題 1:echo hello > a.txt でファイルを作り、その SHA-256 ハッシュを表示しよう。
ヒントを見る
SHA-256 を計算するコマンドにファイル名を渡すだけ。
解答例
$ echo hello > a.txt $ sha256sum a.txt
5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 a.txt
課題 2:a.txt のハッシュ一覧を SUMS に保存し、-c で照合して OK を確認しよう。
ヒントを見る
> SUMS で保存してから、-c SUMS で照合する。
解答例
$ sha256sum a.txt > SUMS $ sha256sum -c SUMS
a.txt: OK
課題 3:a.txt の中身を書き換えてから再度 -c で照合し、FAILED が出ることを確認しよう。
ヒントを見る
ファイルに何か追記してから、もう一度 -c SUMS を実行する。
解答例
$ echo world >> a.txt $ sha256sum -c SUMS
a.txt: FAILED sha256sum: WARNING: 1 computed checksum did NOT match
中身が変われば指紋も変わり、照合が FAILED になることが体感できる。
9. コピペ用テンプレート
結論: 計算・一覧保存・照合・配布元1行との突き合わせの定番形をコピペで使える。
チェックサム テンプレ
# 1 ファイルの指紋を計算 sha256sum file # 複数ファイルをまとめて sha256sum *.iso # 一覧を保存 sha256sum *.iso > SHA256SUMS # 保存した一覧と照合 sha256sum -c SHA256SUMS # 失敗だけ表示 sha256sum -c --quiet SHA256SUMS # スクリプト向け(終了コードで判定) sha256sum -c --status SHA256SUMS && echo OK # 配布元の値 1 行と照合 echo "<公式ハッシュ> file.iso" | sha256sum -c - # より強いハッシュが欲しいとき sha512sum file
やってはいけないこと
- 改ざん対策に MD5 / SHA-1 を使う
- 64 桁を目視で比較する(
-cで機械照合する) - 区切りのスペースを 1 つにする(必ず 2 つ)