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