ハッシュでファイルの整合性を検証する方法

· 9 分で読めます

ソフトウェア、ファームウェア、重要な文書をダウンロードするとき、ファイルが発行者が意図したとおりであるとどうやって知るでしょうか。ファイルハッシュは暗号フィンガープリント、つまりファイルの1バイトでも異なれば変わる一意の文字列を提供します。ハッシュの検証には数秒しかかかりませんが、改ざんされたソフトウェアのインストール、デバイスを壊す壊れたファームウェアの書き込み、実際に復元が必要なときに失敗する破損したバックアップを信頼することからあなたを救えます。

ハッシュ関数の簡単な歴史

チェックサムの考えはコンピューティング自体より古いです。会計士は、検証するファイルが存在する前から、転記エラーを検出するために算術的な桁の合計を使っていました。暗号ハッシュは1980年代後半に登場しました。Ron Rivestは1990年にMD4、1991年にMD5を発表し、20年間事実上のチェックサムになりました。NISTは1993年にSHA-0を標準化しましたが、欠陥が発見された後、1995年に素早くSHA-1に置き換えました。SHA-2ファミリー(SHA-224、SHA-256、SHA-384、SHA-512)は2001年に、迫り来るSHA-1の弱点に対処するために続きました。

各世代は、予想より安価であることが判明した攻撃によって引退しました。MD5の衝突は2004年に実証され、2008年にデジタル証明書に対して実用的になり、現在は自明です。SHA-1は2017年のGoogleのSHAtteredアタックに屈しました。研究者が同一のSHA-1ダイジェストを持つ2つの異なるPDFを生成したのです。SHA-2は2001年以来持ちこたえており、SHA-3(Keccak、2015年に標準化)はSHA-2が破れた場合の、構造的に異なるフォールバックを提供します。教訓は、ハッシュアルゴリズムには賞味期限があるということです。今日の正しいアルゴリズムは10年以内に置き換えが必要かもしれません。

ファイルハッシュの仕組み

ハッシュ関数はファイルのすべてのバイトを読み、固定長の文字列を生成します。同じファイルは常に同じハッシュを生成します。1バイト変えると、ハッシュは完全に変わります。これはアバランチ効果と呼ばれ、ハッシュを検証に有用にする特性です。

例:

2つのハッシュは、ファイルが1ビット異なるだけでも、認識可能なパターンを共有しません。その感度が検証を可能にします。ハッシュを生成し、公開されたハッシュと比較すると、ファイルが本物かどうかが瞬時に分かります。

内部的に、モダンなハッシュ関数はファイルを固定サイズのブロック(SHA-256で64バイト、SHA-512で128)に分割し、各ブロックを圧縮関数に通し、状態を前方に連鎖させます。出力は、最後のブロックが混ぜ込まれた後の最終状態です。連鎖がすべてのバイトに依存するため、攻撃者がハッシュ全体を書き換えずに内容を変えられるショートカットはありません。

ファイルを検証する手順

  1. 公式ハッシュを見つける: ソフトウェア発行者は通常、ダウンロードページにファイルハッシュをリストし、しばしば「SHA-256チェックサム」または「SHA256SUMSファイル」とラベル付けされます。
  2. ダウンロードしたファイルをアップロード: ハッシュ計算機でファイルを選択します。ハッシュはブラウザ内でローカルに計算され、ファイルはマシンを離れません。
  3. ハッシュを比較: 計算したハッシュが公式ハッシュと正確に一致すれば、ファイルは本物で破損していません。文字列が長い場合は、両方をテキスト差分にコピペします。
  4. アルゴリズムを一致させる: SHA-256のハッシュは他のSHA-256のハッシュのみと一致します。発行者がSHA-512を提供する場合、SHA-512も生成します。アルゴリズムの混在は最も一般的な「一致しない」ミスです。
  5. 可能なら公開ハッシュ自体も検証: 署名されたSHA256SUMSファイル(発行者のGPG鍵で署名された)は、ハッシュリストが改ざんされていないことを教えてくれます。ダウンロードページの素のハッシュはそうではありません。

ファイルハッシュを検証する場面

サポートされるアルゴリズム

アルゴリズムハッシュ長出力ビット推奨
MD532 hex文字128レガシーのみ、破られている、偶発的破損のみ
SHA-140 hex文字160レガシーのみ、破られている、セキュリティに信頼しない
SHA-22456 hex文字224ニッチ。SHA-256を好む
SHA-25664 hex文字256推奨される汎用標準
SHA-38496 hex文字384高セキュリティ、TLS 1.3暗号スイートで使用
SHA-512128 hex文字512SHA-2の最大強度、64ビットCPUで高速
SHA3-25664 hex文字256SHA-2と異なる内部設計、将来対応
BLAKE2b / BLAKE3変動256または512最速のモダンハッシュ、rsync、resticで使用
CRC328 hex文字32エラー検出のみ、セキュリティハッシュではない

