我正在研究网络流量过滤器,我需要将输入的IP流量分为3组:
压缩和加密的数据具有许多相似的属性,例如内容直方图中的熵和字符散布。因此很难区分它们。
有一种方法可以使用卡方分布,Pi逼近误差和熵方法对大块(> 1MB)的数据进行分类。 http://www.devttys0.com/2013/06/differentiate-encryption-from-compression-using-math/
这种算法在少量数据(〜1k)时不准确。
问题:
如何在实时流量(〜1k数据块)中以超过90%的准确度区分加密与压缩?
我知道现代DPI(深度数据包检查)系统已经实现了一些算法来解决此问题。
您有什么想法吗?
答案 0 :(得分:1)
唯一的方法是以某种方式知道有限的一组压缩数据格式。然后,您可以开始使用所有这些格式进行解码。如果一个文件工作了一段合理的距离(例如一百个字节左右),那么很有可能是未加密的压缩流。
答案 1 :(得分:0)
您可以使用Shannon的entropy analysis来尝试设计一种启发式方法。压缩后的文件可能在字典大小的边界处表现出熵的下降,而经过(良好)加密的文件则不会。
将压缩的加密文件与未压缩的加密文件区分开来的机会几乎为零。实施得当的加密将泄漏有关明文的零信息,而不是通过熵。