Udostępnij za pośrednictwem


CA5402: Użyj polecenia CreateEncryptor z domyślnym IV

Właściwości Wartość
Identyfikator reguły CA5402
Tytuł Należy użyć metody CreateEncryptor z domyślnym wektorem inicjowania
Kategoria Bezpieczeństwo
Poprawka łamiąca lub nienaruszająca Niezgodność
Domyślnie włączone na platformie .NET 10 Nie.
Zastosowane języki C# i Visual Basic

Przyczyna

Może nie być domyślny rgbIV przy użyciu System.Security.Cryptography.SymmetricAlgorithm.CreateEncryptor.

Opis reguły

Szyfrowanie symetryczne powinno zawsze używać nie powtarzalnego wektora inicjalizacji, aby zapobiec atakom słownikowym.

Ta reguła jest podobna do CA5401, ale analiza nie może określić, że wektor inicjowania jest zdecydowanie domyślny.

Jak naprawić naruszenia

Użyj jawnie wartości domyślnej rgbIV, czyli skorzystaj z przeciążenia System.Security.Cryptography.SymmetricAlgorithm.CreateEncryptor, które nie przyjmuje żadnego parametru.

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć ostrzeżenie z tej reguły, jeśli:

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

#pragma warning disable CA5402
// The code that's violating the rule is on this line.
#pragma warning restore CA5402

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

[*.{cs,vb}]
dotnet_diagnostic.CA5402.severity = none

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Przykłady pseudokodu

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

Rozwiązanie

using System.Security.Cryptography;

class ExampleClass
{
    public void ExampleMethod()
    {
        AesCng aesCng  = new AesCng();
        aesCng.CreateEncryptor();
    }
}