CA5358: Nie używaj niebezpiecznych trybów szyfrowania
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA5358 |
Tytuł | Nie używaj niebezpiecznych trybów szyfrowania |
Kategoria | Bezpieczeństwo |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Nie. |
Przyczyna
Użyj jednego z następujących niebezpiecznych trybów szyfrowania, które nie są zatwierdzone:
- System.Security.Cryptography.CipherMode.ECB
- System.Security.Cryptography.CipherMode.OFB
- System.Security.Cryptography.CipherMode.CFB
Opis reguły
Te tryby są podatne na ataki i mogą powodować ujawnienie poufnych informacji. Na przykład użycie funkcji ECB
do szyfrowania bloku zwykłego tekstu zawsze generuje ten sam tekst szyfrowania, dzięki czemu można łatwo określić, czy dwa zaszyfrowane komunikaty są identyczne. Korzystanie z zatwierdzonych trybów może uniknąć tych niepotrzebnych zagrożeń.
Jak naprawić naruszenia
- Używaj tylko zatwierdzonych trybów (System.Security.Cryptography.CipherMode.CBC, System.Security.Cryptography.CipherMode.CTS).
Kiedy pomijać ostrzeżenia
Można bezpiecznie pominąć ostrzeżenie z tej reguły, jeśli:
- Eksperci ds. kryptografii przejrzeli i zatwierdzili użycie trybu szyfrowania.
- CipherMode Odwołanie nie jest używane do operacji kryptograficznych.
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 CA5358
// The code that's violating the rule is on this line.
#pragma warning restore CA5358
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none
w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.CA5358.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.
Przykłady przykładów kodu przykładowego
Przypisywanie właściwości EBC do trybu
using System.Security.Cryptography;
class ExampleClass {
private static void ExampleMethod () {
RijndaelManaged rijn = new RijndaelManaged
{
Mode = CipherMode.ECB
};
}
}
Korzystanie z wartości EBC
using System;
using System.Security.Cryptography;
class ExampleClass
{
private static void ExampleMethod()
{
Console.WriteLine(CipherMode.ECB);
}
}
Rozwiązanie
using System.Security.Cryptography;
class ExampleClass {
private static void ExampleMethod () {
RijndaelManaged rijn = new RijndaelManaged
{
Mode = CipherMode.CBC
};
}
}