CWE-329: 密碼分組連結模式未使用隨機初始化向量
什麼是密碼分組連結模式未使用隨機初始化向量?
在密碼塊連結(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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 分組密碼的模式密碼模式
- mysql 5.7 初始化密碼或隨機密碼MySql密碼隨機
- 【密碼學系列】|| 分組密碼的工作模式詳解密碼學模式
- 使用mkpasswd生成隨機密碼隨機密碼
- 使用js動態新增連結隨機連結JS隨機
- 序列密碼與分組密碼密碼
- 應用密碼學——分組密碼密碼學
- JS生成隨機密碼JS隨機密碼
- 分組密碼演算法工作模式(block cipher operation mode)密碼演算法模式BloC
- 分組密碼(一) — 密碼學複習(四)密碼學
- Linux 生成隨機密碼Linux隨機密碼
- 如何得到一個隨機密碼隨機密碼
- Linux 隨機生成密碼mkpasswdLinux隨機密碼
- UA MATH567 高維統計II 隨機向量5 亞高斯隨機向量H5隨機
- 案例四:Shell指令碼生成隨機密碼指令碼隨機密碼
- ruby指令碼,隨機生成複雜密碼指令碼隨機密碼
- javascript隨機生成字串,可以用來生成隨機密碼JavaScript隨機字串密碼
- 隨機連結串列的複製隨機
- UA MATH567 高維統計II 隨機向量1 隨機向量的範數H5隨機
- linux 生成隨機密碼,uuidLinux隨機密碼UI
- 分組密碼(四)AES演算法① — 密碼學複習(七)演算法密碼學
- UA MATH567 高維統計II 隨機向量2 各向同性的隨機向量H5隨機
- 隨機選組隨機
- 根據字元型別和密碼長度隨機生成密碼字元型別密碼隨機
- 隨機向量特徵函式的求法隨機特徵函式
- 分組密碼的發展介紹 (轉)密碼
- PHP生成隨機密碼的幾種方法PHP隨機密碼
- 【機器學習】支援向量機分類機器學習
- 向量(高階的隨機化應用)隨機
- 決策樹VS隨機森林——應該使用哪種演算法?(附程式碼&連結)隨機森林演算法
- 複製帶隨機指標的連結串列隨機指標
- 【程式碼隨想錄】二、連結串列:2、設計連結串列
- 【程式碼隨想錄】二、連結串列:1、移除連結串列元素
- .NetCore 登入(密碼鹽+隨機數)NetCore密碼隨機
- 一個PHP通用隨機密碼的實現PHP隨機密碼
- Rust中如何產生隨機數或密碼?Rust隨機密碼
- 直播商城原始碼,記一次 js隨機密碼原始碼JS隨機密碼
- 隨機森林的祕密隨機森林