本文主要做了两件事,一是提出了一种使用C4.5算法生成的决策树来识别密文所使用的加密算法的方法,二是为这一算法设计了一个特征提取系统提取八个特征作为算法的输入,最终实现了70%~75的准确率。
准备工作
通过分析各式各样的密文,作者发现密文都是由乱码(符号)、字母(大小写)和数字组成的,然后利用这些信息的熵、最大熵等构建决策树。
整个过程分为训练阶段和测试阶段。训练阶段的目标是创建一个分类模型,包括特征提取和分类两个过程。测试阶段包括特征提取和识别两个过程,是利用训练阶段训练好的模型进行加密算法的鉴别。下图是整个过程的一个示意:
C4.5使用标准化信息增益作为准则来构建决策树。
训练阶段
本文使用了基于熵的特征提取方法,熵是信息无序程度的度量,可以使用
H(x) = -Σp_ilog_2p_i
进行计算。
在提取特征时,也用到了最大熵的概念,最大熵是指数据中所有元素出现概率相同时的熵值,即:
H(S) = q*q^{{-1}}log_2q=log_2q
熵和最大熵表示数据的随机性,可以被用作密文分类,相关系数可以用来发现字母之间的关系,由于最大熵在排列、替换密码的情况下可能会有所不同,所以密文长度也可以作为一个特征使用,综上所述,文章提出了可使用的八个特征:
- 所有字母的最大熵
- 大写字母的最大熵
- 小写字母的最大熵
- 符号的最大熵
- 数字的最大熵
- 所有字母的熵
- 大写字母的相关性
- 文件大小
后面就是常规的决策树算法的实现,不过要注意进行剪枝,否则很容易过拟合,后边有时间的话会详细的梳理一下决策树的几种实现以及剪枝是如何操作的