如果必须确定文件是否已加密,是否可以对文件使用Shannon的熵算法?

如此处所讨论的,熵(以字节为单位)以接近0的值被认为是更有序的,而接近8的熵被认为是更随机的。

直觉上,这可能会产生很多误报。谁能解释这种方法是否适合确定给定的随机文件是否已加密?

评论

纯随机文件最多,其次是加密,然后是压缩。音频和图像文件更少,文本更少,ht / xml更少...参见youtube.com/watch?v=T0MVe4aud30加密文件的真正吸烟者是比特值的均匀分布,请参见视频上的15m具体来说。

香农熵是为生成随机输出而不是为数据串生成的过程定义的。 Kolmogorov的复杂度是无与伦比的(对于加密的文件,它只比等效的明文最小)。因此,您几乎可以尝试压缩文件(例如,使用gzip / deflate)并检查文件是否变小。

我很确定/etc/entropy.bin未加密,并且没有有意义的标头。

好的加密不一定会导致高熵!假设您使用相同的密码对流密码的密码流进行加密。这导致很多零,但其加密功能很强。使用分组密码可以实现类似的目的。我现在无法验证,但我想该视频包含示例:media.ccc.de/v/31c3_-5930-zh-saal_6-201412291400-funky_file_formats-_ange_albertini

#1 楼

如果尝试为此使用Shannon熵,则可能会同时出现误报和误报。


许多压缩文件的每个字节的熵将接近8位,从而导致
任何具有某些非二进制编码的加密文件(例如包含ASCII装甲的PGP消息的文件,或仅具有低熵标头的文件),其熵值可能都较低,从而导致假阴性。 >如果使用Format Preserving Encryption,则也可能导致假阴性结果

它可以作为启发式方法,但您不应依赖于正确的结果。

评论


$ \ begingroup $
但是,您可以检查文件的前4-8个字节,以查看幻数是否为已知压缩文件或二进制文件列表的一部分。将PNG,PK,MZ,GIFa,PDF或类似内容作为前几个字节会告诉您该文件未加密。这需要庞大的查找列表以进行检测。
$ \ endgroup $
–伊斯梅尔·米格尔(Ismael Miguel)
16-6-29在14:49



$ \ begingroup $
这是一个好点。但是,当您知道这些文件的结构时,您的观点会变得有些沉默。是的,内容可以被加密,但是它将是一个损坏的文件(如果看到有效的加密PNG,我会感到惊讶),或者结构中的某处说“已加密”。我同意您不能可靠地执行此操作的前提,但是您可以通过了解文件结构来排除一些“要点”。并回答您的问题,您不能确定由加扰字节组成的文件是垃圾文件(例如:随机mojibake)还是真正加密的文件。
$ \ endgroup $
–伊斯梅尔·米格尔(Ismael Miguel)
16年6月29日在15:04

$ \ begingroup $
@IsmaelMiguel也许不是PNG,而是借鉴我对Will的回答:我可以使用完全有效的TIFF容器保存二进制PGP加密的消息,该文件几乎可以肯定会很高兴地调用TIFF图像并继续与生活。 (我什至非常确定我可以制作一个既包含PGP加密消息又包含真实图像的图像,该图像可以正常打开并显示!)
$ \ endgroup $
–用户
16-6-29在15:11



$ \ begingroup $
@IsmaelMiguel是既有效又经过加密的PNG,正如您所说,您会惊讶地看到。查找更多示例或生成示例并不难。
$ \ endgroup $
–橙色狗
16年6月29日在17:19

$ \ begingroup $
相反,我可以通过uuencode / base64 / ascii85运行加密的文件,并生成一个熵分别较小的文件。
$ \ endgroup $
–阿伦
16年6月30日在1:05

#2 楼

是的,它是一个很好的指标,没有,不会有很多误报。

高熵文件表示文件已被很好地加密,压缩或仅包含真正的随机字节。 br />
大多数压缩格式具有可识别的标头等,因此可以轻松区分。

大多数人没有随机字节的文件,为什么呢?

强密码学致力于密文的不可区分性。这是确保安全的必要属性,但也使其脱颖而出。

因此,请想象您是警察或边防人员在审问嫌疑人。他们计算机上的文件看似随机。您将得出结论,必须对其进行加密,并要求犯罪嫌疑人移交密钥。

人们还努力寻找用于标准密码和加密格式的“鉴别器”。例如,trucrypt。

隐藏一条消息,不仅仅是对其进行加密,这被称为隐写术。

评论


$ \ begingroup $
未“正确”加密。甚至非常破损的加密算法也可能具有足够的随机性,以至于香农熵接近最大值。 (例如,具有流密码的随机数重用。)
$ \ endgroup $
–otus
16年6月29日在6:49

$ \ begingroup $
...或压缩或二进制(只需对您的MP3或视频集合进行熵计算)。熵计算本身不会削减它。您自己是通过指向压缩文件并检查其头文件来自己说的-这超出了熵计算的范围,解决了他的答案中指出的假阳性问题@otus。请注意,该问题并未询问如何区分文件,而是询问熵计算是否足以识别。显然不是。
$ \ endgroup $
– e-sushi
16-6-29在9:38



$ \ begingroup $
我非常确定,例如使用合理长度的MP3或合理尺寸的JPEG照片,有效载荷数据将完全使众所周知的标头相形见war。因此,标头不会显着影响该文件的整体“熵”。而且我可以使用一个完全有效的TIFF容器来保存二进制PGP加密的消息,该文件几乎可以肯定会很愉快地称为TIFF图像,并且可以继续存在。
$ \ endgroup $
–用户
16-6-29在14:18



$ \ begingroup $
我认为评论者可能对问题中的“确定”一词过于关注。这个答案并没有从字面上看,而是认为这比学术问题更实际。我在这里给出+1,因为我希望该技术在实践中能很好地工作,可以快速轻松地将大型硬盘缩减为相对较少的候选对象,然后可以对其进行仔细检查。作为额外的步骤,应该分解找到的所有压缩存档,并以相同方式扫描内容。
$ \ endgroup $
–wberry
16年6月29日在15:44

$ \ begingroup $
RE base64编码,如果采用XML纯文本并将其进行base64编码,则可以直观地看到编码文本中的模式。通过实践,人们可以学会识别编码形式的某些明文。 base64不是一个争夺者,不会极大地影响熵测度。
$ \ endgroup $
–wberry
16-6-29在15:45