CA5351 不使用损坏的加密算法
属性 | 值 |
---|---|
规则 ID | CA5351 |
标题 | 请勿使用损坏的加密算法 |
类别 | 安全性 |
修复是中断修复还是非中断修复 | 非中断 |
在 .NET 9 中默认启用 | 否 |
注意
此警告上次更新于 2015 年 11 月。
原因
哈希函数(如 MD5 )和加密算法(如 DES 和 RC2 )可能会带来重大风险,并可能通过普通的攻击技术(如暴力攻击和哈希冲突)导致暴露敏感信息。
下面的加密算法列表受到已知加密攻击。 加密哈希算法 MD5 受到哈希冲突攻击。 根据使用情况,哈希冲突可能会使依赖哈希函数这一唯一加密输出的系统受到假冒、篡改或其他类型的攻击。 加密算法 DES 和 RC2 受到加密攻击,可能会导致加密数据的意外泄露。
规则说明
损坏的加密算法不安全,不鼓励继续使用。 尽管具体的漏洞因使用环境的不同而异,但 MD5 哈希算法仍易遭到已知的冲突攻击。 用于确保数据完整性的哈希算法(例如文件签名或数字证书)特别容易受到攻击。 在这种情况下,攻击者可能会生成两个独立的数据块,以便在不更改哈希值或使相关数字签名无效的情况下,将良性数据替换为恶意数据。
对于加密算法:
当在源代码中找到上述任何加密函数时,将触发此规则并向用户发出警告。
如何解决冲突
使用更强大的加密选项:
何时禁止显示警告
除非经过加密专家审查,否则不要禁止显示此规则的警告。
抑制警告
如果只想抑制单个冲突,请将预处理器指令添加到源文件以禁用该规则,然后重新启用该规则。
#pragma warning disable CA5351
// The code that's violating the rule is on this line.
#pragma warning restore CA5351
若要对文件、文件夹或项目禁用该规则,请在配置文件中将其严重性设置为 none
。
[*.{cs,vb}]
dotnet_diagnostic.CA5351.severity = none
有关详细信息,请参阅如何禁止显示代码分析警告。
伪代码示例
下面的伪代码示例演示此规则检测到的模式和可能的替代模式。
MD5 哈希冲突
using System.Security.Cryptography;
...
var hashAlg = MD5.Create();
解决方案:
using System.Security.Cryptography;
...
var hashAlg = SHA256.Create();
RC2 加密冲突
using System.Security.Cryptography;
...
RC2 encAlg = RC2.Create();
解决方案:
using System.Security.Cryptography;
...
using (AesManaged encAlg = new AesManaged())
{
...
}
DES 加密冲突
using System.Security.Cryptography;
...
DES encAlg = DES.Create();
解决方案:
using System.Security.Cryptography;
...
using (AesManaged encAlg = new AesManaged())
{
...
}