ファイルのダウンロードページで SHA-256: a3f9c2d1... のような文字列を見たことはないでしょうか。これは ハッシュ値(チェックサム) と呼ばれるもので、ファイルの整合性を確認するために使われています。

この記事では、ハッシュ関数の仕組みと主要なアルゴリズム(MD5・SHA-1・SHA-256・SHA-512)の違い、よくある使いどころと注意点を整理します。

ハッシュ関数とは

ハッシュ関数とは、任意の長さのデータを固定長の文字列(ハッシュ値)に変換する関数です。入力が1文字でも1GBのファイルでも、出力は常に同じ長さになります。

ハッシュ関数の重要な特性が2つあります。

これにより、「ハッシュ値が一致すれば、元データも同じ」という検証が成り立ちます。

主要なハッシュアルゴリズムの比較

アルゴリズム出力長状態主な用途
MD5128 bit(32文字)非推奨(セキュリティ用途)ファイルのチェックサム、データ整合性
SHA-1160 bit(40文字)非推奨(セキュリティ用途)Git のコミットハッシュ、レガシーシステム
SHA-256256 bit(64文字)現在の標準デジタル署名、JWT、TLS 証明書
SHA-512512 bit(128文字)高セキュリティ向けセキュリティ強度が特に求められる用途

同じ入力に対して各アルゴリズムで生成したハッシュ値の例(「hello」の場合):

MD5:     5d41402abc4b2a76b9719d911017c592
SHA-1:   aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
SHA-256: 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
SHA-512: 9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043

よくある使いどころ

ファイルの整合性確認(チェックサム)

ダウンロードしたファイルが改ざん・破損していないかを確認するために使われます。配布元が公開しているハッシュ値とダウンロードしたファイルのハッシュ値を比較します。

# macOS / Linux でのハッシュ確認
shasum -a 256 downloaded-file.zip
# → a3f9c2d1... downloaded-file.zip

# 配布元の値と一致すれば改ざんなし

データベースへのデータ保存と重複チェック

同じ内容のファイルやデータを重複して保存しないよう、ハッシュ値をキーとして管理する手法があります(コンテントアドレッサブルストレージ)。Git のオブジェクト管理もこの仕組みを利用しています。

デジタル署名・TLS 証明書

SHA-256 は TLS(HTTPS)のサーバー証明書や電子署名の基盤として広く使われています。ドキュメントや通信の完全性を保証するために、ハッシュ値に対して署名が行われます。

JWT の署名(HMAC-SHA256)

JWT の署名アルゴリズム HS256 は、SHA-256 ベースの HMAC(Hash-based Message Authentication Code)です。ペイロードの改ざんを検出するために使われています。

パスワードにハッシュを使う場合の注意点

パスワードの保存に MD5 や SHA-256 を直接使ってはいけません。 これらの汎用ハッシュ関数は高速に計算できるため、レインボーテーブル攻撃やブルートフォース攻撃に弱いです。

パスワードのハッシュ化には、意図的に計算コストを高くした専用アルゴリズムを使ってください。

アルゴリズム特徴
bcryptコストファクター調整可能。広く実績あり
Argon2メモリ負荷型。現在のベストプラクティス
scryptメモリ&CPU 負荷型
PBKDF2ストレッチング回数調整可能

MD5 や SHA-1 が「非推奨」な理由

MD5 と SHA-1 は、異なる入力から同じハッシュ値を生成する「衝突」が実際に発見されています。これにより、ファイルを改ざんしてもハッシュ値が変わらないケースが現実に起こり得ます。

ただし、ファイルの単純なチェックサム(転送エラーの確認など)のような非セキュリティ用途では、速度の優位性から今でも MD5 が使われているケースがあります。セキュリティが要件でなければ許容される場合もありますが、新規システムでは SHA-256 以上を選ぶのが無難です。

ハッシュ生成ツール MD5・SHA-1・SHA-256・SHA-512 をリアルタイムで生成。ブラウザ完結。
ツールを使う →

まとめ

関連記事