CA5350: Nie używaj słabych algorytmów kryptograficznych

Właściwości Wartość
Identyfikator reguły CA5350
Stanowisko Nie używaj słabych algorytmów kryptograficznych
Kategoria Bezpieczeństwo
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 8 Nie.

Uwaga

To ostrzeżenie zostało ostatnio zaktualizowane w listopadzie 2015 r.

Przyczyna

Algorytmy szyfrowania, takie jak TripleDES i algorytmy tworzenia skrótów, takie jak SHA1 i RIPEMD160 , są uważane za słabe.

Te algorytmy kryptograficzne nie zapewniają tak dużej pewności bezpieczeństwa, jak bardziej nowoczesne odpowiedniki. Algorytmy tworzenia skrótów SHA1 kryptograficznych i RIPEMD160 zapewniają mniejszy opór przed kolizją niż bardziej nowoczesne algorytmy tworzenia skrótów. Algorytm TripleDES szyfrowania zapewnia mniej bitów zabezpieczeń niż bardziej nowoczesne algorytmy szyfrowania.

Opis reguły

Słabe algorytmy szyfrowania i funkcje tworzenia skrótów są obecnie używane z wielu powodów, ale nie powinny być używane do zagwarantowania poufności chronionych danych.

Reguła jest wyzwalana, gdy znajdzie algorytmy 3DES, SHA1 lub RIPEMD160 w kodzie i zgłasza ostrzeżenie dla użytkownika.

Jak naprawić naruszenia

Użyj opcji silniejszych kryptograficznie:

  • W przypadku szyfrowania TripleDES użyj Aes szyfrowania.

  • W przypadku funkcji sha1 lub RIPEMD160 wyznaczania wartości skrótu należy użyć tych w rodzinie SHA-2 (na przykład SHA512, SHA384, i SHA256).

Kiedy pomijać ostrzeżenia

Pomiń ostrzeżenie z tej reguły, gdy poziom ochrony potrzebny dla danych nie wymaga gwarancji bezpieczeństwa.

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 CA5350
// The code that's violating the rule is on this line.
#pragma warning restore CA5350

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

[*.{cs,vb}]
dotnet_diagnostic.CA5350.severity = none

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Przykłady przykładów kodu przykładowego

W momencie pisania tego tekstu poniższy przykład pseudo-kodu ilustruje wzorzec wykryty przez tę regułę.

Naruszenie skrótu SHA-1

using System.Security.Cryptography;
...
var hashAlg = SHA1.Create();

Rozwiązanie 2.

using System.Security.Cryptography;
...
var hashAlg = SHA256.Create();

naruszenie skrótów RIPEMD160

using System.Security.Cryptography;
...
var hashAlg = RIPEMD160Managed.Create();

Rozwiązanie 2.

using System.Security.Cryptography;
...
var hashAlg = SHA256.Create();

Naruszenie szyfrowania TripleDES

using System.Security.Cryptography;
...
using (TripleDES encAlg = TripleDES.Create())
{
  ...
}

Rozwiązanie:

using System.Security.Cryptography;
...
using (AesManaged encAlg = new AesManaged())
{
  ...
}