CA5351: Nie używaj uszkodzonych algorytmów kryptograficznych

Właściwości Wartość
Identyfikator reguły CA5351
Stanowisko Nie używaj uszkodzonych 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

Funkcje tworzenia skrótów, takie jak MD5 i algorytmy szyfrowania, takie jak DES i RC2 , mogą powodować znaczne ryzyko i mogą powodować narażenie poufnych informacji za pomocą trywialnych technik ataku, takich jak ataki siłowe i kolizje skrótów.

Poniższa lista algorytmów kryptograficznych podlega znanym atakom kryptograficznym. Algorytm MD5 skrótu kryptograficznego podlega atakom polegającym na kolizji skrótów. W zależności od użycia kolizja skrótu może prowadzić do personifikacji, manipulowania lub innych rodzajów ataków na systemy, które opierają się na unikatowych danych wyjściowych kryptograficznych funkcji tworzenia skrótów. Algorytmy szyfrowania i RC2 podlegają atakom DES kryptograficznym, które mogą spowodować niezamierzone ujawnienie zaszyfrowanych danych.

Opis reguły

Uszkodzone algorytmy kryptograficzne nie są uważane za bezpieczne, a ich użycie powinno być zniechęcane. Algorytm skrótu MD5 jest podatny na znane ataki kolizyjne, chociaż określona luka w zabezpieczeniach będzie się różnić w zależności od kontekstu użycia. Algorytmy tworzenia skrótów używane do zapewnienia integralności danych (na przykład podpisu pliku lub certyfikatu cyfrowego) są szczególnie narażone. W tym kontekście osoby atakujące mogą wygenerować dwa oddzielne fragmenty danych, takie jak łagodne dane mogą zostać zastąpione złośliwymi danymi bez zmiany wartości skrótu lub unieważnienia skojarzonego podpisu cyfrowego.

W przypadku algorytmów szyfrowania:

  • DES Szyfrowanie zawiera mały rozmiar klucza, który może być wymuszony w mniej niż dzień.

  • RC2 szyfrowanie jest podatne na atak związany z kluczem, w którym atakujący znajduje relacje matematyczne między wszystkimi wartościami klucza.

Ta reguła jest wyzwalana, gdy znajdzie dowolną z powyższych funkcji kryptograficznych w kodzie źródłowym i zgłasza ostrzeżenie użytkownikowi.

Jak naprawić naruszenia

Użyj opcji silniejszych kryptograficznie:

Kiedy pomijać ostrzeżenia

Nie pomijaj ostrzeżenia przed tą regułą, chyba że została sprawdzona przez eksperta kryptograficznego.

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

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

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

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

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

Poniższe przykłady pseudo-kodu ilustrują wzorzec wykryty przez tę regułę i możliwe alternatywy.

Naruszenie skrótu MD5

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

Rozwiązanie 2.

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

Naruszenie szyfrowania RC2

using System.Security.Cryptography;
...
RC2 encAlg = RC2.Create();

Rozwiązanie 2.

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

Naruszenie szyfrowania DES

using System.Security.Cryptography;
...
DES encAlg = DES.Create();

Rozwiązanie:

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