CA5401 : Ne pas utiliser CreateEncryptor avec une valeur IV non définie par défaut
Propriété | Value |
---|---|
Identificateur de la règle | CA5401 |
Titre | Ne pas utiliser CreateEncryptor avec une valeur IV non définie par défaut |
Catégorie | Sécurité |
Le correctif est cassant ou non cassant | Sans rupture |
Activée par défaut dans .NET 9 | Non |
Cause
Utilisation de System.Security.Cryptography.SymmetricAlgorithm.CreateEncryptor avec un rgbIV
différent de la valeur par défaut.
Description de la règle
Le chiffrement symétrique doit toujours utiliser un vecteur d’initialisation non répétable pour empêcher les attaques par dictionnaire.
Cette règle est similaire à CA5402, mais l’analyse détermine que le vecteur d’initialisation est bien celui par défaut.
Comment corriger les violations
Utilisez la valeur rgbIV
par défaut. Autrement dit, utilisez la surcharge du System.Security.Cryptography.SymmetricAlgorithm.CreateEncryptor qui n’a aucun paramètre.
Quand supprimer les avertissements
Vous pouvez supprimer sans risque un avertissement de cette règle si :
- Le paramètre
rgbIV
a été généré par System.Security.Cryptography.SymmetricAlgorithm.GenerateIV. - Vous êtes sûr que le
rgbIV
est vraiment aléatoire et non reproductible.
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 CA5401
// The code that's violating the rule is on this line.
#pragma warning restore CA5401
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.CA5401.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.
Exemples de pseudo-code
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod(byte[] rgbIV)
{
AesCng aesCng = new AesCng();
aesCng.IV = rgbIV;
aesCng.CreateEncryptor();
}
}
Solution
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod()
{
AesCng aesCng = new AesCng();
aesCng.CreateEncryptor();
}
}