ファイルの改ざんを確認する方法|ハッシュ値の照合手順
海外サイトからダウンロードしたインストーラーや、知人から送られてきたファイルが、途中で壊れていないか、あるいは第三者に改ざんされていないか気になったことはないでしょうか。これは配布元が公開している「ハッシュ値(チェックサム)」と、手元のファイルから計算したハッシュ値を照合すれば確認できます。この記事では、ハッシュ値で改ざんが分かる仕組み、実際の照合手順、そして一般的な解説ではあまり触れられない落とし穴を説明します。
ハッシュ値で改ざんが分かる仕組み
ハッシュ関数は、どんな長さのデータを入力しても、決まった長さの文字列(ハッシュ値)を出力する関数です。代表的なものにMD5、SHA-1、SHA-256、SHA-512があります。
この関数には次の性質があります。
- 同じ入力からは必ず同じハッシュ値が生成される
- 入力が1バイトでも変わると、出力はまったく異なる値になる
- ハッシュ値から元のデータを逆算することはできない
つまり、配布元が公開しているハッシュ値と、自分の手元にあるファイルのハッシュ値が完全に一致すれば、「配布された時点から1バイトも変わっていない」ことが確認できます。逆に1文字でも違えば、ダウンロード中の通信エラーで一部が欠けているか、何者かが内容を書き換えた可能性があります。
実際の照合手順
1. 配布元でハッシュ値が公開されているか確認する
オープンソースソフトウェアの配布ページや、企業の公式ダウンロードページでは、ファイル名の横に「SHA256: a1b2c3...」のような文字列が添えられていることがあります。まずはこれを探します。見当たらない場合は、後述する理由により、この方法自体が使えないケースもあります。
2. 手元のファイルのハッシュ値を計算する
ファイルのハッシュ値は、OS標準の機能やコマンドで計算できます。
| 環境 | 方法 |
|---|---|
| Windows | コマンドプロンプトで certutil -hashfile ファイルパス SHA256 |
| Mac | ターミナルで shasum -a 256 ファイルパス |
| ブラウザのみ | ハッシュ生成ツール にファイルをドラッグ&ドロップ |
コマンドに慣れていない場合は、当サイトのハッシュ生成ツールが手軽です。ファイルを選択するだけで、MD5・SHA-1・SHA-256・SHA-512の4種類を同時に計算して表示します。処理はすべてブラウザ内で完結し、ファイルの中身がサーバーに送信されることはありません。個人的な写真や業務ファイルなど、外部に送りたくないデータでもそのまま使えます。
3. 値を突き合わせる
計算したハッシュ値と、配布元が公開している値を比較します。英大文字・小文字の違いは意味を持たないため(A1B2 と a1b2 は同じ値として扱われます)、ハッシュ生成ツールの「大文字」表示切り替えを使うと目視での比較がしやすくなります。長い文字列を1文字ずつ目で追うのは間違いのもとなので、前後4〜6文字程度をコピーして検索(Ctrl+F)で一致を確認する方法も実務的です。
どのハッシュアルゴリズムを使うべきか
同じファイルでも複数のアルゴリズムのハッシュ値が公開されていることがあります。用途によって信頼性が異なるため、目的に応じて選ぶ必要があります。
| アルゴリズム | 出力長 | 現在の評価 | 向いている用途 |
|---|---|---|---|
| MD5 | 128bit | 意図的な衝突(同じ値を持つ別データの作成)が実用的な計算量で可能なことが知られている | 通信エラーによる破損の検出など、悪意を想定しない用途 |
| SHA-1 | 160bit | 同じく衝突が実証されており、新規用途では非推奨 | 同上(レガシー環境の互換確認程度) |
| SHA-256 | 256bit | 2026年時点で実用的な衝突は知られていない | 改ざん検知、ソフトウェア配布の検証 |
| SHA-512 | 512bit | SHA-256と同様に安全とされる | 同上(処理速度が優先される64bit環境向け) |
改ざんを疑って検証したい場合は、SHA-256以上を使ってください。 MD5とSHA-1は、悪意を持って「同じハッシュ値になるように細工した別のファイル」を作ることが理論上・実用上可能であることが知られています。そのため、ダウンロードミスによる破損チェックには使えても、第三者による意図的な改ざんを検知する目的には向きません。配布元がMD5しか公開していない場合は、可能であればファイルの提供元自体の信頼性を別の手段で確認するほうが確実です。
見落としがちな落とし穴:ハッシュ値の入手経路
ここが、一般的な解説記事ではあまり触れられていない実務上の盲点です。
ハッシュ値の照合は、「配布元のページに書かれた値」と「手元のファイルの値」を比較する方法が一般的です。しかし、もし配布元のWebサイト自体が改ざんされていたら、そこに書かれているハッシュ値も同時に書き換えられてしまいます。 この場合、悪意のあるファイルとハッシュ値の両方が差し替えられているため、照合しても「一致している」という結果になり、改ざんを検知できません。
つまり、ハッシュ値による照合は「ダウンロード中の通信エラーで壊れていないか」を確認するには有効ですが、「配布元サイトそのものが乗っ取られていないか」までは保証しません。この点まで気にする必要がある場面(重要なソフトウェアの導入など)では、次のような方法で経路を分散させることが実務的です。
- 公式のSNSアカウントやGitHub Releaseなど、Webサイトとは別の場所で公開されているハッシュ値と突き合わせる
- 開発者のPGP署名が提供されている場合は、署名の検証も合わせて行う
- 過去にダウンロードした際にメモしておいた値と比較する
日常的なファイルのやり取りでここまで求められる場面は多くありませんが、「ハッシュ値が一致したから絶対に安全」とまでは言い切れないことは、知っておいて損はありません。
ハッシュ値の一致は「安全」を保証するものではない
もう一点誤解されやすいのは、ハッシュ値の一致が確認できたからといって、そのファイルの中身が安全だと保証されるわけではないという点です。ハッシュ値が確認するのは、あくまで「配布された時点の状態から変化していないか」だけです。仮に配布元が最初からマルウェアを混入させたファイルを公開していた場合、そのファイルのハッシュ値をそのまま公開すれば、照合結果は「一致」になります。
したがって、ハッシュ値の照合はダウンロード後の破損・改ざんチェックとして有効な一方、ダウンロード元そのものの信頼性を判断する材料にはなりません。公式サイトかどうか、URLが正しいかどうかの確認は、ハッシュ値の照合とは別に行う必要があります。
テキストのハッシュ値を使う場面
ファイルだけでなく、テキストのハッシュ値が必要になる場面もあります。たとえば、パスワードをそのまま保存せずハッシュ値で扱う仕組みを学習する場合や、APIの署名検証の仕組みを確認する場合などです。ハッシュ生成ツールはテキストの入力にも対応しており、入力欄に文字列を入力するだけでMD5・SHA-1・SHA-256・SHA-512を同時に確認できます。
まとめ
- ファイルの改ざん・破損は、配布元公開のハッシュ値と手元のファイルのハッシュ値を照合すれば確認できる
- 改ざん検知にはSHA-256以上を使う。MD5・SHA-1は衝突が実用的な計算量で作成可能なため、破損チェック用途にとどめる
- ハッシュ値は大文字・小文字を区別しないため、比較時はどちらかに揃えると見やすい
- 配布元サイト自体が改ざんされていると、掲載されているハッシュ値ごと書き換えられている可能性があり、照合だけでは検知できない
- ハッシュ値の一致は「変化していないこと」の証明であり、「安全であること」の証明ではない
手元での確認には、ハッシュ生成ツールを使うとコマンドを覚えなくてもブラウザ上で完結します。ファイルもテキストもサーバーに送信せずその場で計算するため、機密性の高いデータでも安心して使えます。