ハッシュ値とは?MD5・SHA-256の違いと使い方をわかりやすく解説
ハッシュ値の仕組み、代表的なアルゴリズムの違い、ファイル検証やセキュリティでの活用方法を解説します。
ハッシュ値とは
ハッシュ値(ハッシュ、ダイジェスト)とは、任意のデータを一定長の文字列に変換したものです。ハッシュ関数と呼ばれるアルゴリズムを使って計算され、元のデータが少しでも変わるとまったく異なるハッシュ値が生成されます。
この性質を利用して、ファイルの改ざん検知、パスワードの安全な保存、デジタル署名などに広く使われています。
ハッシュ関数の特徴
- 固定長出力:入力データのサイズに関係なく、常に同じ長さのハッシュ値が出力される
- 一方向性:ハッシュ値から元のデータを復元することはできない(不可逆)
- 衝突耐性:異なるデータから同じハッシュ値が生成される(衝突)確率が極めて低い
- 雪崩効果:入力が1ビットでも変わると、出力が大きく変化する
主なハッシュアルゴリズムの比較
| アルゴリズム | 出力長 | 安全性 | 備考 |
|---|---|---|---|
| MD5 | 128ビット(32文字) | 非推奨 | 衝突攻撃が実証済み。セキュリティ用途には使わない |
| SHA-1 | 160ビット(40文字) | 非推奨 | 2017年にGoogleが衝突を実証(SHAttered) |
| SHA-256 | 256ビット(64文字) | 推奨 | SHA-2ファミリー。現在の標準。ビットコインでも使用 |
| SHA-384 | 384ビット(96文字) | 推奨 | SHA-256より長い出力。より高い安全性 |
| SHA-512 | 512ビット(128文字) | 推奨 | 64ビットCPUで高速。最も長い出力 |
MD5とSHA-1はセキュリティ上の脆弱性が確認されているため、パスワードの保存や電子署名には使用しないでください。ファイルの簡易的なチェックサム確認には今でも使われることがあります。
ハッシュ値の主な用途
1. ファイルの改ざん検知
ソフトウェアの配布サイトでは、ダウンロードファイルのハッシュ値(チェックサム)が公開されていることがあります。ダウンロード後にハッシュ値を計算し、公開されている値と一致するか確認することで、ファイルが改ざんされていないことを検証できます。
2. パスワードの保存
Webサービスでは、パスワードをそのまま保存せず、ハッシュ値に変換して保存するのが一般的です。ログイン時に入力されたパスワードのハッシュ値と保存済みのハッシュ値を比較することで、元のパスワードを保存せずに認証が行えます。実際にはソルト(ランダムな文字列)を付加してからハッシュ化するなど、さらに安全な手法が使われます。
3. デジタル署名
電子文書のデジタル署名では、文書全体ではなくそのハッシュ値に対して署名を行います。これにより、署名処理の高速化と、文書の改ざん検知が同時に実現されます。
4. データの重複検出
クラウドストレージやバックアップシステムでは、ファイルのハッシュ値を比較することで、同一ファイルの重複保存を防ぐ「重複排除(deduplication)」が行われています。
ハッシュ値の計算例
「Hello」という文字列のハッシュ値の例です。同じ入力からは常に同じハッシュ値が得られます。
8b1a9953c4611296a827abf8c47804d7185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969「Hello」を「hello」に変えるだけで、まったく異なるハッシュ値になります(雪崩効果)。