「パスワードはハッシュ化して保存する」——エンジニアなら一度は聞いたことがある言葉だと思います。この記事では、Lapis Tech Toolsの ハッシュ生成ツール を題材に、ハッシュ化の仕組みと、アルゴリズムごとの違いを解説します。
ハッシュ化と暗号化はなぜ違うのか
「暗号化」と「ハッシュ化」はよく混同されますが、決定的な違いが1つあります。
- 暗号化: 鍵を使って元に戻せる(復号できる)
- ハッシュ化: 元のデータに復元できない(不可逆)
データベースにユーザーのパスワードをそのまま保存すると、万が一情報漏洩した際に全ユーザーのパスワードがそのまま流出してしまいます。そのため、パスワードは不可逆なハッシュ値に変換してから保存するのが現代の標準的な設計です。ログイン時は「入力されたパスワードを同じ方式でハッシュ化し、保存されているハッシュ値と一致するか」を比較することで認証します。
4つのアルゴリズムの違い
このツールではcrypto-jsというライブラリを使い、1つの入力に対して4種類のハッシュ値を同時に計算しています。
import CryptoJS from 'crypto-js';
outSha256.value = CryptoJS.SHA256(val).toString();
outSha512.value = CryptoJS.SHA512(val).toString();
outSha1.value = CryptoJS.SHA1(val).toString();
outMd5.value = CryptoJS.MD5(val).toString();
| アルゴリズム | 出力長 | 現在の位置づけ |
|---|---|---|
| MD5 | 128bit | 非推奨。衝突(異なる入力から同じハッシュ値が生成される現象)が実際に発見されており、パスワード保存には使うべきではない |
| SHA-1 | 160bit | 非推奨。Gitのコミットハッシュ等では今も使われるが、暗号学的な安全性の観点では既に破られている |
| SHA-256 | 256bit | 推奨。現在最も広く使われている標準的なアルゴリズム |
| SHA-512 | 512bit | 推奨。SHA-256よりさらに強固。処理負荷は増えるが64bit環境では高速に動作しやすい |
MD5・SHA-1が非推奨とされる最大の理由は「ハッシュの衝突」です。異なる2つの入力から同じハッシュ値が生成されてしまうと、悪意ある入力を正規のデータに偽装できてしまう可能性があります。SHA-1については研究機関による実際の衝突攻撃の実証例も報告されており、パスワード保存はもちろん、デジタル署名などのセキュリティ用途での利用は避けるべきとされています。
一方で、SHA-1はGitのコミットハッシュのように「意図的な衝突を狙われにくい用途」では今も現役で使われています。ハッシュ関数は「何に使うか」によって求められる安全性のレベルが変わる、という点も実務では押さえておきたいポイントです。
実務での主な使いどころ
- パスワードの整合性チェック: 「このパスワードは以前と同じか」を、平文を保持せずに確認する
- ファイルの改ざん検知: ダウンロードしたファイルのSHA-256値が配布元の公式値と一致するか確認する
- APIキー・トークンの一意な識別子生成: 元データを推測されずに識別子として使う
実際の本番システムでパスワードを保存する場合は、この記事で紹介したSHA-256等の単純なハッシュ関数だけでなく、bcryptやArgon2のような「意図的に計算コストを高くした」パスワード用ハッシュ関数を使うのが現在のベストプラクティスです(総当たり攻撃への耐性を高めるため)。
まとめ
ハッシュ化は「元に戻せない変換」という性質を利用して、パスワードやファイルの整合性を安全に扱うための技術です。
- MD5・SHA-1は衝突のリスクがあり非推奨
- SHA-256・SHA-512が現在の標準
- パスワード保存には、さらにbcrypt等の専用アルゴリズムが望ましい
という点を押さえた上で、ハッシュ生成ツールでブラウザ完結・データ送信なしで手軽に試してみてください。
関連記事
CHECK IT OUT
サブスク加入者限定の
コンテンツを配信中
- 毎月のAI・自動化トレンドレポート
- クリエイター向け業務効率化テンプレート
- ツール選定・SaaS比較まとめ(限定公開)
「これ自動化できないかな?」
そのアイデア、ITで実現できます。
業務の自動化・お客様向けツール開発・AI活用まで、クリエイター・個人事業主専門のITコンサルタントが対応します。まずは気軽にご相談ください。