如何在实时流量中区分加密与压缩

时间:2018-07-13 07:22:41

标签: encryption compression reverse-engineering data-analysis raw-data

我正在研究网络流量过滤器,我需要将输入的IP流量分为3组:

  • 加密的流量
  • 压缩流量
  • 既没有加密流量也没有压缩流量

压缩和加密的数据具有许多相似的属性,例如内容直方图中的熵和字符散布。因此很难区分它们。

有一种方法可以使用卡方分布,Pi逼近误差和熵方法对大块(> 1MB)的数据进行分类。 http://www.devttys0.com/2013/06/differentiate-encryption-from-compression-using-math/

这种算法在少量数据(〜1k)时不准确。

问题

如何在实时流量(〜1k数据块)中以超过90%的准确度区分加密与压缩?

我知道现代DPI(深度数据包检查)系统已经实现了一些算法来解决此问题。

您有什么想法吗?

2 个答案:

答案 0 :(得分:1)

唯一的方法是以某种方式知道有限的一组压缩数据格式。然后,您可以开始使用所有这些格式进行解码。如果一个文件工作了一段合理的距离(例如一百个字节左右),那么很有可能是未加密的压缩流。

答案 1 :(得分:0)

您可以使用Shannon的entropy analysis来尝试设计一种启发式方法。压缩后的文件可能在字典大小的边界处表现出熵的下降,而经过(良好)加密的文件则不会。

将压缩的加密文件与未压缩的加密文件区分开来的机会几乎为零。实施得当的加密将泄漏有关明文的零信息,而不是通过熵。