之前有个售前任务,和多个友商一起竞标一个项目,给了个小程序看哪家挖的洞质量高。
当时是和北区的一位大佬做的,测试中发现请求和返回数据包都是经过加密的。通过逆向
小程序得到客户端源码。虽然代码做了部分混淆,但通过分析后还是找到客户端程序对数
据包加密、解密的函数。系统采用的是AES加密,且采用的是最不安全的ECB模式,密钥固
定。之后使用解密工具或在线网站进行解密,最终找到短信轰炸,实名绕过登陆等漏洞。
竞标成功。弄完后,发现自己对AES的一些细节处以及几种模式有点不熟悉,故整理了一下
AES的一些知识。
有关小程序客户端源码获取可参考该blog
一. AES简介
AES是一个迭代的、对称密钥分组加密的密码算法,算法所使用的密钥长度可以是128比特
、192bit、256bit,密钥的长度决定了之后进行轮加密的次数,并且使用128bit分组加密解
密数据。与公共的密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。
通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循
环中重复置换和替换输入的数据。加密主要通过s盒变换、行变换、列变换进行置换、混淆、
扩散操作,解密过程为加密的逆过程。
AES加密的大致流程如下图所示;
加密器扩展后如下图所示:
具体加密实现细节的实现可参考该篇图文结合详解blog
二. AES四种模式
1.ECB模式
ECB模式的加密过程如下所示:
ECB模式进行加密,密文顺序即为对应明文顺序分块加密后的排列顺序。为最不安全的AES方法
,当截获数据包时更改敏感信息处的密文如银行卡号等,可造成严重后果。
优点:
简单、有利于并行计算、误差不会被传送。
缺点:
不能隐藏明文模式、可能会对明文发起主动攻击。
2.CBC模式
CBC模式的加密过程如下所示:
想较于ECB模式,CBC模式加入了初始向量与明文块进行异或操作增加了随机性安全性高于ECB。
优点:
不容易进行主动攻击、适合传输长度长的报文,是SSL、IPSec的标准。
缺点:
不利于并行计算、误差传输、需要初始化向量IV
3.CFB模式
CFB模式的加密方式如下所示:
与前两种模式的差别,CFB模式主要是对唯一固定的向量进行了左移n在补位,在对左移补位后的
向量进行加密再与明文进行异或。
优点:
隐藏了明文模式、分组密码转化为流模式、可以及时加密传送小于分组的数据。
缺点:
不利于并行计算、误差传输、初始IV唯一固定。
4.OFB模式
OFB模式的加密方式如下所示:
OFB模式大致过程与CFB模式一致。
优点:
隐藏了明文模式、分组密码转化为流模式、可以及时加密传送小于分组的数据。
缺点:
不利于并行计算、误差传输、初始IV唯一固定、可能会对明文进行主动攻击。
三.总结
AES为现在客户端与服务端进行通信的主流加密方式,而AES的四种方式中CBC模式是采用最多的
一种。
参考BLOG
https://www.2cto.com/kf/201707/659430.html
https://blog.csdn.net/qq_38289815/article/details/80900813
https://www.cnblogs.com/txw1958/p/aes.html
https://blog.csdn.net/lrwwll/article/details/78069013
https://blog.csdn.net/coloriy/article/details/78139074
https://segmentfault.com/a/1190000011658363?utm_source=tag-newest