日本ではCRYPTREC(Cryptography Research and Evaluation Committees)が「電子政府推奨暗号リスト」でハッシュ関数を定期的に評価している。SHA-256以上のSHA-2系列とSHA-3系列は推奨リストに、MD5とSHA-1は新規採用を推奨しない「運用監視暗号リスト」に分類されており、新しいシステムでどのアルゴリズムを選ぶべきかの実務的な目安になっている。
すべてのハッシュ関数に共通すること
重要な性質は決定性です:同じ入力データは常に同じハッシュを生成します。2つ目の性質は雪崩効果です:入力のたった1ビットを変えるだけで結果は完全に変わるため、ハッシュから元の2つのファイルがどれほど似ているかを知ることはできません。
MD5とSHA-1が安全でないとされる理由
両アルゴリズムとも、同じハッシュを持つ2つの異なるデータセットを作る実用的な方法が見つかっています——いわゆる衝突です。これにより、暗号学的な強度が重要な場面では不向きになりますが、単なる整合性の迅速な確認だけが必要な場面では今も使われています。
SHA-256とSHA-2ファミリー
SHA-256は256ビットのハッシュを生成し、現在までに知られている実用的な衝突はありません。CRYPTRECの推奨暗号リストでも中心的な位置を占め、ブロックチェーン、TLS証明書、ソフトウェアの整合性検証などで使われています。
なぜこれが必要か
- 公開されたハッシュと比較して、ダウンロードしたファイルの整合性を検証する。
- CRYPTRECの推奨リストと監視リストのどちらにアルゴリズムが分類されているか理解する。
- 大量のデータに対して短く一意な指紋を作成する。
なぜSHA-3はSHA-2を置き換えなかったのか
SHA-3は、将来SHA-2に致命的な脆弱性が見つかった場合に備える「保険」として、NISTの別コンテストで選ばれた勝者です——これは置き換えという意味での後継ではなく、根本的に異なる内部構造(Keccak)に基づくものです。CRYPTRECのリストでもSHA-2とSHA-3は並んで推奨されており、片方を置き換えるものではなく補完し合う関係にあります。