Crypto-ECB & CBC
講師:堇姬 @ Izcc-ctf
2023.12.22
堇姬Naup(網管/美宣)
成電二年級/幽夜工作室繪師/台灣好厲駭學員
CKCSC36
DC : naup_sumire_hime
IG : ckcsc36th_naup
涉獵C++、C、python、遊戲(tkinter、pygame)、資安(Web、Crypto)、AI、flask、html/css/js、 PHP、DC bot。
喜歡看輕小說、動畫、Vtuber、打音遊,也喜歡看百合,就是一個長年混跡ACG的宅女。
夢想是可以成為很電的駭客跟繪師,也想自己寫出一個AI老婆。
本日重點
-
prepend oracle
-
CBC
-
bit flipping attack
-
Padding oracle
prepend oracle
-
使用ECB
-
將使用者的輸入放入flag前面一同加密
def main(INPUT):
aes = AES.new(KEY, AES.MODE_ECB)
return aes.encrypt(INPUT+flag)
AAAAAAAAAAAAAAAF
LAG{CKCSC.........
A
B
塞入15個A,讓FLAG第一個字元掉進第一個block
AAAAAAAAAAAAAAAA
去爆破第一個字元
AAAAAAAAAAAAAAAZ
......
C_1
C_n
去比對
C_1
C_n
~
是否等於A
AAAAAAAAAAAAAAFL
AG{CKCSC.........
A
B
塞入14個A,將已知F塞入,讓FLAG第二個字元掉進第一個block
len(flag) \times 256
CBC
密碼分組連結模式
初始化向量(IV)
-
隨機生成
-
應該避免重用IV
-
使同樣的明文備加密出來的結果不一樣
-
IV就算公開也沒關係
C_0=IV
C_i=Enc(P_i \oplus C_{i-1},key)
C_0=IV
P_i=Dec(C_i,key)\oplus C_{i-1}
優點
-
安全性相對高
-
不容易主動攻擊
缺點
-
不利於同時進行加密運算
-
一個加密失誤會導致兩個明文出錯
Bit flipping attack
我想透過操作密文來修改下個區塊加密的明文
操作
被修改
如何改變
C_{i-1}
P_i
(任意修改成想要的字元)
影響
Padding oracle
-
CBC加密
-
配上PKCS#7的填充方式
-
若填充錯誤會噴錯
PKCS#7
-
需要填充五個byte則後面都填充0x05
-
需要填充二個byte則後面都填充0x02
這樣會噴錯!!!
程式邏輯
1.爆破出對應出的byte,讓padding不會錯
2.重複1,使得一個block被還原
3.重複2使所有block被還原
實作如果有興趣的人可以自己打,超級麻煩,所以我都偷其他人腳本
ECB & CBC
By naup96321
ECB & CBC
- 52