Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
| Propiedad | Valor |
|---|---|
| Identificador de la regla | CA5379 |
| Título | Asegurarse de que el algoritmo de función de derivación de claves es suficientemente seguro |
| Categoría | Seguridad |
| El arreglo es problemático o no problemático | Sin interrupción |
| Habilitado de forma predeterminada en .NET 10 | No |
| Idiomas aplicables | C# y Visual Basic |
Causa
Al crear una instancia de System.Security.Cryptography.Rfc2898DeriveBytes, utilice uno de los algoritmos siguientes:
- System.Security.Cryptography.MD5
- System.Security.Cryptography.SHA1
- Un algoritmo que la regla no pueda determinar en tiempo de compilación
Descripción de la regla
De forma predeterminada, la clase Rfc2898DeriveBytes usa el algoritmo SHA1. Al crear una instancia de un objeto Rfc2898DeriveBytes, debe especificar un algoritmo hash de SHA256 o superior. Tenga en cuenta que la propiedad Rfc2898DeriveBytes.HashAlgorithm solo tiene un accesor get.
Cómo corregir infracciones
Dado que MD5 o SHA1 son vulnerables a las colisiones, use SHA256 o una versión superior para la clase Rfc2898DeriveBytes.
Es posible que las versiones anteriores de .NET Framework o .NET Core no le permitan especificar un algoritmo hash de la función de derivación de claves. En tales casos, debe actualizar la versión de la plataforma de destino de .NET para usar un algoritmo más seguro.
Cuándo suprimir las advertencias
No se recomienda suprimir esta regla excepto por motivos de compatibilidad de la aplicación.
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 CA5379
// The code that's violating the rule is on this line.
#pragma warning restore CA5379
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.CA5379.severity = none
Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.
Ejemplos de pseudocódigo
Infracción al especificar un algoritmo hash en un constructor
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod(byte[] password, byte[] salt, int iterations, HashAlgorithmName hashAlgorithm)
{
var rfc2898DeriveBytes = new Rfc2898DeriveBytes(password, salt, iterations, HashAlgorithmName.MD5);
}
}
Especificar el algoritmo hash en el constructor de una clase derivada es un incumplimiento
using System.Security.Cryptography;
class DerivedClass : Rfc2898DeriveBytes
{
public DerivedClass (byte[] password, byte[] salt, int iterations, HashAlgorithmName hashAlgorithm) : base(password, salt, iterations, hashAlgorithm)
{
}
}
class ExampleClass
{
public void ExampleMethod(byte[] password, byte[] salt, int iterations, HashAlgorithmName hashAlgorithm)
{
var derivedClass = new DerivedClass(password, salt, iterations, HashAlgorithmName.MD5);
}
}
Infracción al configurar la propiedad del algoritmo hash en clases derivadas
using System.Security.Cryptography;
class DerivedClass : Rfc2898DeriveBytes
{
public DerivedClass (byte[] password, byte[] salt, int iterations, HashAlgorithmName hashAlgorithm) : base(password, salt, iterations, hashAlgorithm)
{
}
public HashAlgorithmName HashAlgorithm { get; set;}
}
class ExampleClass
{
public void ExampleMethod(byte[] password, byte[] salt, int iterations, HashAlgorithmName hashAlgorithm)
{
var derivedClass = new DerivedClass(password, salt, iterations, HashAlgorithmName.MD5);
derivedClass.HashAlgorithm = HashAlgorithmName.SHA256;
}
}
Solución
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod(byte[] password, byte[] salt, int iterations, HashAlgorithmName hashAlgorithm)
{
var rfc2898DeriveBytes = new Rfc2898DeriveBytes(password, salt, iterations, HashAlgorithmName.SHA256);
}
}