LinuxでファイルのMD5ハッシュを計算する方法とその応用

LinuxでファイルのMD5ハッシュを計算する方法とその応用の実務上の結論は「互換性のため既存MD5値を照合する場合だけmd5sumを使い、新規のintegrity確認はSHA-256以上へ移行します。MD5一致を安全性や発行者の真正性と解釈しません。」です。MD5はlegacy manifestとの互換確認に範囲を限定し、新規の信頼判定にはSHA-256と署名を使います。digest一致は同じbyte列の確認であり、publisherの真正性を証明しません。

目次

MD5をlegacy checksumに限定する

MD5は既存systemとの互換や偶発的な転送破損検出には残っていますが、衝突耐性が破られており、攻撃者を想定する真正性確認や署名の代替には使えません。新しい公開物やsecurity判断にはSHA-256以上とdigital signatureを選びます。MD5一致だけでdownload元や発行者を信頼しないことが最重要です。

一fileはmd5sum — file、manifestはmd5sum –check manifestで確認します。manifestの各行にはdigestとfile名のformatが必要で、相対pathは実行directoryに依存します。text/binary markerの互換差、file名のescape、missing fileを確認し、表示されたhex文字列を手入力で比較するよりcheck modeのstatusを利用します。

MD5を許すlegacy用途と終了期限を決める

  • MD5が必要なlegacy互換理由を確認する
  • 比較元digestの入手経路を確認する
  • security判定か転送error検出かを分ける
  • SHA-256またはsignatureを併用できるか確認する

MD5しか提供されないworkflowでは用途、manifest入手経路、廃止日を記録します。外部artifactの実行可否を決める場面ではMD5 checkだけで進めず、署名または信頼済みSHA-256が得られるまで隔離します。

単体digest・manifest check・SHA-256を並べる

一fileのMD5を表示

md5sum -- ./legacy.iso

互換性確認用としてfile名、size、取得元も記録します。

manifestを検証

md5sum --check -- ./MD5SUMS

manifest自体が信頼できる経路から得られたかを別に検証します。

不足fileも含めstatusを記録

md5sum --check --warn -- ./MD5SUMS; printf 'md5_check_rc=%s\n' "$?"

OK表示だけでなく終了codeとwarningを保存します。

SHA-256も計算

sha256sum -- ./legacy.iso

新規recordには強いdigestを併記し、MD5依存を縮小します。

binary mode markerの互換性を確認

md5sum --binary -- ./legacy.iso

platform間manifestのmarkerを確認し、digest algorithmの弱さは変わらないと理解します。

md5sum -cとmanifestの信頼

md5sumはfile byte列から128-bit MD5 digestを計算します。しかしMD5はcollision resistanceが破られており、攻撃者が関与する改ざん検出、certificate、software authenticityには使えません。信頼できないsite上のfileとdigestを同時取得しても真正性は増えません。

md5sum -cは各対象のOK/FAILEDを示し、全件の終了statusを返します。一部OKがあってもmissingやFAILEDがあれば全体成功ではありません。digest一致は比較したbyte列が同じであることの弱い整合性確認で、manifest自体が改ざんされていないことを証明しません。source URL、manifest取得経路、sizeを一緒に記録します。

改行変換、FTP text mode、途中truncate、wrong working directory、file名の空白やbackslash、manifest行のformat errorを分けます。MD5値が違う場合に同じuntrusted mirrorから自動再取得を繰り返さず、official sourceとstorage errorを確認します。password hashやtoken生成へMD5を流用せず、用途違反として停止します。

digest不一致・missing・manifest不正を分離する

  • MD5一致を暗号学的安全性と呼ぶ
  • fileとdigestを同じ未信頼sourceから得る
  • password hashへMD5を使う
  • text/binary modeや改行変換を無視する
  • manifest検証の終了codeを記録しない

mismatch、missing file、malformed manifestは別statusです。再downloadで一致を待つ前にmanifest sourceとfilenameを確認し、同じ失敗が続くartifactは配布元へ戻して隔離copyを実行しません。

unknown artifactをMD5一致だけで起動しない

MD5一致を理由にdownloadを実行・installしません。official HTTPS、署名検証、SHA-256以上のdigestを優先します。legacy相手へMD5を送る場合もsecret hashやpassword保存へ転用せず、移行期限とownerを記録します。

MD5一致を理由にunknown executableを起動しません。fileとMD5一覧を同じ未信頼pageから取得した場合、攻撃者は両方を置換できます。公式HTTPS、release announcement、署名、key fingerprintなど独立したtrust sourceを使います。manifestにprivate pathやsecret file名を含めて共有しないよう対象を限定します。

SHA-256へ移行できる検証

既知sample、1byte変更、truncated file、missing file、改変manifestを用意し、md5sum -cのstdout/stderr/statusを比較します。同時にSHA-256とsignature有無を記録し、MD5だけで合格にしません。

既知sample、空file、1byte変更、missing、renamed、truncated、malformed manifestをfixtureにします。md5sum単体と-cのstdout、stderr、statusを期待表へ照合し、同じfileのSHA-256も採取します。legacy相手との互換確認が終わったら、SHA-256 manifestとsignature検証へ置換できる受入れtestを作ります。

algorithm名とfailed件数をschemaへ残す

legacy連携ではalgorithm名をfieldに含め、md5とsha256を同じ長さの文字列として扱わないschemaにします。exit status、検証総数、failed、missingを別metricにし、一部OKを成功へ丸めません。MD5だけのjobには廃止期限と移行先を設定し、新規producerがMD5 manifestを生成しないguardrailを追加します。

互換checkをSHA-256と署名へ移行する

古いAPIや配布物がMD5しか提供しない場合は互換checksumとして限定利用し、別経路のsource trustを必須にします。自分で選べる新規処理はSHA-256、発行者確認は署名へ移行します。重複検出やcache keyでも敵対入力があり得るならMD5を選ばず、衝突時の影響を設計reviewします。

合格は一致・不一致・missing・壊れたmanifestを別結果にし、algorithm名を必ず残せることです。MD5のみの外部artifactはacceptせず、署名付き配布物へ切り替えます。

公式情報・参考資料

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次