初始化IvParameterSpec函数错误
一、API
1. 继承关系
【1】java.lang.Object
【2】javax.crypto.spec.IvParameterSpec
2. 主要方法
【1】构造方法:IvParameterSpec(byte[ ] iv) 返回初始化向量 iv(Initialization Vector)
【2】构造方法:IvParameterSpec(byte[ ] iv, int offset, int len)
【3】参考链接
https://developer.android.com/reference/javax/crypto/spec/IvParameterSpec.html
3. 示例
【1】iv的作用主要是用于产生密文的第一个block,以使最终生成的密文产生差异(明文相同的情况下),使密码攻击变得更为困难,除此之外iv并无其它用途,因此iv通过随机方式产生,是简便有效的途径
【2】参考链接
http://m.blog.csdn.net/article/details?id=52727918
二、触发条件
1. 定位IvParameterSpec初始化函数
【1】对应到smali语句中的特征
Ljavax/crypto/spec/IvParameterSpec;-><init>([B)V
2. 判断方法中是否调用String.Bytes()方法
【1】对应到smali语句中的特征
Ljava/lang/String;->getBytes()[B
3. 判断方法中是否存在const-string v1, "1234"
【1】对应到smali语句中的特征
const-string.+, "[1-9]+"
三、漏洞原理
【1】使用固定初始化向量,结果密码文本可预测性会高得多,容易受到字典式攻击
【2】漏洞代码示例
【3】更多内容
http://wolfeye.baidu.com/blog/weak-encryption/
四、修复建议
【1】禁止使用常量初始化矢量参数构建IvParameterSpec
【2】建议IV通过随机方式产生