[WP] cryptohack symmetric-ciphers block-ciphers

AES 经典,权当复习

目录传送门:cryptohack 练习学习汇总(writeup index)

ECB CBC WTF

考察 CBC 模式原理。只需要注意 CBC 事实上是在 ECB 的基础上做了一点改动(异或 iv)并且 iv 我们也都知道即可

代码: cryptohack/mathematics symmetric-ciphers ECB-CBC-WTF.py

ECB Oracle

考虑到如果一个 block 中只有一个未知字节,那么可以通过一次 256 次的循环通过 AES ECB Encrypt Oracle 把未知字节爆出来。

那么做法也就显然了,只需要从 flag 的末尾开始爆即可

同样的,由于网络因素,一条查询大约需要 1s,整体查询完需要 1.5h 左右,因此采用多线程加速,实际用时 2min

代码: cryptohack/mathematics symmetric-ciphers ECB-Oracle.py

控制 IV,略

代码: cryptohack/mathematics symmetric-ciphers Flipping-Cookie.py

Lazy CBC

E[x]E[x] 表示不考虑 iv 的情况下加密 xx 的结果
传入 encrypt: b'\0' * 16 可以得到 E[KEY]E[KEY]
传入 receive: b'\0' * 16 + E[KEY] 可以在 error 中得到 D[E[KEY]0]=KEYD[E[KEY]\oplus 0]=KEY

代码: cryptohack/mathematics symmetric-ciphers Lazy-CBC.py

Triple DES

搜索 DES 弱密钥

查到以下弱密钥,满足 E(E(x))=xE(E(x))=x

1
2
3
4
\x00\x00\x00\x00\x00\x00\x00\x00
\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF
\xE1\xE1\xE1\xE1\xF0\xF0\xF0\xF0
\x1E\x1E\x1E\x1E\x0F\x0F\x0F\x0F

这题使用的 DES3 逻辑利用了两个 keykey: EK1DK2EK1XE_{K_1}D_{K_2}E_{K_1}X
因此,在上面的弱密钥中选两个不同的即可。

EK1DK2EK1EK1DK2EK1X=EK1DK2DK2EK1X=EK1EK1X=XE_{K_1}D_{K_2}E_{K_1}E_{K_1}D_{K_2}E_{K_1}X=E_{K_1}D_{K_2}D_{K_2}E_{K_1}X=E_{K_1}E_{K_1}X=X

代码: cryptohack/mathematics symmetric-ciphers Triple-DES.py