CA5401: Nie używaj polecenia CreateEncryptor z inną niż domyślną IV
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA5401 |
Tytuł | Nie używaj metody CreateEncryptor w wektorem inicjowania innym niż domyślny |
Kategoria | Bezpieczeństwo |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Nie. |
Przyczyna
Używanie z System.Security.Cryptography.SymmetricAlgorithm.CreateEncryptor wartością inną niż domyślna rgbIV
.
Opis reguły
Szyfrowanie symetryczne powinno zawsze używać nie powtarzalnego wektora inicjalizacji, aby zapobiec atakom słownikowym.
Ta reguła jest podobna do CA5402, ale analiza określa, że wektor inicjowania jest zdecydowanie domyślny.
Jak naprawić naruszenia
Użyj wartości domyślnej rgbIV
, czyli użyj przeciążenia System.Security.Cryptography.SymmetricAlgorithm.CreateEncryptor , które nie ma żadnego parametru.
Kiedy pomijać ostrzeżenia
Można bezpiecznie pominąć ostrzeżenie z tej reguły, jeśli:
- Parametr
rgbIV
został wygenerowany przez element System.Security.Cryptography.SymmetricAlgorithm.GenerateIV. - Masz pewność, że
rgbIV
element jest naprawdę losowy i nie powtarzalny.
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 CA5401
// The code that's violating the rule is on this line.
#pragma warning restore CA5401
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none
w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.CA5401.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.
Przykłady przykładów kodu przykładowego
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod(byte[] rgbIV)
{
AesCng aesCng = new AesCng();
aesCng.IV = rgbIV;
aesCng.CreateEncryptor();
}
}
Rozwiązanie
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod()
{
AesCng aesCng = new AesCng();
aesCng.CreateEncryptor();
}
}