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);
}
}
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour