2020湖湘杯-CRYPTO-簡單的密碼3 WriteUp (CBC字節翻轉)


前言

第六屆湖湘杯的密碼學 簡單的密碼3

這道題考察CBC字節翻轉。

CBC模式

CBC是一種分組加密模式,CBC模式中,每一組的密文由上一組的密文參與異或運算得到。

CBC字節翻轉攻擊就是根據CBC解密過程中的異或關系,改變上一組密文,從而使下一組解密得到的明文達到特定的值。

加密過程

第一組明文經過初始化向量IV異或,然后經過塊加密算法使用密鑰Key加密,得到第一組密文。然后這一組密文又和下一組明文異或,再經過塊加密算法加密,得到下一組密文,以此類推。

CBC模式中分組的長度,根據所用塊加密算法的不同而有區別,比如AES-128的分組長度就是16字節。

塊加密算法一般是AES、Blowfish、DES、Triple DES等對稱加密算法。

初始化向量IV的長度等於分組長度,用於對加密進行隨機化。加密時,IV可以影響到所有數據的加密結果。

CBC加密的數學公式為:(\(E_k\)表示塊加密)

\[\begin{aligned} &C_i = E_k(P_i \oplus C_{i-1})\\ &C_0 = IV \end{aligned} \]

解密過程

第一組密文經過塊加密算法使用密鑰Key解密后,再經過初始化向量IV異或,得到第一組明文。第二組密文經過解密后,與第一組密文異或,得到第二組明文。以此類推,每一組明文都是由前一組密文參與異或運算得到的。

解密時,IV只能影響第一組數據的解密結果。

CBC解密的數學公式為:(\(D_k\)表示塊解密)

\[\begin{aligned} &P_i = D_k(C_i) \oplus C_{i-1}\\ &C_0 = IV \end{aligned} \]

CBC字節翻轉攻擊

通過改變前一組密文,使得其在與后一組密文的塊解密結果異或后,得到特定的明文。

具體為:

假設某一組明文原來是\(P_1\),現在要將它變成\(P_2\),該組密文的塊解密結果為\(D_c\),前一組密文原來是\(C_1\),需要將前一組密文構造為\(C_2\)

根據異或運算的性質:


\(a \oplus b = c\)

\(a \oplus c = b\)

由於

\[\begin{aligned} &P_1 = C_1 \oplus D_c\\ &P_2 = C_2 \oplus D_c \end{aligned} \]

可得

\[C_2 = C_1 \oplus P_1 \oplus P_2 \]

因此只要將前一組密文替換為\(C_2\),就可以讓后一組明文變成\(P_2\)

由於改變了一組密文后,該組明文也會發生改變,要想使該組明文不變,執行相同的操作即可(修改前一組密文)。

題目

本題用nc連上后,給你三個選項,先輸入用戶名登陸,然后可修改iv,然后可獲取flag。

直接選flag,會提示只有admin才能獲取flag。輸入用戶名為admin,又提示error。

其實看到iv就可以猜測這個題是考CBC了。

這里用CBC反序列化,先輸入一個用戶名,然后輸入iv使得用戶名解密后成為admin。

輸入iv時可以看到,iv的長度是16字節,因此明文第一組的長度也是16字節。

輸入用戶名時,可知加密內容是"name:"+用戶名,總長度不超過16字節,因此用戶名在第一組明文中。我們只要修改iv就可以使用戶名的解密結果成為admin。

假設原來的iv是\(IV_1\),要構造的iv是\(IV_2\),第一組的塊解密結果是\(D_c\),原明文是\(P_1\)(輸入的用戶名),要修改為\(P_2\)(admin)。

由於

\[\begin{aligned} &P_1 = IV_1 \oplus D_c\\ &P_2 = IV_2 \oplus D_c \end{aligned} \]

可得

\[IV_2 = IV_1 \oplus P_1 \oplus P_2 \]

注意這里第一組明文的前五個字節是"name:",我們輸入的用戶名從第六個字節開始,因此對iv的修改也應該從第六個字節開始。比如輸入用戶名為"world"的話,就應該修改iv中的第6到10個字節。

python腳本為:

iv1 = 'b1652f353cc1eac21e1e812fc0d51d7e'
p1 = 'world'
p2 = 'admin'
iv2 = ''
n = 0
for i in range(10,20,2):
   iv2 += hex(int(iv1[i:i+2],16)^ord(p1[n])^ord(p2[n]))[2:]
   n += 1
print(iv1[:10]+iv2+iv1[20:])

得到iv:

輸入用戶名和iv就可以獲取flag。


(由於比賽結束后,平台關閉,無法復現,這里用的是船山院士師傅們的wp中的圖)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM