Freigeben über


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 9 aktiviert No

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);
    }
}