天天看點

《Java編碼指南:編寫安全可靠程式的75條建議》—— 指南12:不要使用不安全的弱加密算法

本節書摘來異步社群《java編碼指南:編寫安全可靠程式的75條建議》一書中的第1章,第1.12節,作者:【美】fred long(弗雷德•朗), dhruv mohindra(德魯•莫欣達), robert c.seacord(羅伯特 c.西科德), dean f.sutherland(迪恩 f.薩瑟蘭), david svoboda(大衛•斯沃博達),更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

安全敏感的應用程式必須避免使用不安全的弱加密方式。現代計算機的計算能力允許通過蠻幹攻擊破解這樣的加密。例如,資料加密标準(data encryption standard,des)加密算法被認為是很不安全的;使用des加密的消息,能夠在一天之内被機器(如electronic frontier foundation——簡稱eff——的deep crack)蠻幹攻擊破解。

下面的違規代碼示例使用了一種弱加密算法(des)來加密一個字元串輸入。

cipher cipher = cipher.getinstance("aes");

keygenerator kgen = keygenerator.getinstance("aes");

kgen.init(128); // 192 and 256 bits may be unavailable

secretkey skey = kgen.generatekey();

byte[] raw = skey.getencoded();

secretkeyspec skeyspec = new secretkeyspec(raw, "aes");

cipher.init(cipher.encrypt_mode, skeyspec);

// encode bytes as utf8; strtobeencrypted contains the

// input string that is to be encrypted

byte[] encoded = strtobeencrypted.getbytes("utf8");

// perform encryption

byte[] encrypted = cipher.dofinal(encoded);<code>`</code>

使用數學和計算上不安全的加密算法會導緻敏感資訊的洩露。

在java se 7中,弱加密算法可以被禁用;參見java™ pki programmer’s guide的附錄d“disabling cryptographic algorithms”[oracle 2011a]。

弱加密算法可用于需要易破解的密文的場景 。例如,rot13密文經常用在論壇和網站,這個加密的目的是保護人們免受資訊幹擾,而不是保護資訊免受他人擷取。