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

LinuxでファイルのSHA256ハッシュを計算する方法と応用例の実務上の結論は「SHA-256はsha256sumで計算し、officialなmanifestはsha256sum -cで検証します。digest取得元を確認し、可能ならdigital signatureも検証します。」です。SHA-256はbyte同一性を検証しますが、manifestが攻撃者と同じ場所から来れば真正性は確立しません。digestの入手経路、署名key、artifact sizeを一つのtrust recordにします。

目次

SHA-256と発行者確認を分ける

SHA-256はbyte列の同一性を強く確認できますが、digestを誰が発行したかまでは証明しません。攻撃者がfileとmanifestの両方を置換できる場合、hash一致だけでは真正性を確保できません。official HTTPS、release announcement、署名、信頼するkey fingerprintを組み合わせ、integrityとauthenticityを別の成功条件にします。

一fileはsha256sum — file、official manifestはsha256sum –check manifestで検証します。署名が提供される場合はgpg –verify signature manifestを別に実行し、key fingerprintを独立経路で確認します。gpgvはtrusted keyringを明示してverification専用に使う選択肢ですが、keyringの準備と信頼境界を説明できる場合に限ります。

digest sourceと署名keyのtrust境界を確認する

  • 対象fileと期待sizeを確認する
  • digest manifestのofficial入手経路を確認する
  • text/binary変換がないbyte列を用意する
  • signature有無と検証keyを確認する

manifestをartifactと同じ未検証channelだけから得た場合はacceptしません。publisher keyのfingerprintと配布経路を確認し、unknown keyや期限切れkeyならartifactを隔離したままowner確認へ戻します。

sha256sum -cからgpg検証まで段階化する

一fileのSHA-256を計算

sha256sum -- ./image.iso

digest、file名、size、取得元、実行時刻を記録します。

manifestを一括検証

sha256sum --check -- ./SHA256SUMS

OK/FAILED表示と終了code、missing fileを保存します。

空fileの既知値を比較

printf '%s  %s\n' 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' './empty.bin' | sha256sum --check -

sampleが0 byteであることをstatで確認し、既知のSHA-256値と照合します。

file sizeも同時記録

stat --format='%n %s bytes' -- ./image.iso
sha256sum -- ./image.iso

truncation等の調査にsizeを併記します。

manifestの署名を別検証

gpg --verify ./SHA256SUMS.sig ./SHA256SUMS

official key fingerprintを別経路で確認し、digest checkとは別の成功条件にします。

manifest checkと署名検証

SHA-256は入力byte列から256-bit digestを生成し、1byteでも変われば通常大きく異なります。digest一致は同じbyte列である強い確認ですが、攻撃者がfileとmanifestの両方を置換できる場合に発行者を証明しません。signatureとtrusted keyがauthenticityを補います。

sha256sum -cのOK/FAILED、missing、format warningと終了statusを保存します。一部OKでも一件FAILEDなら全体成功にしません。gpgのGood signatureという表示だけでなく、使用key、fingerprint、署名時刻の扱い、失効情報、終了statusを確認します。file size、source URL、manifest取得URL、実行時刻をdigestと同じrecordへ結びます。

改行変換、途中truncate、wrong directory、manifest file名escape、同名別file、storage corruptionを分けます。signature検証ではunknown key、expired/revoked key、wrong data、untrusted keyringを別statusにします。同じuntrusted mirrorからfileとhashを取得して再試行を繰り返さず、official publication channelとnetwork/cacheを調査します。

FAILED・missing・unknown keyを個別statusにする

  • digest一致を発行者の署名と同じにする
  • fileとmanifestを同じ未信頼mirrorから取る
  • SHA-256文字列の空白やfile名formatを誤る
  • 転送中のtext改行変換を見落とす
  • FAILEDやmissingを一部OKで隠す

FAILED、missing、malformed line、gpgのunknown keyは別statusです。checksum fileを書き換えて通さず、download sourceとmanifest sourceを再確認して新しい隔離directoryへ取り直します。

検証失敗artifactを実行せず隔離する

unknown sourceのfileはhash一致だけで実行しません。official HTTPS、署名、key fingerprint、release情報を確認します。manifestへ絶対pathやsecret fileを不用意に追加せず、検証対象を固定します。失敗時に再downloadを自動反復する前にsourceとstorageを調査します。

hash一致だけでunknown executableやscriptを起動しません。keyserverから得た同名keyを自動信頼せず、公式siteや複数経路でfingerprintを確認します。検証失敗時にsignature checkを無効化するfallbackを作らず、artifactを隔離します。manifestへprivate pathやsecret fileを追加して共有しないよう対象を固定します。

失敗sampleで完全性をtestする

hash fixtureには空file、既知digest、1 byte変更、途中truncate、missing entry、壊れたmanifestを用意します。sha256sum単体と-cについてstdout・stderr・status・sizeを期待表へ照合し、一件でもFAILEDなら一括成功にしません。

publisher確認は別scenarioにし、test専用keyで正しい署名、改変署名、unknown key、失効想定を再現します。production keyringには触れず、fingerprint確認に失敗したartifactが隔離directoryから実行経路へ出ないことを検証します。

digest・size・signature statusを証跡化する

artifact pipelineではalgorithm、digest、size、source、manifest source、signature status、fingerprintをschema化します。exit statusとfailed/missing件数をguardrailにし、表示文言のlanguageだけをparseしません。trust rootとkeyring更新をversion管理し、検証tool version、取得時刻、network cacheの有無をaudit logへ残します。

内部bit rotと外部publisher確認を分ける

自分が生成した内部backupのbit rot検出にはSHA-256 manifest、外部配布物には署名付きmanifestまたはpackage managerのtrust chainを選びます。signatureがない場合はofficial channelを複数照合し、riskを明記します。hash計算、manifest照合、発行者確認を三段階に分けると、どこで失敗したか追跡できます。

合格は一致・不一致・missing・unknown key fixtureを個別に拒否またはacceptできることです。digestだけが一致して署名が必要条件を満たさないartifactは実行せず隔離を継続します。

公式情報・参考資料

この記事を書いた人

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

コメント

コメントする

目次