日本には政府情報システムで推奨される暗号技術を評価・公表する組織、CRYPTREC(Cryptography Research and Evaluation Committees)がある。その「電子政府推奨暗号リスト」ではSHA-256以上のSHA-2系列とSHA-3系列が推奨されており、MD5とSHA-1は「新規利用は推奨しない」運用監視暗号リストに分類されている。ソフトウェア配布時にどのハッシュ値を掲載すべきか迷ったときの実務上の目安になっている。
チェックサムが破損をどう検出するか
ハッシュ関数の雪崩効果により、転送中にたった1バイトが破損しただけでも、計算されるファイルのハッシュは完全に変わります。そのため、期待されるチェックサムと計算されたチェックサムの間に少しでも食い違いがあれば、それはファイルがオリジナルとバイト単位で異なることを明確に意味します。
チェックサムが保証しないこと
ハッシュが一致することは、そのファイルが公開されたハッシュの計算元となったファイルと同一であることを確認するだけであり、そのオリジナルが安全であることを確認するわけではありません。攻撃者がファイルと公開されたチェックサムを同時に差し替えた場合、検証では何も検出されません。
チェックサムとデジタル署名の違い
チェックサムとは異なり、デジタル署名は秘密鍵で作成され、対応する公開鍵でしか検証できません——これは整合性だけでなく、ソースの真正性も確認します。CRYPTRECのリストでも、出所の証明が必要な場面ではハッシュ値の掲載だけでなく電子署名の利用が前提とされています。
なぜこれが必要か
- ダウンロードしたアーカイブやOSイメージがダウンロード中に破損していないことを確認する。
- バイト単位で比較することなく、2つの大きなファイルを素早く比較する。
- ファイルのバックアップコピーがオリジナルと同一であることを確認する。
なぜSHA-256の代わりにCRC32が使われることがあるのか
CRC32は暗号学的ハッシュ関数よりもはるかに高速ですが、意図的に偽造するのは簡単です——これは転送中の偶発的な破損を検出する用途では問題になりませんが、ファイルを気づかれずにすり替えようとする攻撃者からの保護には向いていません。そのため、CRC32は今もアーカイバやネットワークプロトコルのエラー制御に使われていますが、CRYPTRECの推奨暗号リストに載ることはありません。