ハッシュ関数とは
ハッシュ関数は、任意の長さのデータを固定長の文字列(ハッシュ値・ダイジェスト)に変換する一方向関数です。「一方向」とは、ハッシュ値から元のデータを復元することが計算上不可能であることを意味します。
主要なハッシュアルゴリズム
- MD5:128ビット。高速だが衝突脆弱性が発見されており、セキュリティ用途には非推奨。ファイルの簡易チェックサムには今も使われる。
- SHA-1:160ビット。Gitのコミットハッシュで使われているが、衝突攻撃が実証されており新規利用は避けるべき。
- SHA-256:256ビット。現在最も広く使われる安全なハッシュ。TLS・JWT・ブロックチェーンで標準採用。
- SHA-3(Keccak):SHA-2とは異なる設計思想。Ethereumのスマートコントラクトで使用。
パスワード保存での注意点
パスワードをSHA-256でハッシュ化しても安全ではありません。レインボーテーブル攻撃に脆弱なためです。パスワードの保存にはbcrypt・Argon2・scryptなどの専用アルゴリズムを使用し、ソルト(ランダムな付加文字列)を加えてください。
ファイル整合性の検証
ダウンロードしたファイルが改ざんされていないか確認するために、公式サイトが公開するSHA-256ハッシュと照合します。
sha256sum downloaded-file.zip
# 公式が公開したハッシュ値と一致すれば安全
ハッシュの衝突とは
異なる入力から同じハッシュ値が生成される現象を「衝突」と言います。MD5やSHA-1では人為的に衝突を引き起こせることが証明されており、セキュリティ上の問題となります。SHA-256以上では現時点で実用的な衝突攻撃は知られていません。