CWE-329: 密碼分組連結模式未使用隨機初始化向量

zktq2021發表於2021-08-13

什麼是密碼分組連結模式未使用隨機初始化向量?

在密碼塊連結(CBC)模式下不使用隨機初始化向量(IV)會導致演算法容易受到字典攻擊。

什麼是CBC模式?

CBC模式的全稱是Cipher Block Chaining模式(密文分組連結模式),之所以叫這個名字,是因為密文分組像鏈條一樣相互連線在一起。在CBC模式中,首先將明文分組與前一個密文分組進行XOR運算,然後再進行加密。

初始化向量當加密第一個明文分組時,由於不存在“前一個密文分組”,因此需要事先準備一個長度為一個分組的位元序列來代替“前一個密文分組”,這個位元序列稱為初始化向量(Initialization Vector),通常縮寫為IV,一般來說,每次加密時都會隨機產生一個不同的位元序列來作為初始化向量。

什麼是字典攻擊?

字典攻擊發生一般都是在駭客試圖獲得一個安全的網站的密碼或地區透過使用每一個詞在字典裡(手動,這樣他們就可以猜出密碼)為了訪問機密資訊。對於分析和電腦保安、字典攻擊是一種方法來克服程式碼或確認機制,試圖解決其解密解決方案或密碼。駭客行為這種攻擊有時數以億計的機率事件,比如用從字典裡找出的單詞來破解.密碼。

密碼分組連結模式未使用隨機初始化向量漏洞的構成條件有哪些?

密碼分組連結模式使用的初始化向量不是一個隨機數。

密碼分組連結模式未使用隨機初始化向量漏洞會造成哪些後果?

攻擊者有機會透過字典式攻擊讀取加密的資料。

密碼分組連結模式未使用隨機初始化向量漏洞的防範和修補方法有哪些?

密碼分組連結模式使用隨機的初始化向量。

含有“密碼分組連結模式未使用隨機初始化向量”安全漏洞的程式碼樣例:

byte[] iv = { //設定初始化向量為固定的值0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

KeyGenerator kg = null;

try {kg = KeyGenerator.getInstance("AES");}

catch (NoSuchAlgorithmException e)

{e.printStackTrace();}

SecretKey key = kg.generateKey();

Cipher cipher = null;

try {cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");}

catch (NoSuchAlgorithmException e) {e.printStackTrace();}

catch (NoSuchPaddingException e) {e.printStackTrace();}

IvParameterSpec ips = new IvParameterSpec(iv); //使用固定的初始化向量

try {cipher.init(Cipher.ENCRYPT_MODE, key, ips);}

catch (InvalidKeyException e) {e.printStackTrace();}

catch (InvalidAlgorithmParameterException e) {e.printStackTrace();}

使用Wukong軟體靜態分析工具檢測上述程式程式碼,則可以發現程式碼中存在著密碼分組連結模式未使用隨機初始化向量的安全漏洞。請見下圖:

 

在這個示例中,初始化向量(IV)始終是零的塊。這使得生成的密文更容易預測,並且容易受到字典攻擊。

 

密碼分組連結模式未使用隨機初始化向量在CWE中被編號為CWE-329: Not Using an Unpredictable IV with CBC Mode


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70000012/viewspace-2786774/,如需轉載,請註明出處,否則將追究法律責任。

相關文章