2021 | PBCTF | Crypto
Alkaloid Stream
题目¶
I found a weird stream cipher scheme. Can you break this?
CTFtime.org / pbctf 2021 / Alkaloid Stream
解题思路¶
- 加密程序
gen.py和输出文件output.txt - 先看看加密程序执行的函数
- 现在已知
enc和public,需要获得key或者keystream才能得到flag keygen函数只要提供长度就可以输出密钥!于是愉快地看了看,结果发现用到了随机数 (╥ω╥) 【爆破当然是不现实的!】- 因为没有
key,recover_keystream函数也没有什么用了,gen_keystream函数成为了重点关注对象 - 其中,
fake数组的产生过程为突破点。当且仅当 \(i = ln - 1\) 时,\(fake[ln - 1]\) 不与key数组中的值异或,且fake数组初始值为全 \(0\),因此 \(fake[ln - 1] = 0\)。在output.txt中搜索,只有一个 \(0\) \(ΦωΦ)/ -
由此结合
public数组可以依次推出key数组和keystream\(fake[ln - 1] => key[ln - 1]\)
\(key[ln - 1] = fake[ln - 2] => key[ln - 2]\)
\(key[ln - 2] \oplus key[ln - 1] = fake[ln - 3] => key[ln - 3]\)
\(... ...\)
-
使用
recover_keystream函数或直接用keystream异或enc就可以得到 Flag 啦!(ΦˋωˊΦ)
最后更新:
2021年11月3日 11:09:55
Contributors: