C語言中如何避免弱加密

1、弱加密

加密指以某種特殊的算法改變原有的信息數據,使得未授權的用戶即使獲得了已加密的信息,但因不知解密的方法,仍然無法了解信息的內容。常見的加密算法主要可分為:對稱加密、非對稱加密、單向加密。各類加密算法的使用場景不同,根據加密算法的特性如運算速度、安全性、密鑰管理方式來選擇合適的算法,但安全性是衡量加密算法優劣的一個重要指標,容易被破解的加密算法被稱為弱加密算法,例如可以使用窮舉法在有限的時間內破解des算法。本篇文章以java語言源代碼為例,分析弱加密產生的原因以及修復方法。

2、 弱加密的危害

對于抗攻擊性弱的加密算法,一旦被利用會造成個人隱私信息泄漏甚至財產損失。從2018年1月至2019年4月,CVE中共有2條漏洞信息與其相關。漏洞信息如下:

CVE 漏洞概況
CVE-2018-9028 CA Privileged AccessManager 2.x中傳輸密碼時使用弱加密,降低了密碼破解的復雜性。
CVE-2018-6619 在 Easy Hosting Control Panel(EHCP)v0.37.12.b通過利用無鹽的弱加密算法,使攻擊者更容易破解數據庫密碼。

3、示例代碼

下面使用示例代碼來源于Benchmark (https://www.owasp.org/index.php/Benchmark),源文件名:BenchmarkTest00019.java。

3.1缺陷代碼

C語言中如何避免弱加密

立即學習C語言免費學習筆記(深入)”;

上述示例代碼操作是讀取請求中的內容并將其加密處理,在第49行獲取讀取配置文件的實例?benchmarkprops。在第50行加載配置文件,在第52行~53行讀取配置文件中的屬性 cryptoAlg1,若無此屬性默認使用 DESede/ECB/PKCS5Padding 給 algorithm 賦值。第54行將使用 algorithm 作為加密算法構造加密對象c。接下來準備加密的密碼。第57~58行實例化了一個DES加密算法的密鑰生成器。第59行指定加密對象 c 的操作模式為加密,其中 key 為密鑰。第62行~76行對將請求中的輸入流轉換為字節數組input,在第77行進行對 input 進行加密,加密結果是字節數組 result 。其中使用 DES 算法生成的密鑰短,僅有56位,運算速度較慢,而且DES算法完全依賴密鑰,易受窮舉搜索法攻擊。

使用代碼衛士對上述示例代碼進行檢測,可以檢出“弱加密”缺陷,顯示等級為中。在代碼行第57行報出缺陷,如圖1所示:

C語言中如何避免弱加密

圖1:弱加密的檢測示例

3.2 修復代碼

C語言中如何避免弱加密

在上述修復代碼中,第58行使用AES算法替代DES算法,AES最少可生成128位,最高256位的密鑰,且運算速度快,占用內存低。

使用代碼衛士對修復后的代碼進行檢測,可以看到已不存在“弱加密”缺陷。如圖2:

C語言中如何避免弱加密

圖2:修復后檢測結果

4、? 如何避免弱加密

安全性要求較高的系統中,建議應使用安全的加密算法(如AES、RSA)對敏感數據進行加密。

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享