CA5350: No usar algoritmos criptográficos no seguros

Propiedad Value
Identificador de la regla CA5350
Título No usar algoritmos criptográficos no seguros
Categoría Seguridad
La corrección interrumpe o no interrumpe Poco problemático
Habilitado de forma predeterminada en .NET 8 No

Nota

Esta advertencia se actualizó por última vez en noviembre de 2015.

Causa

Los algoritmos de cifrado como TripleDES y los algoritmos hash como SHA1 y RIPEMD160 se consideran no seguros.

Estos algoritmos criptográficos no proporcionan tantas garantías de seguridad como sus equivalentes más modernos. Los algoritmos hash criptográfico SHA1 y RIPEMD160 proporcionan menos resistencia a colisiones que los algoritmos hash más modernos. El algoritmo de cifrado TripleDES proporciona menos bits de seguridad que los algoritmos de cifrado más modernos.

Descripción de la regla

Las funciones hash y los algoritmos de cifrado no seguros se usan hoy en día por varios motivos, pero no deben usarse para garantizar la confidencialidad o la integridad de los datos que protegen.

La regla se desencadena cuando encuentra los algoritmos 3DES, SHA1 o RIPEMD160 en el código y lanza una advertencia al usuario.

Cómo corregir infracciones

Use opciones de criptografía más segura:

  • Para el cifrado TripleDES, use el cifrado Aes .

  • Para las funciones hash SHA1 o RIPEMD160, use los de la familia SHA-2 (por ejemplo, SHA512, SHA384y SHA256).

Cuándo suprimir las advertencias

Suprima una advertencia de esta regla cuando el nivel de protección necesario para los datos no requiera una garantía de seguridad.

Supresión de una advertencia

Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.

#pragma warning disable CA5350
// The code that's violating the rule is on this line.
#pragma warning restore CA5350

Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none del archivo de configuración.

[*.{cs,vb}]
dotnet_diagnostic.CA5350.severity = none

Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.

Ejemplos de pseudocódigo

En el momento de redactar este artículo, el ejemplo de pseudocódigo siguiente muestra el patrón que esta regla detecta.

Infracción de hash SHA-1

using System.Security.Cryptography;
...
var hashAlg = SHA1.Create();

Solución:

using System.Security.Cryptography;
...
var hashAlg = SHA256.Create();

Infracción de hash RIPEMD160

using System.Security.Cryptography;
...
var hashAlg = RIPEMD160Managed.Create();

Solución:

using System.Security.Cryptography;
...
var hashAlg = SHA256.Create();

Infracción de cifrado TripleDES

using System.Security.Cryptography;
...
using (TripleDES encAlg = TripleDES.Create())
{
  ...
}

Solución:

using System.Security.Cryptography;
...
using (AesManaged encAlg = new AesManaged())
{
  ...
}