Hashing
ハッシュ(Hashing)は、任意 の長 さのデータを固定 長 の要約 に変換 する一方向 関数 で、元 のデータを復元 することはできません。
ハッシュアルゴリズムの分類
暗号学的ハッシュ関数
データの完全性 検証 、デジタル署名 などのシーンで使用 されます。
| アルゴリズム | 出力長 | 状態 | 備考 |
|---|---|---|---|
| MD5 | 128 bits | ❌ 安全でない | 衝突攻撃が存在、チェックサムにのみ使用 |
| SHA-1 | 160 bits | ❌ 安全でない | 2017年に実際の衝突攻撃が成功 |
| SHA-256 | 256 bits | ✅ 安全 | SHA-2ファミリー、広く使用 |
| SHA-512 | 512 bits | ✅ 安全 | SHA-2ファミリー、高セキュリティ要件に適合 |
| SHA-3 | 可変 | ✅ 安全 | Keccakアルゴリズム、最新標準 |
パスワード保存専用
計算 が遅 くなるよう設計 され、ブルートフォース攻撃 に抵抗 します。
| アルゴリズム | 特徴 | 推奨パラメータ |
|---|---|---|
| bcrypt | 内蔵salt、cost調整可能 | cost ≥ 10 |
| scrypt | 高メモリ消費、GPU耐性 | N=2^14, r=8, p=1 |
| Argon2 | 2015年パスワードハッシュコンペ優勝 | Argon2id、memory ≥ 64MB |
パスワード保存
には bcrypt、scrypt または Argon2 を使用
すべきで、MD5、SHA-1 または単純
な SHA-256 は**絶対
に使用
しないでください**。
メッセージ認証コード(MAC)
鍵 とハッシュ関数 を組 み合 わせ、メッセージの完全性 と送信元 の真正性 を確保 します。
| アルゴリズム | 説明 |
|---|---|
| HMAC-SHA256 | SHA-256を使用したHMAC |
| HMAC-SHA512 | SHA-512を使用したHMAC |
| CMAC | ブロック暗号ベースのMAC(AESなど) |
非暗号学的ハッシュ
高速 検索 、データシャーディングに使用 され、セキュリティシーンには不向 きです。
| アルゴリズム | 特徴 | 用途 |
|---|---|---|
| CRC32 | 高速、エラー検出 | ファイルチェックサム |
| MurmurHash | 高速、均等分布 | Hash Table、シャーディング |
| xxHash | 超高速 | 大量データの高速ハッシュ |
| FNV | シンプルな実装 | Hash Table |
使用シーン対照
| シーン | 推奨アルゴリズム |
|---|---|
| パスワード保存 | Argon2id / bcrypt |
| API署名 | HMAC-SHA256 |
| ファイル完全性 | SHA-256 |
| Git commit ID | SHA-1(歴史的理由) |
| データシャーディング | MurmurHash / xxHash |
| 重複ファイル検出 | SHA-256 |