CA5373: Verwenden Sie keine veraltete Schlüsselableitungsfunktion.
Eigenschaft | Wert |
---|---|
Regel-ID | CA5373 |
Titel | Verwenden Sie keine veraltete Schlüsselableitungsfunktion. |
Kategorie | Security |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Standardmäßig in .NET 8 aktiviert | Nein |
Ursache
Kryptografisch schwache Schlüsselableitungsmethoden System.Security.Cryptography.PasswordDeriveBytes und/oder Rfc2898DeriveBytes.CryptDeriveKey werden verwendet, um einen Schlüssel zu generieren.
Regelbeschreibung
Diese Regel erkennt den Aufruf der schwachen Schlüsselableitungsmethoden System.Security.Cryptography.PasswordDeriveBytes und Rfc2898DeriveBytes.CryptDeriveKey.
System.Security.Cryptography.PasswordDeriveBytes verwendete den schwachen Algorithmus PBKDF1. Rfc2898DeriveBytes.CryptDeriveKey verwendet nicht die Iterationsanzahl und Salt aus dem Rfc2898DeriveBytes
-Objekt, wodurch es schwach ist.
Behandeln von Verstößen
Bei der kennwortbasierten Schlüsselableitung muss der PBKDF2-Algorithmus mit SHA-2-Hashwert verwendet werden. Rfc2898DeriveBytes.GetBytes kann verwendet werden, um dies zu erreichen.
Wann sollten Warnungen unterdrückt werden?
Unterdrücken Sie die Warnung, wenn das mit der Verwendung von PBKDF1 verbundene Risiko sorgfältig überprüft und akzeptiert wird.
Unterdrücken einer Warnung
Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.
#pragma warning disable CA5373
// The code that's violating the rule is on this line.
#pragma warning restore CA5373
Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none
fest.
[*.{cs,vb}]
dotnet_diagnostic.CA5373.severity = none
Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.
Pseudocodebeispiele
Verletzung
Zum Zeitpunkt der Erstellung dieses Dokuments veranschaulicht das folgende Beispiel mit Pseudocode das von dieser Regel erkannte Muster.
using System;
using System.Security.Cryptography;
class TestClass
{
public void TestMethod(Rfc2898DeriveBytes rfc2898DeriveBytes, string algname, string alghashname, int keySize, byte[] rgbIV)
{
rfc2898DeriveBytes.CryptDeriveKey(algname, alghashname, keySize, rgbIV);
}
}
Lösung
using System;
using System.Security.Cryptography;
class TestClass
{
public void TestMethod(Rfc2898DeriveBytes rfc2898DeriveBytes)
{
rfc2898DeriveBytes.GetBytes(1);
}
}