我知道现代加密算法尽可能接近完全随机的数据(密文不可区分),并且试图检测它是完全没有用的。但是,我们可以对诸如xor加密之类的弱密码做什么?尤其是如果我们可以获得有关加密内容的统计研究,那该怎么办?

有哪些方法?哪种方法最有效(在什么假设下)?最后,如何有效地打破这种加密(仅基于对加密内容的统计知识)?

评论

您的意思是XOR编码-据我所知,没有XOR加密之类的东西:)

实际上,我认为“异或编码”,“异或加密”和“异或密码”均等同地用于指代该技术。你不觉得吗?

#1 楼

Vigenère密码基本上是用短填充(即比明文短)进行XOR加密。因此,打破Vigenère的标准技术应打破xor加密。

基本思想是,如果加密密钥的长度为d个符号,则每个d个符号都使用相同的填充加密。因此,取每个第d个密文符号并将其视为简单的替换密文,将其破坏即可得到密钥的第一个符号。重复第d + 1个密文符号,第d + 2个密文符号等。最终,您将拥有密钥的所有d个符号。

要破坏简单的替换密码,您可以尝试蛮力(如果符号集很小),然后将可能的纯文本与您知道的统计数据进行比较。对于某些纯文本(例如,英语),您通常可以更快地将其分解(例如,对于英语文本,密文中最常见的符号可能会映射回e等)。

现在,您可能在想,如果您不知道该怎么办。通常使用Vigenère,钥匙的长度是蛮力的。尝试d = 1,d = 2,d = 3,...。对于每个d,请查看输出纯文本与统计数据的匹配程度。返回明文与统计数据最匹配的键。

评论


如果您的密文相对较短,有什么办法吗?

–Vedaad Shakib
2015年11月6日下午6:02

#2 楼

如果要进行多字节XOR频率分析,则应该这样做。
众所周知,常规英语文本中最常见的字符是E(etaoinshrdlu为前12位),但在某些情况下,可以使用空格(ASCII中为0x20)
另一方面,对于可执行代码,我找不到参考,最经常出现的字符是0x00或0xFF,它们都是整数通用的。请注意,对于可执行代码和二进制文件,您可以使用一些快捷方式。例如,如果您知道在密文中的某个位置上必须出现0x00字节(或序列),它将泄漏密钥的一部分。
如果是单字节XOR,则密钥空间限制为256个字符很明显。
有一个叫hellman的简单的python工具叫xortool,它特别适合于CTF挑战:)

做一些xor分析的工具:密钥长度(基于相等的字符数)
猜测密钥(基于最常见字符的知识)



评论


极好的工具!感谢您的链接。

–恐怖
13年5月20日在20:47

如果是Windows二进制可执行文件,则前两个字节将为0x4D5A(MZ魔术头)。

–多米尼克·安塔尔(Dominik Antal)
2015年9月23日在9:19

#3 楼

只是添加到列表中。 SANS大约一周前发布了一个博客,介绍有关XOR加密的不同工具。该列表非常好,它提供了几种工具,我认为所有这些都是很好的。

这里是链接:XOR工具上的SANS博客