ハッシュ値とは|MD5・SHA-1・SHA-256の違いと用途をやさしく解説
ハッシュ値は、ファイルの改ざん検知やパスワードの安全な保存など、現代のITを支える基礎技術です。本記事では「ハッシュ値とは何か」から、一方向性や固定長といった性質、MD5・SHA-1・SHA-256の違いと用途、ソルト、暗号化との違い、衝突のリスクまでをやさしく解説します。
ソフトウェアをダウンロードしたとき「SHA-256: a1b2c3...」のような長い文字列を見たことはないでしょうか。あるいは、Webサービスにパスワードを登録する場面で「パスワードはハッシュ化して保存しています」という説明を読んだ経験があるかもしれません。これらに共通して登場するのがハッシュ値です。本記事では、ハッシュ値とは何か、どんな性質を持ち、どこで役立っているのかを、初心者にも分かるように順を追って解説します。
ハッシュ値とは何か
ハッシュ値とは、任意のデータ(文字列やファイル)をハッシュ関数という計算手順に通して得られる、固定長の短い値のことです。「ダイジェスト」「メッセージダイジェスト」「指紋(フィンガープリント)」とも呼ばれます。入力がたった1文字違うだけでも、出力されるハッシュ値はまったく異なるものになります。
たとえば「hello」という文字列をSHA-256でハッシュ化すると、64桁の16進数の文字列が得られます。同じ「hello」を入力すれば、いつ、どの環境で計算しても必ず同じハッシュ値になります。これは、ハッシュ関数が決まった計算ルールに従う点で、データの「要約」や「身分証明」として使えることを意味します。
重要なのは、ハッシュ値そのものはデータを「縮めて保存する圧縮」ではないという点です。ハッシュ値から元のデータを復元することはできません。あくまで「このデータには、この値が対応する」という対応関係を作るための仕組みだと理解するとよいでしょう。
ハッシュ値の3つの性質
ハッシュ関数が役に立つのは、次の3つの性質を備えているからです。これらは安全なハッシュ関数に求められる基本的な条件でもあります。
- 固定長:入力が1文字でも巨大な動画ファイルでも、出力されるハッシュ値の長さは常に一定です。たとえばSHA-256なら、何を入力しても256ビット(16進数で64文字)になります。
- 一方向性:データからハッシュ値を計算するのは簡単ですが、ハッシュ値から元のデータを逆算することは事実上不可能です。この「戻せない」性質が、パスワード保存などの安全性を支えています。
- 雪崩効果:入力をほんの少し変えただけで、出力されるハッシュ値が大きく変化します。1文字、あるいは半角スペース1つの違いでも、まったく別の値になります。
さらに、優れたハッシュ関数は衝突が起きにくいことも求められます。衝突とは、異なる2つのデータが偶然同じハッシュ値になってしまうことです。詳しくは後述しますが、衝突しにくいことが「データの同一性を保証する」根拠になります。
同じ入力 → 必ず同じ出力/少しでも違う入力 → まったく違う出力
MD5・SHA-1・SHA-256の違い
ハッシュ関数にはさまざまな種類(アルゴリズム)があります。代表的な3つを比較してみましょう。
| アルゴリズム | 出力長 | 安全性の現状 |
|---|---|---|
| MD5 | 128ビット(32文字) | 衝突が発見済み。安全性が必要な用途では非推奨 |
| SHA-1 | 160ビット(40文字) | 衝突が実証済み。署名など重要用途では非推奨 |
| SHA-256 | 256ビット(64文字) | 現在広く使われ、安全と考えられている |
MD5は古くから使われてきた高速なアルゴリズムですが、異なるデータから同じハッシュ値を意図的に作り出せること(衝突攻撃)が判明しており、改ざん検知やセキュリティ用途には適しません。ただし、通信エラー程度の単純な破損チェックなど、悪意を想定しない場面ではいまも使われることがあります。
SHA-1もかつて広く使われましたが、2017年に現実的なコストで衝突を作り出せることが実証され、電子署名や証明書といった重要な用途からは退役が進んでいます。
SHA-256はSHA-2ファミリーの一つで、現在もっとも標準的に使われているハッシュ関数です。十分な出力長を持ち、現実的な計算能力では衝突を見つけられないと考えられているため、ファイルの改ざん検知やブロックチェーンなど幅広い分野で採用されています。新たに用途を選ぶならSHA-256(またはより長いSHA-512)が基本です。
実際に各アルゴリズムでハッシュ値がどう変わるかは、ハッシュ生成ツールで文字列を入力して見比べてみるのが分かりやすいでしょう。同じ入力でもアルゴリズムによって長さや値がまったく異なることを、その場で確認できます。
何に使われるのか:改ざん検知とパスワード保存
ハッシュ値の代表的な用途は、大きく2つあります。
1. 改ざん検知・完全性の確認
ソフトウェアの配布元が、ファイルと一緒にそのハッシュ値を公開していることがあります。利用者がダウンロードしたファイルのハッシュ値を自分で計算し、公開された値と一致すれば、ファイルが途中で壊れたり改ざんされたりしていないことを確認できます。1ビットでも違えばハッシュ値は大きく変わるため、わずかな書き換えも見逃しません。
2. パスワードの安全な保存
Webサービスは、利用者のパスワードをそのまま保存するのではなく、ハッシュ値に変換して保存します。こうしておけば、万一データベースが流出しても、一方向性により元のパスワードはすぐには分かりません。ログイン時には、入力されたパスワードを同じ方法でハッシュ化し、保存済みの値と一致するかで認証します。
ただし、単純にハッシュ化するだけでは不十分です。同じパスワードは同じハッシュ値になるため、よくあるパスワードの一覧(レインボーテーブル)と照合する攻撃が成立してしまいます。そこで使われるのがソルトです。ソルトとは、パスワードごとに付け加えるランダムな文字列で、これを混ぜてからハッシュ化することで、同じパスワードでも利用者ごとに異なるハッシュ値になります。さらに、パスワード保存には計算をあえて遅くした専用の関数(bcrypt、Argon2など)を使い、総当たり攻撃を困難にするのが現在の定石です。
暗号化との違い
ハッシュは「暗号化」と混同されがちですが、目的も仕組みも異なります。
| ハッシュ | 暗号化 | |
|---|---|---|
| 方向 | 一方向(戻せない) | 双方向(鍵で戻せる) |
| 出力長 | 常に固定長 | 元データの長さに依存 |
| 目的 | 同一性の確認・要約 | 内容の秘匿 |
暗号化は、データを第三者に読めない形に変換し、正しい鍵を使えば元に戻せる(復号できる)技術です。秘密を「隠して、あとで取り出す」ためのものです。一方ハッシュは、元に戻すことを前提としません。「このデータが本物か」「改ざんされていないか」を確かめるためのものです。パスワードをハッシュで保存するのは、まさに「元に戻せない」ことが安全につながるからです。
衝突と安全性
ハッシュ値は固定長なので、表現できる値の種類には上限があります。一方、入力データは無限に作れます。したがって理論上は、異なる入力が同じハッシュ値になる「衝突」が必ず存在します。重要なのは、その衝突を現実的な時間とコストで意図的に作り出せるかどうかです。
MD5やSHA-1は、この衝突を人為的に作る方法が見つかってしまったため、改ざん検知や署名のような「同一性の保証」が命綱となる用途では使えなくなりました。SHA-256は、現在の計算能力では衝突を作るのが現実的でないため、安全と考えられています。とはいえ暗号技術は時間とともに評価が変わるため、用途に応じて推奨されるアルゴリズムを選ぶ姿勢が大切です。
ハッシュ値は、固定長・一方向・雪崩効果という性質によって、ファイルの完全性確認からパスワード保護まで幅広く活躍する基礎技術です。まずはハッシュ生成ツールでさまざまな文字列のハッシュ値を計算し、入力を少し変えたときに値がどれだけ変わるかを体感してみてください。仕組みを目で確かめることが、理解への近道です。
なお本記事は一般的な情報の提供を目的としたものです。実際のシステムでパスワード保存や改ざん検知を実装する際は、最新の公式ドキュメントやセキュリティの専門家の情報を確認し、用途に適した方法を選択してください。
よくある質問
ハッシュ値とは何ですか?
ハッシュ値とは、データ(文字列やファイル)をハッシュ関数に通して得られる固定長の短い値です。同じ入力からは必ず同じ値が得られ、入力が1文字違うだけで値が大きく変わります。データの要約や「指紋」として、改ざん検知やパスワード保存などに使われます。
ハッシュ値から元のデータに戻せますか?
戻せません。ハッシュ関数は一方向性という性質を持ち、データからハッシュ値を計算するのは簡単でも、ハッシュ値から元のデータを逆算することは事実上不可能です。この「戻せない」性質が、パスワードを安全に保存できる理由になっています。
MD5・SHA-1・SHA-256はどう違いますか?
主な違いは出力長と安全性です。MD5は128ビット、SHA-1は160ビット、SHA-256は256ビットです。MD5とSHA-1は衝突を意図的に作れることが判明しており、改ざん検知や署名などの安全性が必要な用途には非推奨です。新たに選ぶならSHA-256が基本です。
ハッシュと暗号化は同じものですか?
異なります。暗号化は鍵を使って元に戻せる双方向の技術で、内容を秘匿するために使います。ハッシュは元に戻せない一方向の技術で、データの同一性確認や要約のために使います。出力長もハッシュは常に固定長である点が大きな違いです。
ハッシュ生成ツールに入力したデータは送信されますか?
WAZA TOOLSのハッシュ生成ツールはすべてブラウザ内で処理され、入力した文字列やデータがサーバーに送信・保存されることはありません。機密性のあるテキストでも安心してハッシュ値を計算できます。