暗号
暗号学的ハッシュ関数
別称: ハッシュ関数, メッセージダイジェスト
定義
任意長の入力を固定長のダイジェストへ写す決定的な一方向関数で、衝突耐性・原像耐性・第二原像耐性を備える。
暗号学的ハッシュ関数は、任意長の入力を固定長の出力(ダイジェスト)に圧縮し、原像耐性(H(x) から x を求めにくい)、第二原像耐性(x が与えられたとき H(x') = H(x) となる x' ≠ x を見つけにくい)、衝突耐性(同じハッシュを持つ任意の x ≠ x' を見つけにくい)を満たします。決定的で高速、出力は擬似ランダムに見えます。デジタル署名、MAC(HMAC、KMAC)、Argon2 や scrypt などの KDF と組み合わせたパスワード保存、完全性チェック、マークル木、ブロックチェーン、コンテンツアドレッシングなどの基盤です。MD5 や SHA-1 は実用的な衝突が見つかっており破られているため、セキュリティ目的では使用できません。現代の推奨は SHA-256、SHA-3、BLAKE2/BLAKE3 などの系統です。
例
- Git は SHA-1(SHA-256 への移行中)でコミットやオブジェクトを識別する。
- TLS 証明書のフィンガープリントは通常 SHA-256 ハッシュ。
関連用語
MD5
Ron Rivest が 1992 年に設計した 128 ビットの暗号学的ハッシュ関数。実用的な衝突が容易に作れる「破られた」アルゴリズムであり、セキュリティ用途では使用してはならない。
HMAC
RFC 2104 と FIPS 198-1 で定義された、暗号学的ハッシュ関数を土台とする鍵付きメッセージ認証コード(MAC)構造。
デジタル署名
メッセージや文書の真正性・完全性・否認防止を証明する公開鍵暗号方式のメカニズム。
メッセージ認証コード(MAC)
共有秘密鍵で計算・検証される短い対称鍵タグで、メッセージの認証と改ざん検知を行う仕組み。
ソルト
ハッシュ計算前にパスワードへ付加する一意のランダム値で、レインボーテーブルを無効化し各ユーザーのハッシュを別物にする仕組み。
鍵導出関数(KDF)
パスワードや共有秘密、マスター鍵などの秘密入力から、1 つまたは複数の強力な暗号鍵を導出する暗号関数。