Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| Właściwości | Wartość |
|---|---|
| Identyfikator reguły | CA5379 |
| Tytuł | Upewnij się, że algorytm funkcji wyprowadzania kluczy jest wystarczająco silny |
| Kategoria | Bezpieczeństwo |
| Poprawka łamiąca lub nienaruszająca | Niezgodność |
| Domyślnie włączone na platformie .NET 10 | Nie. |
| Zastosowane języki | C# i Visual Basic |
Przyczyna
Użyj jednego z następujących algorytmów podczas tworzenia wystąpienia System.Security.Cryptography.Rfc2898DeriveBytes:
- System.Security.Cryptography.MD5
- System.Security.Cryptography.SHA1
- Algorytm, którego reguła nie może określić w czasie kompilacji
Opis reguły
Klasa Rfc2898DeriveBytes domyślnie używa algorytmu SHA1 . Podczas tworzenia instancji obiektu Rfc2898DeriveBytes należy określić algorytm wyznaczania wartości skrótu SHA256 lub wyższego poziomu. Należy pamiętać, że Rfc2898DeriveBytes.HashAlgorithm właściwość ma tylko akcesor get.
Jak naprawić naruszenia
Ponieważ MD5 lub SHA1 są narażone na kolizje, należy użyć SHA256 lub wyższej klasy Rfc2898DeriveBytes .
Starsze wersje programu .NET Framework lub .NET Core mogą nie pozwalać na określenie algorytmu skrótu funkcji wywodzenia klucza. W takich przypadkach należy uaktualnić docelową wersję platformy .NET, aby użyć silniejszego algorytmu.
Kiedy pomijać ostrzeżenia
Nie zaleca się pomijania tej reguły z wyjątkiem powodów zgodności aplikacji.
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 CA5379
// The code that's violating the rule is on this line.
#pragma warning restore CA5379
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.CA5379.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.
Przykłady pseudokodu
Określanie algorytmu skrótu w naruszeniu konstruktora
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod(byte[] password, byte[] salt, int iterations, HashAlgorithmName hashAlgorithm)
{
var rfc2898DeriveBytes = new Rfc2898DeriveBytes(password, salt, iterations, HashAlgorithmName.MD5);
}
}
Określanie algorytmu skrótu w naruszeniu konstruktora klasy pochodnej
using System.Security.Cryptography;
class DerivedClass : Rfc2898DeriveBytes
{
public DerivedClass (byte[] password, byte[] salt, int iterations, HashAlgorithmName hashAlgorithm) : base(password, salt, iterations, hashAlgorithm)
{
}
}
class ExampleClass
{
public void ExampleMethod(byte[] password, byte[] salt, int iterations, HashAlgorithmName hashAlgorithm)
{
var derivedClass = new DerivedClass(password, salt, iterations, HashAlgorithmName.MD5);
}
}
Ustawianie właściwości algorytmu wyznaczania wartości skrótu w naruszeniach klas pochodnych
using System.Security.Cryptography;
class DerivedClass : Rfc2898DeriveBytes
{
public DerivedClass (byte[] password, byte[] salt, int iterations, HashAlgorithmName hashAlgorithm) : base(password, salt, iterations, hashAlgorithm)
{
}
public HashAlgorithmName HashAlgorithm { get; set;}
}
class ExampleClass
{
public void ExampleMethod(byte[] password, byte[] salt, int iterations, HashAlgorithmName hashAlgorithm)
{
var derivedClass = new DerivedClass(password, salt, iterations, HashAlgorithmName.MD5);
derivedClass.HashAlgorithm = HashAlgorithmName.SHA256;
}
}
Rozwiązanie
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod(byte[] password, byte[] salt, int iterations, HashAlgorithmName hashAlgorithm)
{
var rfc2898DeriveBytes = new Rfc2898DeriveBytes(password, salt, iterations, HashAlgorithmName.SHA256);
}
}