Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de changer d’annuaire.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer d’annuaire.
| 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 10 | 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
rgbIVa été généré par System.Security.Cryptography.SymmetricAlgorithm.GenerateIV. - Vous êtes sûr que le paramètre
rgbIVest 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();
}
}