ハッシュ関数とは(全体像)
ハッシュ関数は、入れたデータを決まった長さの短い値に変換するしくみ。この出てきた値をハッシュ値といい、データの「指紋」のようなものだと考えるとわかりやすい。
ポイントは、同じデータからは必ず同じ指紋ができ、少しでも中身が変わると指紋がまるごと変わること。だから「データが書き換えられていないか」のチェックに使える。
暗号と似ているが、決定的に違うのは元に戻せない(一方向)という点。暗号は鍵で元に戻すが、ハッシュは戻せない。
詳しく:3つの性質と代表を押さえる
ここが心臓部。ハッシュ関数の大事な性質は3つ。
ハッシュ関数の3つの性質
| 性質 | 意味 |
|---|---|
| 一方向性 | 指紋(ハッシュ値)から、元のデータは復元できない |
| 衝突耐性 | 違うデータが、たまたま同じ指紋になることが起きにくい |
| 雪崩効果 | 入力を1ビット変えるだけで、指紋がまるごと変わる |
代表的なハッシュ関数と、その立ち位置は次のとおり。
おもなハッシュ関数
| 名前 | 立ち位置 |
|---|---|
| SHA-2(SHA-256など) | いまの主流・推奨。SSL証明書やビットコインで使用 |
| SHA-3 | SHA-2の後継候補(2015年に標準化) |
| MD5・SHA-1 | 同じ指紋を作る抜け道が見つかり廃止 |
言葉を噛み砕いておく。
- 一方向性 … シュレッダーにかけた紙を元に戻せないのと同じで、指紋から元データは作れない。
- 衝突 … 違うデータが同じ指紋になってしまうこと。これが見つかると、なりすましや改ざんに悪用できてしまう。MD5やSHA-1は衝突が見つかったため廃止された。
- パスワードの保存 … パスワードそのものではなく、その指紋だけを保存する。さらにソルト(各人ごとの隠し味)とストレッチング(何度も繰り返してわざと時間をかける)を組み合わせる。いまはbcryptやArgon2が使われる。
わかりやすく言い換えると
つまり、ハッシュ関数は書類の「指紋」を作る機械にたとえるとスッと入る。
どんなに分厚い書類でも、機械に通すと決まった長さの指紋が出てくる。同じ書類なら指紋も同じ。でも、1文字でも書き換えると指紋がガラッと変わる(雪崩効果)ので、改ざんがすぐ見つかる。
指紋から元の書類は作れない(一方向)し、違う書類が同じ指紋になることもまず起きない(衝突耐性)。MD5やSHA-1は、この「指紋がかぶる抜け道」が見つかってしまったので引退した、というわけだ。
試験のツボ
🔴 一番出る:ハッシュ関数の3つの性質
①一方向性=指紋から元データは戻せない
②衝突耐性=違うデータが同じ指紋になりにくい/雪崩効果=1ビットで全変化
🔴 次に出る:主流と廃止
①主流はSHA-2(SHA-256)・後継候補にSHA-3
②MD5・SHA-1は衝突が見つかり廃止
🟡 押さえると安定:パスワードは指紋で保存し、bcryptやArgon2(ソルト+ストレッチング)を使う
よくある間違い
①「ハッシュ値から元のデータを復元できる」→ ✗ ハッシュは一方向で、元には戻せない。鍵で戻せる暗号とはここが違う。
②「MD5やSHA-1はいまも安全な主流」→ ✗ どちらも衝突が見つかり廃止。いまの主流はSHA-2(SHA-256)。
③「パスワードはそのまま保存すればよい」→ ✗ そのままではなく指紋で保存し、bcryptやArgon2を使うのが基本。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(ハッシュ関数の性質)
ハッシュ関数に関する次の記述のうち、正しいものはどれか。
- ハッシュ関数は一方向で、指紋(ハッシュ値)から元のデータを復元することはまずできないしくみである
- ハッシュ関数は鍵さえあれば指紋から元のデータをたやすく完全に復元できる、暗号と同じしくみとされる
- ハッシュ関数は入力を1ビット変えても指紋はまったく変わらず、つねに同じ値を返すしくみとされている
- ハッシュ関数は入力のデータが大きいほど指紋も長くなり、長さがそのつど変わってしまうしくみとされる
解答は 1 である。
ハッシュ関数は一方向で、指紋(ハッシュ値)から元のデータは復元できない。シュレッダーにかけた紙を戻せないのと同じイメージだ。
選択肢2は「鍵で復元できる」が誤りで、それは暗号の話。選択肢3は雪崩効果(1ビットで全変化)に反する誤り。選択肢4は「指紋の長さが変わる」が誤りで、ハッシュ値は決まった長さになる。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | 一方向で元に戻せないで正しい |
| 2 | ✗ | 鍵で戻せるのは暗号 |
| 3 | ✗ | 1ビット変えると指紋は全変化する |
| 4 | ✗ | 指紋は決まった長さになる |
オリジナル問題2(主流と廃止)
ハッシュ関数の種類に関する次の記述のうち、正しいものはどれか。
- MD5とSHA-1はいまも最も安全なハッシュ関数であり、SSL証明書の標準として広く推奨されているとされる
- ハッシュ関数はSHA-256ただ一種類しか存在せず、SHA-3やSHA-1といった別の方式は定められていないとされる
- いまの主流はSHA-2(SHA-256など)で、MD5やSHA-1は衝突が見つかったため廃止された使い方とされている
- ハッシュ関数はどれを選んでも安全性は完全に同じで、古い方式と新しい方式に違いはまったくないとされている
解答は 3 だ。
いまの主流はSHA-2(SHA-256など)で、後継候補にSHA-3がある。MD5やSHA-1は、違うデータが同じ指紋になる衝突が見つかったため廃止された。
選択肢1は「MD5・SHA-1が最も安全」が誤り。選択肢2は「SHA-256だけ」が誤りで、複数ある。選択肢4は「どれも同じで違いがない」が誤りだ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | MD5・SHA-1は衝突が見つかり廃止 |
| 2 | ✗ | SHA-3など複数の方式がある |
| 3 | ✓ | 主流はSHA-2・MD5/SHA-1は廃止で正しい |
| 4 | ✗ | 古い方式と新しい方式で安全性が違う |
オリジナル問題3(パスワードの保存)
パスワードの保存に関する次の記述のうち、正しいものはどれか。
- パスワードは入力されたそのままの文字を保存するのが最も安全で、変換などはいっさい不要とされている
- パスワードは指紋(ハッシュ値)で保存し、ソルトやストレッチングを使うbcryptやArgon2が用いられる
- パスワードの保存にはECBモードの暗号を使うのが現代の標準で、ハッシュ関数はまったく使われないとされているのだ
- パスワードは保存せずに毎回口頭で本人へ伝える運用が世界標準で、システムに記録してはならないとされる
解答は 2 だ。
パスワードは、そのままではなく指紋(ハッシュ値)で保存する。さらにソルト(各人ごとの隠し味)とストレッチング(繰り返して時間をかける)を組み合わせるbcryptやArgon2が使われる。
選択肢1の「そのまま保存」は危険で誤り。選択肢3のECBはAESのモードの話で、パスワード保存の標準ではない。選択肢4の「口頭で伝える運用が世界標準」も誤りだ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | そのまま保存は危険 |
| 2 | ✓ | 指紋で保存・bcrypt/Argon2で正しい |
| 3 | ✗ | ECBはAESのモードで別の話 |
| 4 | ✗ | 口頭運用が標準という事実はない |
まとめ
押さえどころ
- 🔴 ハッシュ関数 = どんなデータからも決まった長さの「指紋」を作る。性質は一方向性・衝突耐性・雪崩効果。
- 🔴 主流はSHA-2(SHA-256)、後継候補にSHA-3。MD5・SHA-1は衝突が見つかり廃止。
- 🟡 パスワードは指紋で保存し、bcryptやArgon2(ソルト+ストレッチング)を使う。
次に学ぶ
- RSA・ECC(公開鍵暗号) ── 署名のときにハッシュと組み合わせて使う、鍵が2つの暗号。
- AES・共通鍵暗号 ── ハッシュと並んで、データの機密を守る暗号のしくみ。
- TLS 1.3(HTTPS) ── 証明書や改ざん検知でハッシュが使われる、ウェブ通信のしくみ。
執筆: SikakuQuest編集部