SV.WEAK.CRYPT

使用被破坏的或有风险的加密算法

检查器的作用是检测失效、有风险或已弃用的加密功能。

检查器会检测已知的弱实现或使用加密 API 或库的情况。检查器会报告与使用算法“MD2”、“MD4”、“MD5”、“SHA”、“SHA1”和“SHA-1”相关的缺陷。

漏洞与风险

如果未针对敏感数据提供足够的保护,则可能导致数据的保密性或完整性遭到破坏。DES 加密可能被暴力攻击所破解。基于 MD5 的算法更安全一些,因此它比 DES 算法更优先,但即便是更新的 SHA-1 算法也已经被破解。哈希算法(例如 SHA-256 和 SHA-512)经过美国联邦信息处理标准 (FIPS) 的审核,被认为在安全性方面更为出色。请务必使用相关领域专家所推荐的最新加密算法。

漏洞代码示例 1

复制
 public static UUID nameUUIDFromBytes (byte[] name) {
     try {
         MessageDigest md = MessageDigest.getInstance("MD5");
         return make Uuid(md.digest(name), 3);
     } catch (NoSuchAlgorithmException e) {
         throw new AssertionError(e);
     }
 }

SV.WEAK.CRYPT 在第 3 行报告了缺陷。

修正代码示例 1

复制
 public static UUID name UUIDFromBytes (byte[] name) {
     try {
         MessageDigest md = MessageDigest.getinstance("SHA-256");
         return makeUuid(md.digest(name), 3);
     } catch (NoSuchAlgorithmException e) {
         throw new AssertionError(e);
     }
 }

在将消息摘要算法更改为更安全的 SHA-256 后,问题将随之消失。

漏洞代码示例 2

复制
Cipher c1 = Cipher.getInstance("DES");

SV.WEAK.CRYPT 报告了缺陷,指出 DES 算法不够可靠。

修正代码示例 2

复制
Cipher c1 = Cipher.getInstance("RSA/None/OAEPWITHSHA-256ANDMGF1PADDING");

当使用带有 OAEP 填充的安全 RSA 算法时,未报告任何问题。

漏洞代码示例 3

复制
NullCipher nc = new NullCipher();

SV.WEAK.CRYPT 报告了缺陷,指出 NullCipher 不会转换纯文本,因此容易受到攻击。

修正代码示例 3

复制
Cipher c = Cipher.getInstance("AES/GCM/NoPadding")

当搭配使用密码和更安全的算法时,未报告任何问题。

相关检查器

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。