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 :

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();
    }
}