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