CA5358: Nepoužívejte nebezpečné režimy šifry
Vlastnost | Hodnota |
---|---|
ID pravidla | CA5358 |
Název | Nepoužívat nezabezpečené režimy šifrování |
Kategorie | Zabezpečení |
Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
Povoleno ve výchozím nastavení v .NET 9 | No |
Příčina
Použijte jeden z následujících nebezpečných režimů šifrování, které nejsou schválené:
- System.Security.Cryptography.CipherMode.ECB
- System.Security.Cryptography.CipherMode.OFB
- System.Security.Cryptography.CipherMode.CFB
Popis pravidla
Tyto režimy jsou zranitelné vůči útokům a mohou způsobit vystavení citlivých informací. Například použití ECB
k šifrování bloku prostého textu vždy vytváří stejný šifrový text, takže může snadno zjistit, jestli jsou dvě šifrované zprávy identické. Používání schválených režimů se může těmto zbytečným rizikům vyhnout.
Jak opravit porušení
- Používejte pouze schválené režimy (System.Security.Cryptography.CipherMode.CBC, System.Security.Cryptography.CipherMode.CTS).
Kdy potlačit upozornění
Upozornění z tohoto pravidla je bezpečné potlačit, pokud:
- Odborníci na kryptografii zkontrolovali a schválili použití šifrového režimu.
- Odkazovaný CipherMode se nepoužívá pro kryptografickou operaci.
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 CA5358
// The code that's violating the rule is on this line.
#pragma warning restore CA5358
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.CA5358.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.
Příklady pseudokódu
Přiřadit ECB k vlastnosti Mode
using System.Security.Cryptography;
class ExampleClass {
private static void ExampleMethod () {
RijndaelManaged rijn = new RijndaelManaged
{
Mode = CipherMode.ECB
};
}
}
Použití hodnoty ECB
using System;
using System.Security.Cryptography;
class ExampleClass
{
private static void ExampleMethod()
{
Console.WriteLine(CipherMode.ECB);
}
}
Řešení
using System.Security.Cryptography;
class ExampleClass {
private static void ExampleMethod () {
RijndaelManaged rijn = new RijndaelManaged
{
Mode = CipherMode.CBC
};
}
}