1. 談?wù)勀銓?duì)長(zhǎng)度延展攻擊的理解,列出你查找的資料列表(博客,圖書,論文等)
長(zhǎng)度延展攻擊(Length Extension Attack)是一種針對(duì)特定哈希算法(如MD5、SHA-1和SHA-2)的攻擊方法,能夠在不知道原始消息內(nèi)容的情況下,對(duì)已有哈希值進(jìn)行篡改。這種攻擊方法利用了某些哈希算法的內(nèi)部結(jié)構(gòu)特點(diǎn),使得攻擊者可以在原始消息后附加額外的數(shù)據(jù),然后計(jì)算出附加數(shù)據(jù)后的哈希值,而無需知道原始消息的內(nèi)容。
原理
要理解長(zhǎng)度延展攻擊的原理,我們需要先了解一下 Merkle-Damg?rd 結(jié)構(gòu),這是一種被 MD5、SHA-1 和 SHA-2 等哈希算法采用的構(gòu)造方法。Merkle-Damg?rd 結(jié)構(gòu)的工作原理如下:
- 將輸入消息分割成固定大小的分組(通常為 512 或 1024 位)。
- 對(duì)每個(gè)分組應(yīng)用壓縮函數(shù),將其與上一分組的輸出值(稱為“鏈?zhǔn)阶兞俊保┻M(jìn)行組合,生成一個(gè)新的鏈?zhǔn)阶兞俊5谝粋€(gè)分組的鏈?zhǔn)阶兞渴穷A(yù)定義的初始值。
- 當(dāng)所有分組都經(jīng)過壓縮函數(shù)處理后,最后一個(gè)鏈?zhǔn)阶兞烤褪枪V怠?/li>
在長(zhǎng)度延展攻擊中,攻擊者利用了 Merkle-Damg?rd 結(jié)構(gòu)的特性。由于攻擊者已經(jīng)知道原始哈希值(即最后一個(gè)鏈?zhǔn)阶兞浚麄兛梢栽谠枷⒑筇砑宇~外的數(shù)據(jù),然后使用已知的哈希值作為新的初始鏈?zhǔn)阶兞浚匦掠?jì)算壓縮函數(shù)。這樣,攻擊者可以獲取到原始消息與額外數(shù)據(jù)拼接后的哈希值,而無需知道原始消息的內(nèi)容。
示例
假設(shè)我們有以下原始消息和其對(duì)應(yīng)的哈希值:
- 原始消息:
message - 哈希值:
hash(message)
攻擊者不知道 message 的內(nèi)容,但知道 hash(message)。現(xiàn)在,攻擊者想在 message 后添加一段額外的數(shù)據(jù) extra_data,并計(jì)算出 hash(message || extra_data),其中 || 表示拼接。
攻擊者可以采用以下步驟進(jìn)行長(zhǎng)度延展攻擊:
- 使用
hash(message)作為新的初始鏈?zhǔn)阶兞俊?/li> - 對(duì)
extra_data應(yīng)用與原始哈希算法相同的壓縮函數(shù),計(jì)算出新的哈希值。 - 獲得
hash(message || extra_data)。
需要注意的是,長(zhǎng)度延展攻擊對(duì)于具有特定構(gòu)造的哈希算法才有效,如采用 Merkle-Damg?rd 結(jié)構(gòu)的算法。對(duì)于其他類型的哈希算法,例如 SHA-3 和 BLAKE2,這種攻擊方法并不適用。為了防范長(zhǎng)度延展攻擊,可以使用不受此類攻擊影響的哈希算法,或采用特定的技術(shù)(如 HMAC)對(duì)哈希值進(jìn)行驗(yàn)證。
浙公網(wǎng)安備 33010602011771號(hào)