Hash 関数の比較:MD5、SHA-1、SHA-256、CRC32
hash 関数は任意の入力を固定長の指紋に圧縮する。同一ファイルは常に同一文字列を生み、わずかな変更は雪崩のようにまったく異なる値に化ける。この1つの性質が、破損検出、コンテンツ指紋、そして追加の仕組みと組み合わせたパスワード保護という3つの異なる仕事を支える。
1. ファイル用チェックサム:MD5、SHA-1、SHA-256
ダウンロードページがチェックサムを公開するのは、ファイルが無事に届いたか確認させるためである。自分のコピーを hash 化して文字列を比べればよい。MD5 は最速であり、偶発的な破損の検査には今も十分である。SHA-1 は中間に位置し、SHA-256 は重要な場面の現在のデフォルトである。速度差が現れるのはギガバイト級のファイルだけである。
2. セキュリティ的には broken、完全性には問題なし
MD5 と SHA-1 は意図的な攻撃者の前では粉砕されている。研究者は同一 MD5 を持つ2つの異なるファイルを生成でき、SHA-1 も数年前に実践的な衝突で陥落した。よって署名、証明書、パスワード保存に使ってはならない。ただし Linux ISO のダウンロードに攻撃者が潜んでいるわけではなく、純粋な破損検出には今も申し分なく使える。
3. パスワードには遅さが必要であり、速さではない
高速 hash はパスワードの保存には誤った道具である。攻撃者が1秒に数十億の推測を試せるからである。真のパスワード保存は、遅く、salt 付きで、メモリを食う専用関数を使う。パスワードの MD5 保存を説くチュートリアルに出会ったら、そのチュートリアルを閉じるべきである。
4. CRC32 と HMAC、簡潔に
CRC32 はそもそも暗号学的 hash ではない。ネットワークや ZIP ファイル由来の高速な誤り検出符号であり、伝送の乱れの発見には優れるが、偽造に対しては無力である。対照的に HMAC は秘密 key を hash に混ぜるため、受信者は完全性と真正性の両方を検証できる。our hash generator で自分のテキストやファイルに対してこれらすべてを試せる。計算はすべてブラウザ内でローカルに行われる。