初始化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通過隨機方式產生