encryption - 如何区分实时流量中的加密和压缩
问题描述
我从事网络流量过滤器工作,我需要将输入 IP 流量分为 3 组:
- 加密流量
- 压缩流量
- 既不加密也不压缩流量
压缩和加密数据有许多相似的属性,例如内容直方图中的熵和字符分散。所以很难区分它们。
当块很大(> 1MB)时,有一种方法可以使用卡方分布、Pi 近似误差和熵方法对数据进行分类。http://www.devttys0.com/2013/06/differentiate-encryption-from-compression-using-math/
对于少量数据(~1k),该算法不准确。
问题:
如何以超过 90% 的准确率区分实时流量(约 1k 数据块)中的加密和压缩?
我知道现代 DPI(深度包检测)系统已经实现了一些算法来处理这个问题。
你有什么想法吗?
解决方案
唯一的方法就是以某种方式知道可能存在一组有限的压缩数据格式。然后您可以开始使用所有这些格式进行解码。如果一个人工作了一段合理的距离(例如一百左右字节),那么很有可能这是一个未加密的压缩流。
否则,良好加密的数据、良好压缩的数据和随机数据都无法相互区分。
推荐阅读
- css - 将样式表添加到 Angular 11 应用程序
- php - 在laravel 8中使用图像干预裁剪功能传递许多缩略图
- node.js - 如何以类型安全的方式检查 TypeError 的代码?
- sheetjs - 如何防止 SheetJS 将字符串转换为日期
- sql - 使用十进制值的 SUM 查询返回意外值
- html - 管理桌面和移动设备上嵌套导航栏的悬停和单击行为 [HTML / CSS]
- php - PHP无法连接到LocalDb实例,ssms可以
- node.js - 更新时在handlbars和nodejs中重复选择值
- python - 打印列表给出两种不同的结果
- flutter - Intellij android studio (Flutter) 代码补全建议未正确排序