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は実行せず隔離を継続します。

コメント