@romangol
2016-07-20T11:54:38.000000Z
字数 579
阅读 2233
密码学
CTF
一个以单字节为block的分组密码加密,三轮CBC模式,已知明文的部分内容(开头的“flag{”和结尾的“}”),给了一组密文。密钥长度根据提示应该是8字节,其中一个字节是iv,剩余7字节用于加密分组内容。
这个分析的关键是利用已知明文的信息来缩小key的信息量,首先明文的第0字节因为有iv的mask并不存在信息量,可以先利用密文和明文的第3、4字节的对应关系,将相关密钥(涉及到的key一共有4字节)缩小到2的16次方范围,同时可以利用密文和明文的最后一个字节的对应关系,将相关密钥(涉及到的key一共有3字节)缩小到2的16次方范围。注意到根据key循环使用的模式,这两组2的16次方的key有交织,然后再利用密文和明文的第1、2字节的对应关系,可以将两组key合并缩减到238组(这时候我们已经基本确定了key的1-4,6-7字节,并不知道的是第0字节也就是iv和第5字节),最后穷搜索key的第五字节尝试解密就可以得到答案了
flag{NoNoNo_Its_not_happening_not_happening}
源代码
https://github.com/romangol/CTF/blob/master/uctf2016/attack/cipher.cpp