長度擴充套件攻擊

2021-10-04 18:00:32 字數 3358 閱讀 9325

長度擴充套件攻擊(length extension attack),是指針對某些允許包含額外資訊的加密雜湊函式的攻擊手段。對於滿足以下條件的雜湊函式,都可以作為攻擊物件:

① 加密前將待加密的明文按一定規則填充到固定長度(例如512或1024位元)的倍數;

② 按照該固定長度,將明文分塊加密,並用前乙個塊的加密結果,作為下一塊加密的初始向量(initial vector)。

滿足上述要求的雜湊函式稱為merkle–damgård雜湊函式(merkle–damgård hash function),下列雜湊函式都屬於merkle–damgård雜湊函式:

md4 md5 ripemd-160 sha-0 sha-1 sha-256 sha-512 whirlpool

對於h(salt+data)形式的加密,在以下條件滿足的情況下,攻擊者可以通過該方法獲取h(salt+一定規則構造的data):

① 知道密文的加密演算法且該演算法滿足merkle–damgård雜湊函式特徵;

② 不知道salt,但知道salt的長度,並可控制data的值;

③ 可以得到乙個h(salt+data)的值。

攻擊方法詳解

以md5為例:

md5加密:一種被廣泛使用的密碼雜湊函式,可以產生出乙個128位(16位元組)的雜湊值(hash value),用於確保資訊傳輸完整一致

md5碼以512位分組來處理輸入的資訊,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成乙個128位雜湊值

md5的演算法步驟:

1、按位補充資料

在md5演算法中,首先需要對資訊進行填充,這個資料按位(bit)補充,要求最終的位數對512求模的結果為448。也就是說資料補位後,其位數長度只差64位(bit)就是512的整數倍。即便是這個資料的位數對512求模的結果正好是448也必須進行補位。補位的實現過程:首先在資料後補乙個1 bit; 接著在後面補上一堆0 bit, 直到整個資料的位數對512求模的結果正好為448。總之,至少補1位,而最多可能補512位

2、擴充套件長度

在完成補位工作後,又將乙個表示資料原始長度的64 bit數(這是對原始資料沒有補位前長度的描述,用二進位制來表示)補在最後。當完成補位及補充資料的描述後,得到的結果資料長度正好是512的整數倍。也就是說長度正好是16個(32bit) 字的整數倍

3、初始化md快取器

md5運算要用到乙個128位的md5快取器,用來儲存中間變數和最終結果。該快取器又可看成是4個32位的暫存器a、b、c、d,初始化為:

a : 01 23 45 67

b: 89 ab cd ef

c: fe dc ba 98

d: 76 54 32 10

4、處理資料段

首先定義4個非線性函式f、g、h、i,對輸入的報文運算以512位資料段為單位進行處理。對每個資料段都要進行4輪的邏輯處理,在4輪中分別使用4個不同的函式f、g、h、i。每一輪以abcd和當前的512位的塊為輸入,處理後送入abcd(128位)

5、輸出

資訊摘要最終處理成以a, b, c, d 的形式輸出。也就是開始於a的低位在前的順序位元組,結束於d的高位在前的順序位元組

plaid ctf 2014 crypto 250 parlor的題解

該題目描述如下:

由可知該題規則如下:

1、設定odds的值

2、下注bet

3、猜測乙個數字即your number

4、如果該數字滿足(our number + your number) % odds == 0即可成功

5、贏得十億

在長度擴充套件攻擊中:

a=ox67452301

b=oxefcdab89

c=ox98badcfe

d=ox10325476

在加密時會將擴充套件後的密文分為block[i]的模組

假設經過一輪系列複雜運算後有aa,bb,cc,dd

那麼:aa,bb,c,c,dd=f(a,b,c,d,block[i])

a+=aa

b+=bb

c+=cc

d+=dd

a,b,c,d合併後的值為最終md5

現在我們已知md5(nonce+num)後的結果

首先reveal nonce判斷是否可行:

nonce =

"760c4a0f8ec61bec304ed4d8d8abeb98"

.decode(

'hex'

)num =

'a\n'

md5(nonce + num)

='5b356daa0313063af25f8da01922128d'

a,b,c,d = md5tonum(md5(nonce + num)

)# nonce = 16, a\n = 2, 所以填充\x80+\x00*37 + len 8, total = 64

padding =

"\x80"

+"\x00"*37

+"\x90"

+"\x00"*7

print md5(

'a\n'

+padding+

'b\n'

)block =

[256511094

3961243278

3637792304

2565581784

839126500

0000

000144

0839126600

0000

0000

0005280]

md5:

12b74d8200ff1c84500b1e55ada2ce7e

print guess(

'b\n'

,a,b,c,d,66)

# 新的長度是 66 byte

block =

[839126600

0000

0000

00016

0]md5:

12b74d8200ff1c84500b1e55ada2ce7e

將odds設為100

第一次送』a\n』得到r1

r1=md5%2**100

第二次送』a\n』+padding+'b\n』得到r2

利用r1推出a,b,c,d,若結果與r2相同

則表明a是正確的並得到了完整md5碼

解密md5可得flag:i_dunno_i_ran_out_of_clever_keys

密碼學之hash長度擴充套件攻擊

雜湊和加密的區別 雜湊 hash 與加密 encrypt 兩者是完全同的概念,正確區別兩者是正確選擇和使用雜湊與加密的基礎 雜湊與加密最大的不同在於 雜湊將目標轉化成具有相同長度的 不可逆的雜湊字串 而加密將目標轉化為不同長度的 可逆的密文,長度一般隨明文增長而增加 如果被保護資料僅僅用作比較驗證,...

長度拓展攻擊 (理解)

長度擴充套件攻擊 是當乙個攻擊者通過新增乙個字尾來修 改乙個訊息,但仍然能夠指出訊息的hash值,這裡有兩種型別 的長度擴充套件攻擊。符號 表示鏈結。型別一 如果digest msg1 digest msg2 並且len msg1 len msg2 消 息 msg1 msg2,則 digest ms...

XML 實體擴充套件攻擊

xml entity expansion 攻擊 某種程度上類似於 xml entity expansion,但是它主要試圖通過消耗目標程式的伺服器環境來進行dos攻擊的。這種攻擊基於xml entity expansion實現,通過在xml的doctype中建立自定義實體的定義實現,比如,這種定義可...