md5sum / sha256sum 入門 - チェックサムで改ざん・破損を検証する
この記事でできるようになること
- `sha256sum` でファイルの指紋を計算できる
- `-c` で記録した指紋と現在のファイルを照合できる
- ハッシュを暗号化やエンコードと区別して説明できる
前提知識(先に読むと理解しやすい記事)
この記事で学べること
- チェックサム(ハッシュ) が何のためにあるのかがわかります
sha256sumで ファイルの指紋を計算 できます-cを使って 壊れていないか・すり替えられていないか を照合できます- ハッシュ・暗号化・エンコード の違いを言い分けられます
言葉の整理(先に取りちがえを防ぎます)
- チェックサム / ハッシュ値 / 指紋:ほぼ同じものを指す呼び方です。この記事では「指紋」を説明用の言い換えとして使います。
- ハッシュ:中身から短い値を作ることです。元のファイルには戻せません。「同じか違うか」を確かめるための道具です。
- 暗号化:鍵を持つ人だけが元に戻せるようにすることです。中身を隠すのが目的です。ハッシュとは目的が違います。
- エンコード:書き方を変えるだけの変換です。鍵なしで誰でも戻せます。
base64がこれにあたります。
ハッシュは 戻せません。暗号化は 鍵があれば戻せます。エンコードは 誰でも戻せます。この 3 つを混ぜないでください。
結論(先に覚える型)
- とりあえず指紋を見たい →
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 という名前は、配布サイトでよく使われる慣習です。中身は「ハッシュ+ファイル名」が並んだ、ただのテキストです。
どこに作られるか・上書きの危険
SHA256SUMSは いま自分がいるディレクトリファイルをまとめて整理する入れ物。Windows や macOS の「フォルダ」と同じもの。 に作られます。pwdで確認できます>は同じ名前のファイルがあると、中身を消して上書きします。確認は聞かれません(>>と 2 つ重ねると、上書きではなく末尾への追記になります)- 大事な一覧を消さないよう、先に
ls SHA256SUMSで存在を確かめてください sha256sumは本サイトの仮想ターミナル入力したコマンドを解釈してコンピュータに実行させる対話プログラム。では動きません。実行は自分のパソコンのターミナルで行います- 練習は「8. ミニ課題」で作る、からっぽのディレクトリの中だけで行ってください。そこなら、もとからあるファイルを壊しません
-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
区切りは自分で打ち直さない
「ハッシュ」と「ファイル名」の間は、sha256sum の出力どおり 半角スペース 2 つ にします。スペースを 3 つ以上にすると、余分な空白までファイル名の一部として扱われ、No such file or directory になります。配布元の値をコピーするときは、余計な空白を足さないでください。
4-3. 検証で便利なオプション
# OK 行を出さず、失敗だけ表示 $ sha256sum -c --quiet SHA256SUMS # 一覧に無いファイルを無視(一部だけ確認したいとき) $ sha256sum -c --ignore-missing SHA256SUMS # 何も表示せず終了コードだけで判定(スクリプト向け) $ sha256sum -c --status SHA256SUMS && echo "全て一致"
--status は結果を画面に出しません。終了コード(成功 0 / 失敗 1)だけで判断します。終了コードは直前のコマンドが成功したかを表す数字で、echo $? で確認できます。シェルスクリプトでの自動チェックに向きます。
5. 破損検出と改ざん検出は別物
結論: 偶発的な破損の検出はどのハッシュでもできるが、悪意ある改ざんへの防御は SHA-256 を使う必要がある。
2 つの目的
| 目的 | 何を防ぐ | 使えるハッシュ |
|---|---|---|
| 破損検出 | 通信・ディスク由来の偶発破損 | MD5 / SHA-1 でも可 |
| 改ざん検出 | 攻撃者による意図的なすり替え | SHA-256 以上を推奨 |
6. なぜ今 MD5 は非推奨なのか
結論: MD5 と SHA-1 は「異なる中身で同じ指紋」を作る衝突攻撃が現実的になったため、セキュリティ用途では非推奨。
MD5 / SHA-1 を使ってはいけない場面
- ダウンロードファイルの 真正性(本物か) の確認
- パスワードのハッシュ化
- 署名・証明書など セキュリティが絡む 用途
これらは SHA-256 以上(sha256sum / sha512sum)を使ってください。
7. よくある初心者のつまずき
結論: 大文字小文字の見間違い、スペースの数、改行コード混入が照合失敗の典型原因。
7-1. 目視で比較して見落とす
-c で機械に照合させる。これなら 1 文字の違いも必ず見つかるよ。# NG: 目で見比べる(見落とす) # OK: 一覧にして -c で照合 $ sha256sum -c SHA256SUMS
7-2. 区切りに余分な空白が入っている
一覧ファイルの区切りに 空白を 3 つ以上 入れると、こうなります。
sha256sum: ' ubuntu.iso': No such file or directory ubuntu.iso: FAILED open or read sha256sum: WARNING: 1 listed file could not be read
FAILED ではなく FAILED open or read が出たときは、中身の不一致ではありません。「ファイル名が読めていない」という意味です。sha256sum file > SHA256SUMS で作った一覧をそのまま使えば、この形にはなりません。
7-3. Windows で作った一覧がうまく照合できない
Windows 由来のファイルは改行が \r\n(CRLF)です。末尾の \r が悪さをすることがあります。
# CRLF を LF に直してから照合 $ tr -d '\r' < SHA256SUMS.txt | sha256sum -c -
末尾の - は「ファイルではなく、パイプで流れてきた内容を読む」という意味です。sha256sum -c SHA256SUMS のファイル名の位置に - を置く、と覚えてください。
7-4. ハッシュが一致するのに「違うファイル」に見える
ファイル名が違うだけで 中身が同じ なら、ハッシュは一致します。ハッシュは 中身だけ を見ます。ファイル名や更新日時は見ません。
8. ミニ課題:手を動かして確かめよう
結論: 自分でファイルを作り、ハッシュ計算・一覧保存・照合・破損検出の流れを実際に体験して定着させる。
練習用のからっぽのディレクトリを作り、その中で試します。こうすれば、もとからあるファイルを上書きしません。
# 練習用ディレクトリを準備して移動する $ mkdir -p ~/checksum-practice && cd ~/checksum-practice
課題 1:echo hello > a.txt でファイルを作り、その SHA-256 ハッシュを表示しよう。
ヒント 1(方向づけ)を見る
指紋を計算するコマンドに、ファイル名を渡すだけです。オプションはいりません。
ヒント 2(コマンド名)を見る
sha256sum を使います。
答えを見る
$ echo hello > a.txt $ sha256sum a.txt
5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 a.txt
64 桁の指紋とファイル名が並びます。間はスペース 2 つです。
課題 2:a.txt のハッシュ一覧を SUMS に保存し、照合して OK を確認しよう。
ヒント 1(方向づけ)を見る
計算した結果をファイルに書き出します。そのあと、書き出した一覧を読ませて確かめます。
ヒント 2(コマンド名)を見る
使うコマンドは sha256sum です。保存にはリダイレクトの >、照合には -c を使います。
答えを見る
$ sha256sum a.txt > SUMS $ sha256sum -c SUMS
a.txt: OK
OK は「保存した指紋と今の中身が同じ」という意味です。
課題 3:a.txt の中身を書きかえてから再度照合し、FAILED が出ることを確認しよう。
ヒント 1(方向づけ)を見る
ファイルに 1 行だけ追記します。そのあと、課題 2 と同じ照合をもう一度行います。
ヒント 2(コマンド名)を見る
追記には >> を使います(> は上書きです)。照合は課題 2 と同じコマンドです。
答えを見る
$ 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で機械照合する) - 区切りを手で打ち直す(
sha256sumの出力をそのままコピーする)
振り返り
結論: 指紋は元に戻せない値であり、照合は目ではなく
-cに任せる。改ざん対策は SHA-256 を選ぶ。
-c に判定させる。私の失敗はそこでした。今日の 3 行まとめ
結論: 指紋は
sha256sumで計算し、目ではなく-cで照合し、改ざん対策には SHA-256 を選ぶ。
sha256sum fileでファイルの指紋を計算できます。ハッシュは元に戻せません- 照合は目で見比べず、
sha256sum -c 一覧ファイルに判定させます - 改ざん対策には SHA-256 以上を使います。MD5 / SHA-1 は偶発的な破損検出だけに使います