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 8 No

Příčina

Použijte jeden z následujících nebezpečných režimů šifrování, které nejsou schválené:

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í

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