- 任意のデータを固定長の文字列(ハッシュ値・ダイジェスト)に変換する一方向の処理のこと。元のデータに戻すことが計算上不可能という特性を持つ
- パスワードをデータベースに保存する際に平文のまま保存するのではなくハッシュ値として保存することで、DBが流出してもパスワードが直接漏れないというセキュリティ上の仕組みだ
- 同じ入力からは常に同じハッシュ値が生成され、入力が1文字でも変わると全く異なるハッシュ値になるという性質が、パスワード照合・ファイルの改ざん検知・デジタル署名など多用途に活用されている
【深掘り】これだけ知ってればOK!
代表的なハッシュ関数を整理しよう。MD5:128ビットのハッシュ値を生成するが、衝突脆弱性(異なる入力から同じハッシュ値が生成される問題)が発見されており、パスワード保存には使ってはいけない。SHA-256:256ビットで安全性が高く、ファイルの整合性チェックやデジタル署名に広く使われる。bcrypt・Argon2:パスワード保存専用のハッシュ関数で、意図的に計算を遅くしてブルートフォース攻撃への耐性を持つ。
ハッシュ化のセキュリティを強化するための「ソルト(Salt)」を理解しよう。ソルトとはハッシュ化の前にパスワードに付加するランダムな文字列だ。同じパスワードでもソルトが異なると全く異なるハッシュ値になるため、事前に大量のハッシュ値を計算したレインボーテーブル攻撃を無効化できる。bcrypt・Argon2はソルトを自動的に生成・管理する。
ハッシュ関数はファイルの整合性チェックにも活用される。ソフトウェアの公式配布サイトに「SHA-256: abc123…」というハッシュ値が掲載されているのは、ダウンロードしたファイルが改ざんされていないかを確認するためだ。ダウンロード後に自分でハッシュ値を計算して照合することで、途中で悪意のある第三者にファイルを差し替えられていないことを確認できる。
よくある誤解
ハッシュ化=暗号化だと思っている
暗号化は鍵を使って元のデータに戻せる可逆な処理で、ハッシュ化は元に戻すことが計算上不可能な不可逆な処理だ。用途も異なり、暗号化はデータを秘密に保って後で復号するため、ハッシュ化は改ざん検知やパスワード照合のように「同じものかどうか確認するだけでいい場面」に使う。
MD5ハッシュはまだ安全だと思っている
MD5は衝突脆弱性(異なる入力から同じハッシュ値を意図的に生成できる)が証明されており、パスワード保存やデジタル署名への使用は危険だ。現在はSHA-256以上、パスワード保存にはbcrypt・Argon2の使用が標準となっている。
会話での使われ方

このシステム、パスワードをMD5でハッシュ化して保存しています。MD5は脆弱なので今すぐbcryptに切り替えてください。
セキュリティエンジニアがパスワード保存方式の問題を開発チームに指摘している場面。




ダウンロードしたファイルのSHA-256ハッシュ値を公式サイトの値と照合しました。一致しているので改ざんされていません。
インフラエンジニアがソフトウェアのインストール前にファイルの整合性を確認している場面。




パスワードをDBに保存するときはbcryptを使ってください。ソルトの生成も自動でやってくれます。
バックエンドエンジニアが新人にパスワードの安全な保存方法を教えている場面。
【まとめ】3つのポイント
- 元のデータに戻せない一方向変換でパスワードを安全に保存:ハッシュ化の不可逆性により、DBが流出してもハッシュ値から元のパスワードを復元することが計算上不可能になる
- パスワード保存にはbcrypt・Argon2を使いMD5・SHA-1は禁止:汎用ハッシュ関数(MD5・SHA-1)は高速すぎてブルートフォース攻撃に弱いため、パスワード保存専用の遅いハッシュ関数(bcrypt・Argon2)を使うことが現代の標準だ
- ソルトを付加してレインボーテーブル攻撃を無効化する:ランダムなソルトを付加してハッシュ化することで、同じパスワードでも異なるハッシュ値になりレインボーテーブルによる一括解析を防げる
よくある質問
-
Qハッシュ化とエンコードの違いは何ですか?
-
A
エンコード(Base64など)はデータを別の形式に変換するもので、デコードで元に戻せます。ハッシュ化は元に戻すことが計算上不可能な一方向処理です。Base64は暗号化でもハッシュ化でもなく単なる形式変換のため、機密データの保護には使えません。
-
Q同じパスワードは常に同じハッシュ値になりますか?
-
A
SHA-256などの一般的なハッシュ関数は同じ入力から常に同じハッシュ値を生成します。ただしbcryptはソルトを付加するため、同じパスワードでも毎回異なるハッシュ値になります。bcryptの照合はハッシュ値の中にソルト情報も含まれているため正しく比較できます。
-
Qハッシュ化されたパスワードは絶対に解読できませんか?
-
A
計算上不可能という意味で安全ですが、弱いパスワードはレインボーテーブル攻撃や辞書攻撃で解析される可能性があります。強力なパスワード+bcrypt・Argon2+ソルトの組み合わせで現実的な時間での解析を防ぎます。
-
Qハッシュ化とデジタル署名はどう関係しますか?
-
A
デジタル署名はハッシュ化を内部で使っています。署名対象のデータのハッシュ値を計算して、そのハッシュ値を秘密鍵で暗号化したものが署名です。受信者はデータのハッシュ値を計算して署名の公開鍵復号値と比較し、改ざんがないことを確認します。
この用語と一緒に知っておきたい用語
| 用語 | この記事との関連 |
|---|---|
| パスワード | 本記事のテーマと実務上セットで使われることが多い用語です。アカウントの持ち主が本人かどうかを確かめるための、本人だけが知る合言葉、それがパスワードだ |
| データ | 本記事のテーマと実務上セットで使われることが多い用語です。コンピュータが処理する数値や文字、画像といった事実や資料そのもの、それがデータだ |
| 暗号化 | 次のステップとして暗号化を学ぶと知識が広がります。データを特定の鍵(アルゴリズム)を使って第三者には読めない形式に変換する技術。鍵を持つ者だけが元のデータ(平文)に戻せる(復号できる) |
| ハッシュ関数 | ハッシュ関数を押さえると本記事の理解がさらに深まります。任意の長さのデータを固定長のハッシュ値に変換する一方向関数。元のデータに戻せない(不可逆)という性質が最大の特徴だ |
| デジタル署名 | デジタル署名は関連分野でよく登場する重要キーワードです。電子文書の送信者が本人であること・文書が改ざんされていないことの両方を公開鍵暗号を使って証明する技術だ |
【出典】参考URL
https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html :OWASPパスワード保存チートシート
https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-63b.pdf :NIST SP 800-63Bパスワードガイドライン
https://argon2.online :Argon2の公式サイト


コメント