CA5350: Do Not Use Weak Cryptographic Algorithms
Note
This article applies to Visual Studio 2015. If you're looking for the latest Visual Studio documentation, see Visual Studio documentation. We recommend upgrading to the latest version of Visual Studio. Download it here
Item | Value |
---|---|
TypeName | DoNotUseWeakCryptographicAlgorithms |
CheckId | CA5350 |
Category | Microsoft.Cryptography |
Breaking Change | Non Breaking |
Note
This warning was last updated on November 2015.
Cause
Encryption algorithms such as TripleDES and hashing algorithms such as SHA1 and RIPEMD160 are considered to be weak.
These cryptographic algorithms do not provide as much security assurance as more modern counterparts. Cryptographic hashing algorithms SHA1 and RIPEMD160 provide less collision resistance than more modern hashing algorithms. The encryption algorithm TripleDES provides fewer bits of security than more modern encryption algorithms.
Rule Description
Weak encryption algorithms and hashing functions are used today for a number of reasons, but they should not be used to guarantee the confidentiality of the data they protect.
The rule triggers when it finds 3DES, SHA1 or RIPEMD160 algorithms in the code and throws a warning to the user.
How to Fix Violations
Use cryptographically stronger options:
For TripleDES encryption, use Aes encryption.
For SHA1 or RIPEMD160 hashing functions, use ones in the SHA-2 family (e.g. SHA512, SHA384, SHA256).
When to Suppress Warnings
Suppress a warning from this rule when the level of protection needed for the data does not require a security guarantee.
Pseudo-code Example
As of the time of this writing, the following pseudo-code sample illustrates the pattern detected by this rule.
SHA-1 Hashing Violation
using System.Security.Cryptography;
...
var hashAlg = SHA1.Create();
Solution
using System.Security.Cryptography;
...
var hashAlg = SHA256.Create();
RIPEMD160
Hashing Violation
using System.Security.Cryptography;
...
var hashAlg = RIPEMD160Managed.Create();
Solution
using System.Security.Cryptography;
...
var hashAlg = SHA256.Create();
TripleDES Encryption Violation
using System.Security.Cryptography;
...
using (TripleDES encAlg = TripleDES.Create())
{
...
}
Solution
using System.Security.Cryptography;
...
using (AesManaged encAlg = new AesManaged())
{
...
}