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("RSA/None/OAEPWITHSHA-256ANDMGF1PADDING");
当使用带有 OAEP 填充的安全 RSA 算法时,未报告任何问题。