Merkle–Damgård 構造のダイジェストは、最後のブロックを処理した後の内部状態全体です。そのため攻撃者はこれを内部状態として読み込み、ハッシュ計算を続けられます。サービスが SHA-256(secret ‖ params) でリクエストを認証している場合、有効なタグを 1 つ見た人は誰でも、(パディングのバイト列の後ろに)&admin=1 を追加し、長くなったメッセージに対する有効なタグを計算できます。MD5 ベースの Flickr の API 署名は、2009年にまさにこの方法で破られました。
影響を受けないのは、HMAC(外側のハッシュが内側の状態を隠すため)、SHA-3 と SHAKE 関数(キャパシティが出力されることはないため)、BLAKE2 と BLAKE3、そして出力が状態の一部を含まない SHA-384 や SHA-512/256 などの切り詰め版の SHA-2 です。署名方式は署名の前にメッセージをハッシュするため、影響を受けません。
ルールは単純です。SHA-1 や SHA-256 で hash(key ‖ message) という形の MAC を作ってはいけません。HMAC、KMAC、または鍵付きの BLAKE2 を使ってください。