检测加密的简单方法

时间:2012-02-25 21:22:15

标签: encryption detection

是否有一种简单快捷的方法来检测加密文件?我听说过关于enthropy计算,但是如果我为驱动器上的每个文件计算它,那么检测加密将需要数天。

是否有可能,比方说,计算前100个字节或1024个字节的某个值然后决定?任何人都有这方面的来源吗?

3 个答案:

答案 0 :(得分:3)

我会使用交叉熵计算。计算已知加密数据的X字节的交叉熵值(它应该接近1,无论加密类型等) - 您可能希望避免文件页眉和页脚,因为这可能包含未加密的文件元数据。

计算文件的熵;如果它接近1,则加密或/dev/random。如果距离1很远,则可能没有加密。我相信你可以对此进行重要性测试以获得基线。

这是大约10行的Perl;我不记得使用了什么库(尽管这可能很有用:http://dingo.sbs.arizona.edu/~hammond/ling696f-sp03/addonecross.txt

答案 1 :(得分:2)

您可以创建一个识别特定常见形式的加密文件的系统(例如:识别加密的zip,rar,vim,gpg,ssl,ecryptfs和truecrypt)。任何基于原始数据确定加密的尝试都将很快进入隐写术讨论。

答案 2 :(得分:1)

良好加密的一个优点是您可以设计它以便无法检测 - 例如,请参阅deniable encryption上的维基百科文章。

每种检测加密的统计方法都会给你各种“误报”,比如 压缩数据或随机查看数据。

想象一下,我编写了一个输出两个文件的程序:file1包含1024位π,file2file1的加密版本。如果您对file1file2的内容一无所知,则无法区分它们。事实上,π很可能包含file2某处的内容!

编辑:

顺便说一句,它甚至没有反过来工作(检测未加密的文件)。您可以编写一个程序,通过将单词或整个句子分配给它的位/字节,将加密数据转换为可读的英文文本。