Share via


CA5373: Använd inte föråldrad nyckelhärledningsfunktion

Property Värde
Regel-ID CA5373
Rubrik Använd inte föråldrad nyckelhärledningsfunktion
Kategori Säkerhet
Korrigeringen är icke-bakåtkompatibel Icke-icke-bryta
Aktiverad som standard i .NET 8 Nej

Orsak

Kryptografiskt svaga nyckelhärledningsmetoder System.Security.Cryptography.PasswordDeriveBytes och/eller Rfc2898DeriveBytes.CryptDeriveKey används för att generera en nyckel.

Regelbeskrivning

Den här regeln identifierar anrop av svaga nyckelhärledningsmetoder System.Security.Cryptography.PasswordDeriveBytes och Rfc2898DeriveBytes.CryptDeriveKey. System.Security.Cryptography.PasswordDeriveBytes använde en svag algoritm PBKDF1. Rfc2898DeriveBytes.CryptDeriveKey använder inte iterationsantal och salt från Rfc2898DeriveBytes objektet, vilket gör det svagt.

Så här åtgärdar du överträdelser

Lösenordsbaserad nyckelhärledning bör använda PBKDF2-algoritmen med SHA-2-hashning. Rfc2898DeriveBytes.GetBytes kan användas för att uppnå detta.

När du ska ignorera varningar

Ignorera varningen om den risk som är förknippad med att använda PBKDF1 granskas noggrant och godkänns.

Ignorera en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

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

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

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

Mer information finns i Så här utelämnar du kodanalysvarningar.

Exempel på pseudokod

Kränkning

När det här skrivs illustrerar följande pseudokodexempel det mönster som identifieras av den här regeln.

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ösning

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