長度擴充套件攻擊(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中建立自定義實體的定義實現,比如,這種定義可...