Share via


CA5373: Gebruik geen verouderde functie voor sleutel-afleiding

Eigenschappen Weergegeven als
Regel-id CA5373
Titel Gebruik geen verouderde functie voor sleutelverdering
Categorie Beveiliging
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 8 Nee

Oorzaak

Cryptografisch zwakke methoden voor de afleiding van System.Security.Cryptography.PasswordDeriveBytes sleutels en/of Rfc2898DeriveBytes.CryptDeriveKey worden gebruikt om een sleutel te genereren.

Beschrijving van regel

Deze regel detecteert de aanroep van zwakke methoden voor de afleiding System.Security.Cryptography.PasswordDeriveBytes van sleutels en Rfc2898DeriveBytes.CryptDeriveKey. System.Security.Cryptography.PasswordDeriveBytes gebruikt een zwak algoritme PBKDF1. Rfc2898DeriveBytes.CryptDeriveKey gebruikt geen iteratieaantal en zout van het Rfc2898DeriveBytes object, waardoor het zwak wordt.

Schendingen oplossen

Wachtwoordgebaseerde sleutelderivatie moet gebruikmaken van het PBKDF2-algoritme met SHA-2-hashing. Rfc2898DeriveBytes.GetBytes kan worden gebruikt om dat te bereiken.

Wanneer waarschuwingen onderdrukken

Onderdrukt de waarschuwing als het risico dat is gekoppeld aan het gebruik van PBKDF1 zorgvuldig wordt gecontroleerd en geaccepteerd.

Een waarschuwing onderdrukken

Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.

#pragma warning disable CA5373
// The code that's violating the rule is on this line.
#pragma warning restore CA5373

Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none ervan in op het configuratiebestand.

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

Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.

Voorbeelden van pseudocode

Schending

Vanaf het moment van schrijven illustreert het volgende pseudocodevoorbeeld het patroon dat door deze regel is gedetecteerd.

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

Oplossing

using System;
using System.Security.Cryptography;
class TestClass
{
    public void TestMethod(Rfc2898DeriveBytes rfc2898DeriveBytes)
    {
        rfc2898DeriveBytes.GetBytes(1);
    }
}