Comparteix a través de


CA5351 No use algoritmos criptográficos rotos

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

Nota

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

Causa

Las funciones hash como MD5 y los algoritmos de cifrado como DES y RC2 pueden generar riesgos significativos y provocar la divulgación de información confidencial a través de técnicas de ataque fáciles, como colisiones hash y ataques por fuerza bruta.

La lista de algoritmos criptográficos siguiente está sujeta a ataques criptográficos conocidos. El algoritmo hash criptográfico MD5 está sujeto a ataques de colisión hash. En función del uso, una colisión hash puede provocar la suplantación, manipulación u otros tipos de ataques en sistemas que se basan en la salida criptográfica única de una función hash. Los algoritmos de cifrado DES y RC2 están sujetos a ataques criptográficos que pueden provocar la divulgación no intencionada de datos cifrados.

Descripción de la regla

Los algoritmos criptográficos rotos no se consideran seguros y debe desalentarse su uso. El algoritmo hash MD5 es susceptible a ataques de colisión conocidos, aunque la vulnerabilidad específica variará según el contexto de uso. Los algoritmos hash usados para garantizar la integridad de los datos (por ejemplo, signatura de archivo o certificado digital) son especialmente vulnerables. En este contexto, los atacantes pueden generar dos fragmentos de datos separados, de tal manera que los datos correctos se pueden sustituir por los datos malintencionados, sin cambiar el valor hash ni invalidar una signatura digital asociada.

Para algoritmos de cifrado:

  • El cifradoDES contiene un pequeño tamaño de clave, que podría forzarse en menos de un día.

  • El cifradoRC2 es susceptible de sufrir ataques relacionados con la clave, en los que el atacante busca relaciones matemáticas entre todos los valores de clave.

Esta regla se desencadena cuando se encuentra cualquiera de las funciones criptográficas anteriores en el código fuente y emite una advertencia al usuario.

Cómo corregir infracciones

Use opciones de criptografía más segura:

Cuándo suprimir las advertencias

No suprima una advertencia de esta regla a menos que la haya revisado un experto criptográfico.

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 CA5351
// The code that's violating the rule is on this line.
#pragma warning restore CA5351

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.CA5351.severity = none

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

Ejemplos de pseudocódigo

El ejemplo de pseudocódigo siguiente muestra el patrón que esta regla detecta y las alternativas posibles.

Infracción de hash MD5

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

Solución:

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

Infracción de cifrado RC2

using System.Security.Cryptography;
...
RC2 encAlg = RC2.Create();

Solución:

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

Infracción de cifrado DES

using System.Security.Cryptography;
...
DES encAlg = DES.Create();

Solución:

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