レッスン 4
よくあるハッシュの誤り
アプリケーションとデバッグで起きがちなハッシュの誤用を避けます。
ハッシュ関連のバグは、正しい考え方を間違ったバイト列やアルゴリズムで比較することから多く生じます。
平文 MD5 や SHA-256 でパスワードを保存
ソルトと鍵ストレッチのない高速ハッシュは、レインボーテーブルやオフライン推測に弱いです。パスワード保存には専用のパスワードハッシュ関数と、ユーザーごとの一意なソルトが必要です。
間違った表現をハッシュする
これらは同じ操作ではありません。
- UTF-8 テキスト
Hello - 空白を trim した後の ASCII バイト
- キー順が異なる JSON 文字列
- 末尾改行を含むファイル
システムが使う 正確なバイト列 をハッシュしてください。
ハッシュを秘密として扱う
攻撃者が入力空間が小さいと分かれば—よくあるパスワード、連番 ID、短い設定キー—オフラインでハッシュを総当たりできます。ハッシュは整合性比較を守りますが、予測可能な入力の機密性は守りません。
アルゴリズムを誤って比較
同じ入力でも MD5 ダイジェストと SHA-256 ダイジェストは一致しません。アルゴリズムが異なるからです。大文字小文字の hex は通常同等ですが、Base64 と hex 表現は変換なしでは互換しません。
セキュリティ判断に弱いハッシュを使う
MD5 チェックサムは偶発的なファイル破損の検出には問題ありません。コード署名、証明書検証、能動的な攻撃者に対する改ざん検知には不適切です。