CA5351: Nie używaj uszkodzonych algorytmów kryptograficznych
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA5351 |
Tytuł | Nie używaj uszkodzonych algorytmów kryptograficznych |
Kategoria | Bezpieczeństwo |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | 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:
W przypadku rozwiązania MD5 użyj skrótów w rodzinie SHA-2 (na przykład SHA512, , SHA384SHA256).
W przypadku des i RC2 użyj Aes szyfrowania.
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())
{
...
}