CA5373 : Ne pas utiliser la fonction de dérivation de clé obsolète
Propriété | Value |
---|---|
Identificateur de la règle | CA5373 |
Titre | Ne pas utiliser la fonction de dérivation de clé obsolète |
Catégorie | Sécurité |
Le correctif est cassant ou non cassant | Sans rupture |
Activé par défaut dans .NET 8 | Non |
Cause
Les méthodes de dérivation de clé faible par chiffrement System.Security.Cryptography.PasswordDeriveBytes et/ou Rfc2898DeriveBytes.CryptDeriveKey sont utilisées pour générer une clé.
Description de la règle
Cette règle détecte l’appel des méthodes System.Security.Cryptography.PasswordDeriveBytes et Rfc2898DeriveBytes.CryptDeriveKey de dérivation de clé faible.
System.Security.Cryptography.PasswordDeriveBytes a utilisé un algorithme faible PBKDF1. Rfc2898DeriveBytes.CryptDeriveKey n’utilise pas le nombre d’itérations et le sel de l’objet Rfc2898DeriveBytes
, ce qui le rend faible.
Comment corriger les violations
La dérivation de clé basée sur mot de passe doit utiliser l’algorithme PBKDF2 avec hachage SHA-2. Rfc2898DeriveBytes.GetBytes peut être utilisé pour y parvenir.
Quand supprimer les avertissements
Supprimez l’avertissement si le risque associé à l’utilisation de PBKDF1 est soigneusement examiné et accepté.
Supprimer un avertissement
Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.
#pragma warning disable CA5373
// The code that's violating the rule is on this line.
#pragma warning restore CA5373
Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none
dans le fichier de configuration.
[*.{cs,vb}]
dotnet_diagnostic.CA5373.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.
Exemples de pseudo-code
Violation
Au moment de l’écriture de cet article, l’exemple de pseudo-code suivant illustre le schéma détecté par cette règle.
using System;
using System.Security.Cryptography;
class TestClass
{
public void TestMethod(Rfc2898DeriveBytes rfc2898DeriveBytes, string algname, string alghashname, int keySize, byte[] rgbIV)
{
rfc2898DeriveBytes.CryptDeriveKey(algname, alghashname, keySize, rgbIV);
}
}
Solution
using System;
using System.Security.Cryptography;
class TestClass
{
public void TestMethod(Rfc2898DeriveBytes rfc2898DeriveBytes)
{
rfc2898DeriveBytes.GetBytes(1);
}
}