3 常见加密算法特征识别

做DLP策略,第一步得看懂抓到的密文是什么算法加密的。你想想看,如果连AES和RSA都分不清,后续的脱敏、阻断策略就是瞎蒙。

我个人习惯先看两个东西:密钥长度和数据分组模式。这两个特征基本能锁定算法范围。下面我把工作中常碰到的几个算法捋一遍,每个都带点实战经验。

3.1 AES — 对称加密的当家花旦

AES是目前最常见的对称加密算法。它有三个密钥长度:128位、192位、256位。数据分组固定128位(16字节)。

特征非常明显:密文长度一定是16字节的整数倍。如果看到非对称加密的密文,但长度是16的倍数,十有八九是AES。

我的经验:在流量监控里抓到一个加密文件,大小正好是16K(16*1024)的倍数,我当时就猜是AES-CBC。后来解出来确实是。AES的分组特征太强了。

AES常用的工作模式有:

  • ECB:相同明文块产生相同密文块,数据块独立。容易从重复块看出模式,不安全。
  • CBC:每次加密前先和前一个密文块异或,需要IV(初始向量)。IV长度也是16字节。
  • GCM:认证加密模式,密文后多一个认证标签(通常16字节)。
  • CTR:流模式,密文长度和明文相同,无填充。

在DLP扫描时,如果看到密文前有16字节的随机数据,那很可能就是CBC或GCM的IV。

3.2 RSA — 非对称的基石

RSA的密钥长度通常是1024、2048、4096位。注意:RSA加密的数据长度不能超过密钥长度(减去填充开销)。

它和对称加密最大的区别是:密文长度等于密钥长度(按字节计算)。例如1024位RSA加密后得到128字节密文,2048位得到256字节,非常整齐。

踩坑提醒:我曾经遇到一个客户,说检测到128字节的密文块,以为是AES的16组,结果其实是1024位RSA。RSA密文是“整块”的,而AES是分成多个16字节块。注意区分。

RSA还常用PKCS#1 v1.5或OAEP填充。填充后的密文开头特征:OAEP填充的密文前两个字节通常是随机值,而v1.5的第一个字节是0x00或0x02。

3.3 DES — 老古董了

DES密钥长度56位(但通常表示为64位,其中8位奇偶校验位)。数据分组64位(8字节)。

特征:密文长度是8字节的整数倍。现在基本没人用了,但有些旧系统里还能翻出来。

我得说,看到8字节分组的基本可以判断是DES/3DES。但别花太多精力——除非你在审计老旧金融接口。

3.4 3DES — 三倍套壳

3DES本质是DES三次加密,密钥可以选112位(两个密钥)或168位(三个密钥)。分组仍然是64位(8字节)。

特征和DES一样,密文是8的倍数。但速度很慢,正逐步被AES取代。

快速判断:查一下算法OID或密钥文件头,如果是1.2.840.113549.3.7就是3DES,如果是2.16.840.1.101.3.4.1.2则是AES-128。

3.5 SM4 — 国密标准

SM4是国家密码管理局发布的对称算法。密钥长度128位,数据分组128位(16字节),和AES一样。

但算法结构不同:SM4采用32轮非线性迭代,AES是10-14轮。不过从密文特征上看,SM4也会产生16字节整数倍的密文,和AES很像。

区分方法:看算法标识或密钥协商时的OID。SM4的OID是1.2.156.10197.1.104。另外,SM4的S盒和AES不同,在一些静态分析工具里能看出差异。

实战技巧:如果你只抓到密文,没有上下文,可以尝试用不同算法的解密器试一下。我遇到过SM4密文被误判成AES的事情,后来对比了前几个字节的随机性分布才锁定。

3.6 关键特征对比表

算法 类型 密钥长度(位) 分组长度(位/字节) 密文长度特征
AES 对称 128/192/256 128位(16B) 16B整数倍
RSA 非对称 1024/2048/4096 与密钥同长度 128B或256B等固定长度
DES 对称 56(有效) 64位(8B) 8B整数倍
3DES 对称 112/168 64位(8B) 8B整数倍
SM4 对称 128 128位(16B) 16B整数倍

这个表在实际排查时很有用。带上它,对着抓包数据一比对,基本能定调。

3.7 加密算法特征识别框架

下面这张图我画了一个快速识别路线,注意看箭头方向——先分对称和非对称,再看分组长度和密钥长度,最后定出算法。

常见加密算法特征识别框架 加密数据 对称加密 非对称加密 AES (128/192/256位) DES (56位) 3DES (112/168位) SM4 (128位) RSA (1024/2048/4096) 判断要点:对称看分组长度,非对称看单块密文长度。AES/SM4为16B倍数,DES/3DES为8B倍数,RSA固定128/256/512B

这个框架图在做自动化识别规则时可以直接用条件判断实现。我自己做过一个DLP策略原型,就是按这个逻辑写的规则引擎。

3.8 实战中的几点忠告

  • 不要只看密文长度——有些协议会在加密数据前加协议头,干扰判断。
  • 注意模式的影响:流模式(如CTR)的密文长度和明文一致,没有固定分组痕迹。
  • 国密判断要小心:SM2/SM3/SM4需要配合使用,单独一个SM4的密文很难和AES区分,建议结合协议上下文。
  • 我通常会先做“分组长度检测”:检查密文长度是否能被8或16整除,这步能过滤掉大部分误判。
重要警告:有些加密实现会加入随机填充,导致密文长度不是分组的整数倍。比如AES-CFB8模式,每个字节独立加密。这种情况下特征不明显,需要更深入分析。我曾经因为这个踩过坑,后来加上了熵值检测才搞定。