Hashing

ハッシュ(Hashing)は、任意(にんい)(なが) さのデータを固定(こてい) (なが)要約(ようやく)変換(へんかん) する一方向(いっぽうこう) 関数(かんすう) で、(もと) のデータを復元(ふくげん) することはできません。

ハッシュアルゴリズムの分類

暗号学的ハッシュ関数

データの完全性(かんぜんせい) 検証(けんしょう) 、デジタル署名(しょめい) などのシーンで使用(しよう) されます。

アルゴリズム出力長状態備考
MD5128 bits❌ 安全でない衝突攻撃が存在、チェックサムにのみ使用
SHA-1160 bits❌ 安全でない2017年に実際の衝突攻撃が成功
SHA-256256 bits✅ 安全SHA-2ファミリー、広く使用
SHA-512512 bits✅ 安全SHA-2ファミリー、高セキュリティ要件に適合
SHA-3可変✅ 安全Keccakアルゴリズム、最新標準

パスワード保存専用

計算(けいさん)(おそ) くなるよう設計(せっけい) され、ブルートフォース攻撃(こうげき)抵抗(ていこう) します。

アルゴリズム特徴推奨パラメータ
bcrypt内蔵salt、cost調整可能cost ≥ 10
scrypt高メモリ消費、GPU耐性N=2^14, r=8, p=1
Argon22015年パスワードハッシュコンペ優勝Argon2id、memory ≥ 64MB
パスワード保存(ほぞん) には bcrypt、scrypt または Argon2 を使用(しよう) すべきで、MD5、SHA-1 または単純(たんじゅん) な SHA-256 は**絶対(ぜったい)使用(しよう) しないでください**。

メッセージ認証コード(MAC)

(かぎ) とハッシュ関数(かんすう)()() わせ、メッセージの完全性(かんぜんせい)送信元(そうしんもと)真正性(しんせいせい)確保(かくほ) します。

アルゴリズム説明
HMAC-SHA256SHA-256を使用したHMAC
HMAC-SHA512SHA-512を使用したHMAC
CMACブロック暗号ベースのMAC(AESなど)

非暗号学的ハッシュ

高速(こうそく) 検索(けんさく) 、データシャーディングに使用(しよう) され、セキュリティシーンには不向(ふむ) きです。

アルゴリズム特徴用途
CRC32高速、エラー検出ファイルチェックサム
MurmurHash高速、均等分布Hash Table、シャーディング
xxHash超高速大量データの高速ハッシュ
FNVシンプルな実装Hash Table

使用シーン対照

シーン推奨アルゴリズム
パスワード保存Argon2id / bcrypt
API署名HMAC-SHA256
ファイル完全性SHA-256
Git commit IDSHA-1(歴史的理由)
データシャーディングMurmurHash / xxHash
重複ファイル検出SHA-256