選択肢があれば、SHA-256が正しいデフォルトです。64ビットマシンではわずかに良いパフォーマンスのためにSHA-512を使ってください(アルゴリズムは64ビットワード用に調整されています)。スループットが最も重要なときはBLAKE3に手を伸ばしてください。SHA-256ができない方法でモダンなNVMe SSDを飽和させられます。

ハッシュとデジタル署名

ハッシュはファイルが変わったかどうかを教えます。デジタル署名はそれが変わったかどうかと、誰がハッシュを作成したかを教えます。署名は発行者の秘密鍵で暗号化されたハッシュです。彼らの公開鍵で復号し、ハッシュを再計算し、両者が一致することをチェックします。一致すれば、ファイルが無傷であることと、発行者(または彼らの秘密鍵を持つ誰か)がそれを承認したことが分かります。

ダウンロードページがSHA-256ハッシュと.sigまたは.ascファイルの両方を表示するとき、ハッシュは破損と偶発的な改ざんから保護しますが、ダウンロードサーバーに侵入した攻撃者から保護するのは署名です。攻撃者はファイルを置き換えて表示されたハッシュを更新できますが、発行者の鍵なしには有効な署名を偽造できません。

よくある落とし穴

代替ツールと文脈

Webハッシュ計算機は1つのファイルをチェックするときの最速の経路です。繰り返し使用やスクリプトには、コマンドラインツールが標準です。

ツールプラットフォーム強み注意点
Webハッシュ計算機ブラウザインストール不要、ファイルがアップロードされない一度に1ファイル
sha256sumLinux高速、スクリプト可能、GNU coreutils--checkはSHA256SUMSファイルを読む
shasum -a 256macOS、BSDバンドル、同じ出力形式Linuxとはバイナリ名が異なる
Get-FileHashWindows PowerShellWindowsでファーストクラス出力形式がsha256sumと異なる
certutil -hashfileWindows cmdすべてのWindowsで利用可能冗長な出力は解析が必要
openssl dgst -sha256クロスプラットフォームOpenSSLをすでに持っているなら専用ツールより遅い
b3sumクロスプラットフォームBLAKE3、マルチGB/sスループット新しい、あまり普及していない
rhashクロスプラットフォーム多くのアルゴリズムを一度に計算追加のインストール

CI/CDパイプラインでは、同じタスクは通常、ビルド中にsha256sum file > file.sha256として、検証中にsha256sum -c file.sha256として実行され、しばしば署名されたマニフェストにラップされます。原則(計算、公開、取得時に比較)は、ブラウザツールが対話的に行うものと同じです。

プライバシーとハッシュ計算機

ハッシュ計算機は完全にブラウザ内で動作します。選択したファイルはFileReader APIで読まれ、Web Crypto SubtleCryptoインターフェースを通され、結果のハッシュが表示されます。ファイルのバイトはサーバーに移動しません。アップロードなし、どのファイルがハッシュされたかのログなし、ファイルサイズや拡張子の分析なしです。機密素材(契約、医療記録、秘密鍵)には、アップロードするツールとローカルでハッシュするツールの違いは、1つの第三者を信頼することと誰も信頼しないことの違いです。ハッシュは小さな出力です(SHA-256で64 hex文字)が、それが要約する入力は非常に明らかになり得ます。その入力をクライアントサイドに保つことは、任意の検証タスクに対する正しいデフォルトです。

よくある質問

ファイルのハッシュを公式のものとどう比較しますか?

ハッシュを生成したあと、配布元(通常はダウンロードページ)が公開しているハッシュと文字単位で比較します。すべての文字が一致すれば、ファイルは本物で破損していません。1 文字でも違えば、ファイルは変更されています。

どのハッシュアルゴリズムを使うべきですか?

SHA-256 がファイル検証の標準です。配布元が提供しているアルゴリズムを使いましょう。選択肢があるなら、SHA-256 がセキュリティとパフォーマンスのバランスが良好です。

破損したファイルが正しいハッシュを持つことはありますか?

理論的には可能(衝突)ですが、SHA-256 では統計的に無視できるほどの確率です。可能性が天文学的に低いため、実用上はハッシュが同じならファイルも同じだと保証できます。

ファイルはサーバーに送信されますか?

いいえ。ハッシュは完全にブラウザ内で計算されます。ファイルがデバイスから出ることはなく、機密文書を含むあらゆる文書で安全に使えます。

What is the difference between a hash and a digital signature?

A hash proves a file has not changed since the hash was computed; anyone can verify it. A digital signature proves both integrity AND identity, the publisher signs the hash with their private key, and you verify with their public key. Hashes alone do not protect against a hacker who replaced both the file and the published hash on the same compromised mirror.

Why are MD5 and SHA-1 considered insecure?

Researchers have demonstrated practical collision attacks for both. In 2017 Google produced two different PDFs with identical SHA-1 hashes (the SHAttered attack), and MD5 collisions can be generated in seconds on a laptop. For deliberate-tamper detection use SHA-256 or stronger; MD5 and SHA-1 still work for catching accidental corruption but should never be trusted as security boundaries.