「SHA256: 3b4c9d...」——ソフトウェアをダウンロードするとき、公式サイトにこんな文字列が並んでいるのを 見たことがあるでしょう。これがハッシュ値です。意味がわからなくても長年スルーしていた人が 多いはずですが、実はファイルが本物かどうかを確認できる重要な仕組みです。 この記事では、ハッシュ値とは何か、SHA256・MD5の違い、そして実際の使い方を解説します。
ハッシュ値とは — データの「指紋」
ハッシュ関数とは、どんな長さのデータを入れても固定長の文字列を出力する一方向の変換関数です。 たとえばSHA256なら、入力が1文字の「a」でも10GBの動画ファイルでも、出力は常に64文字の16進数になります。
重要な特性が2つあります。①同じ入力から常に同じ値が出る(決定論的)、 ②入力が1バイトでも変わると全く異なる値になる(雪崩効果)。 この2つの性質により、ファイルの「指紋」として機能します。
SHA256・MD5・SHA-1の違い
| アルゴリズム | ハッシュ長 | 安全性 | 主な用途 |
|---|---|---|---|
| MD5 | 128ビット(32文字) | ×(衝突攻撃あり) | レガシー確認・非セキュリティ用途 |
| SHA-1 | 160ビット(40文字) | △(廃止推奨) | Gitのコミット管理(移行中) |
| SHA256 | 256ビット(64文字) | ◯(現在の標準) | ファイル配布・TLS(Transport Layer Security)証明書・デジタル署名 |
| SHA-3 / SHA-512 | 可変(最大512ビット) | ◎(より高安全) | 高セキュリティ要件の署名・政府系システム |
迷ったらSHA256を選べば問題ありません。MD5は2004年に衝突(異なるデータが同じハッシュ値を持つ現象)を 意図的に起こせることが証明されており、セキュリティ用途では使ってはいけません。 ただし単純なファイルの誤転送確認程度ならMD5でも実用上は問題ないケースもあります。
実際の使われ方
1. ダウンロードしたファイルの整合性確認
ソフトウェア配布サイトがSHA256を公開する主な目的は改ざん検知です。 ダウンロード後に自分でハッシュ値を計算し、公式の値と一致すれば「配布元から届いたバイト列と完全に同じ」と確認できます。 一致しない場合はダウンロード中に壊れたか、中間者攻撃で差し替えられた可能性があります。
ファイルハッシュ確認ツールを使うと、ファイルをブラウザにドロップするだけでSHA256・MD5・SHA-1の値を同時に取得できます。 コマンドラインが不要なので、普段ターミナルを使わない方にも便利です。
2. テキストやデータのハッシュ生成
ファイルだけでなく、任意の文字列からもハッシュ値を生成できます。APIのリクエスト署名・データの 一意識別子の生成・簡易的なチェックサム確認など、プログラム中でも頻繁に使われます。ハッシュ値生成ツールでは文字列を入力するとSHA256・MD5など複数のハッシュ値を一度に表示します。
3. パスワードの安全な保存
データベースにパスワードを平文で保存すると、漏洩時にそのまま悪用されます。 そのため多くのシステムではパスワードをハッシュ化して保存します。 ログイン時は入力されたパスワードをハッシュ化し、保存値と照合するだけなので、 システムは「元のパスワードを知らなくても認証できる」仕組みになっています。
ただしSHA256は高速すぎるため、パスワード保存には不向きです。 GPUを使って1秒間に数十億回試行できてしまうからです。 パスワード保存には意図的に遅いbcrypt・Argon2・scryptを使うのが正しい選択です。
ハッシュ値の確認コマンド(ターミナル)
コマンドラインで確認したい場合は以下のコマンドが使えます。
# macOS / Linux(SHA256)
sha256sum ファイル名
# macOS 専用(shasum コマンド)
shasum -a 256 ファイル名
# Windows(コマンドプロンプト)
certutil -hashfile ファイル名 SHA256
ブラウザ上で完結させたい場合はファイルハッシュ確認ツールを使うとコマンド不要です。ファイルはサーバーに送信されず、ブラウザ内だけで処理されます。
まとめ
- ハッシュ値はデータの「指紋」で、1バイトの変更でも全く異なる値になる
- MD5は衝突攻撃が実証済みのため、セキュリティ用途では使ってはいけない
- 現在の標準はSHA256。迷ったらSHA256を選べばよい
- ダウンロードファイルのSHA256を公式値と照合することで改ざんを検知できる
- パスワード保存には高速なSHA256は不向き。bcrypt・Argon2が正しい選択