本文へスキップ
ecdsa.com

伸長攻撃(length-extension attack)

MD5、SHA-1、SHA-256、SHA-512 などの Merkle–Damgård 構造のハッシュに対する攻撃で、秘密を知らなくても、H(秘密 ‖ m) と「秘密 ‖ m」の長さから H(秘密 ‖ m ‖ パディング ‖ m′) を計算します。
別表記length extension attackhash length extension

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 を使ってください。

規格と参考文献

すべての用語