CA5373: Nepoužívejte zastaralou funkci odvození klíče
Vlastnost | Hodnota |
---|---|
ID pravidla | CA5373 |
Název | Nepoužívat zastaralou funkci odvození klíče |
Kategorie | Zabezpečení |
Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
Povoleno ve výchozím nastavení v .NET 9 | No |
Příčina
Kryptograficky slabé metody System.Security.Cryptography.PasswordDeriveBytes odvození klíče nebo Rfc2898DeriveBytes.CryptDeriveKey se používají ke generování klíče.
Popis pravidla
Toto pravidlo detekuje vyvolání slabých metod System.Security.Cryptography.PasswordDeriveBytes odvození klíče a Rfc2898DeriveBytes.CryptDeriveKey.
System.Security.Cryptography.PasswordDeriveBytes použil slabý algoritmus PBKDF1.
Rfc2898DeriveBytes.CryptDeriveKey nepoužívá počet iterací a sůl z objektu Rfc2898DeriveBytes
, což z něj činí slabé.
Jak opravit porušení
Odvození klíče založeného na heslech by mělo používat algoritmus PBKDF2 s hashováním SHA-2. Rfc2898DeriveBytes.GetBytes toho lze dosáhnout.
Kdy potlačit upozornění
Potlačit upozornění, pokud je riziko spojené s používáním PBKDF1 pečlivě zkontrolováno a přijato.
Potlačení upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA5373
// The code that's violating the rule is on this line.
#pragma warning restore CA5373
Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none
konfiguračním souboru.
[*.{cs,vb}]
dotnet_diagnostic.CA5373.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.
Příklady pseudokódu
Porušení
V době psaní tohoto článku znázorňuje následující vzor pseudokódu model zjištěný tímto pravidlem.
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);
}
}
Řešení
using System;
using System.Security.Cryptography;
class TestClass
{
public void TestMethod(Rfc2898DeriveBytes rfc2898DeriveBytes)
{
rfc2898DeriveBytes.GetBytes(1);
}
}