Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| Vlastnost | Hodnota |
|---|---|
| ID pravidla | CA5402 |
| Název | Použít CreateEncryptor s výchozím inicializačním vektorem |
| Kategorie | Zabezpečení |
| Oprava, která může být destruktivní nebo nedestruktivní | Nezlomitelný |
| Povoleno ve výchozím nastavení v .NET 10 | Ne |
| Příslušné jazyky | C# a Visual Basic |
Příčina
Při použití rgbIV může být System.Security.Cryptography.SymmetricAlgorithm.CreateEncryptor nastaveno na hodnotu jinou než výchozí.
Popis pravidla
Symetrické šifrování by vždy mělo používat neopakovatelný inicializační vektor, aby se zabránilo útokům na slovník.
Toto pravidlo se podobá CA5401, ale analýza nedokáže určit, že inicializační vektor je rozhodně výchozí.
Jak opravit porušení
Použijte výchozí hodnotu rgbIV explicitně, tj. použijte přetížení System.Security.Cryptography.SymmetricAlgorithm.CreateEncryptor, které nemá žádné parametry.
Kdy potlačit upozornění
Upozornění z tohoto pravidla je bezpečné potlačit, pokud:
- Parametr
rgbIVbyl vygenerován parametrem System.Security.Cryptography.SymmetricAlgorithm.GenerateIV. - Ujistěte se, že
rgbIVparametr je opravdu náhodný a neopakovatelný. - Určitě se používá inicializační vektor.
Potlačení upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA5402
// The code that's violating the rule is on this line.
#pragma warning restore CA5402
Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.
[*.{cs,vb}]
dotnet_diagnostic.CA5402.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.
Příklady pseudokódu
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();
}
}
Řešení
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod()
{
AesCng aesCng = new AesCng();
aesCng.CreateEncryptor();
}
}