常見的雜湊函數 md5, sha1, sha2, sha256, …
其中的過程其實跟 CBC 長得蠻像的,先切成一塊一塊的 block
去做 Hash (blocksize = 128, 256, 512, … 依算法而定)
與 Blockcipher 一樣,最後一塊長度不足的部分會用 Padding 補齊,再填上整段文字的長度。
前一個 block
Hash 完的結果會作為下一個 block
的輸入來輸出下一個 Hash
前面的這個 N 是 Magic number
不同的演算法,內部有定義一個 Magic number ,就是以這個開始做計算的
Length Extension Attack
該攻擊手法就是把得到的 Hash 值
,作為 Magic number
繼續 hash 下去 。
舉個例子,當我把 拿去做 Hash 時,實際上還是以 Magic number 為初始值,並把 做成多個 block 一段一段算過去。
所以,如果我把結果的 作為起始值 並且隨便輸入個 來 Hash
由於前方的 就是 的結果,展開就會變成:
結論
我們可以透過輸入 m
得到的
來預測出輸入 m + padding + length + E
的 ,以通過一些驗證
padding
的部分有一定的格式,照做就好
大部分的 Server 會在做 Hash 之前加個 salt
或是 secret
之類的,以致於 length
無法確定,不過可以透過暴力搜尋,來找到這個長度的值
接下來就可以任意偽造 來達到自己的目的囉