CA5402 : Utiliser CreateEncryptor avec la valeur par défaut IV
Propriété | Value |
---|---|
Identificateur de la règle | CA5402 |
Titre | Utiliser CreateEncryptor avec la valeur par défaut IV |
Catégorie | Sécurité |
Le correctif est cassant ou non cassant | Sans rupture |
Activé par défaut dans .NET 8 | Non |
Cause
Le rgbIV
peut être autre que la valeur par défaut lors de l’utilisation de System.Security.Cryptography.SymmetricAlgorithm.CreateEncryptor.
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 à CA5401, mais l’analyse ne peut pas déterminer que le vecteur d’initialisation est bien celui par défaut.
Comment corriger les violations
Utilisez explicitement 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 paramètre
rgbIV
est vraiment aléatoire et non reproductible. - Vous êtes sûr que le vecteur d’initialisation est utilisé.
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 CA5402
// The code that's violating the rule is on this line.
#pragma warning restore CA5402
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.CA5402.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.
Exemples de pseudo-code
using System;
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod(byte[] rgbIV)
{
AesCng aesCng = new AesCng();
Random r = new Random();
if (r.Next(6) == 4)
{
aesCng.IV = rgbIV;
}
aesCng.CreateEncryptor();
}
}
Solution
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod()
{
AesCng aesCng = new AesCng();
aesCng.CreateEncryptor();
}
}