Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| Eigenschap | Waarde |
|---|---|
| Regel-id | CA5379 |
| Titel | Zorg ervoor dat het algoritme van de sleutel-afleidingsfunctie voldoende sterk is |
| Categorie | Beveiliging |
| Fix kan brekend of niet-brekend zijn | Niet-brekend |
| Standaard ingeschakeld in .NET 10 | Nee |
| Toepasselijke talen | C# en Visual Basic |
Oorzaak
Gebruik van een van de volgende algoritmen bij het instantiëren System.Security.Cryptography.Rfc2898DeriveBytes:
- System.Security.Cryptography.MD5
- System.Security.Cryptography.SHA1
- Een algoritme dat de regel niet kan bepalen tijdens het compileren
Beschrijving van regel
De Rfc2898DeriveBytes klasse maakt standaard gebruik van het SHA1 algoritme. Bij het instantiëren van een Rfc2898DeriveBytes object moet u een hash-algoritme van SHA256 of hoger opgeven. Houd er rekening mee dat de eigenschap Rfc2898DeriveBytes.HashAlgorithm alleen een get accessor heeft.
Hoe schendingen op te lossen
Omdat MD5 of SHA1 kwetsbaar is voor botsingen, gebruikt SHA256 of hoger voor de Rfc2898DeriveBytes klasse.
Oudere versies van .NET Framework of .NET Core staan mogelijk niet toe dat u een hash-algoritme voor sleuteldeivatiefunctie opgeeft. In dergelijke gevallen moet u de doelframeworkversie van .NET upgraden om een sterker algoritme te gebruiken.
Wanneer waarschuwingen onderdrukken
Het wordt afgeraden deze regel te onderdrukken, met uitzondering van toepassingscompatibiliteitsredenen.
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 CA5379
// The code that's violating the rule is on this line.
#pragma warning restore CA5379
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.CA5379.severity = none
Zie voor meer informatie Hoe codeanalysewaarschuwingen te onderdrukken.
Voorbeelden van pseudocode
Hash-algoritme opgeven bij schending van constructor
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);
}
}
Hash-algoritme opgeven in de constructorschending van afgeleide klasse
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);
}
}
Eigenschap hash-algoritme instellen in schending van afgeleide klassen
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;
}
}
Oplossing
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);
}
}