Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| 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:
- Parametr
rgbIVzostał wygenerowany przez element System.Security.Cryptography.SymmetricAlgorithm.GenerateIV. - Na pewno
rgbIVparametr jest naprawdę losowy i nie powtarzalny. - Upewnij się, że jest używany wektor inicjowania.
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();
}
}