弱加密¶
ID: cs/weak-encryption
Kind: problem
Security severity: 7.5
Severity: warning
Precision: high
Tags:
- security
- external/cwe/cwe-327
Query suites:
- csharp-code-scanning.qls
- csharp-security-extended.qls
- csharp-security-and-quality.qls
弱加密算法提供的安全性很低。例如,DES 加密仅使用 56 位密钥,不再为敏感数据提供足够的保护。对于非常敏感的数据,也应弃用 TripleDES:虽然它通过使用 168 位密钥改进了 DES,但它实际上最多只提供 112 位的安全性。
建议¶
您应该切换到更安全的加密算法,例如 AES(高级加密标准),并使用与其应用场景相匹配的密钥长度。不要使用 ECB 加密模式,因为它容易受到重放和其他攻击。
示例¶
此示例使用 DES,它限制为 56 位密钥。提供的密钥实际上是 64 位,但每个字节的最后一位都变成了奇偶校验位。例如,在加密和解密时,可以使用字节 01010101 和 01010100 来代替彼此。
class WeakEncryption
{
public static byte[] encryptString()
{
SymmetricAlgorithm serviceProvider = new DESCryptoServiceProvider();
byte[] key = { 16, 22, 240, 11, 18, 150, 192, 21 };
serviceProvider.Key = key;
ICryptoTransform encryptor = serviceProvider.CreateEncryptor();
String message = "Hello World";
byte[] messageB = System.Text.Encoding.ASCII.GetBytes(message);
return encryptor.TransformFinalBlock(messageB, 0, messageB.Length);
}
}