CA5373: Non usare la funzione di derivazione della chiave obsoleta
Proprietà | valore |
---|---|
ID regola | CA5373 |
Title | Non usare la funzione di derivazione di chiave obsoleta |
Categoria | Sicurezza |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Abilitato per impostazione predefinita in .NET 9 | No |
Causa
Per generare una chiave, vengono usati metodi System.Security.Cryptography.PasswordDeriveBytes di derivazione di chiavi crittograficamente deboli e/o Rfc2898DeriveBytes.CryptDeriveKey .
Descrizione regola
Questa regola rileva la chiamata di metodi System.Security.Cryptography.PasswordDeriveBytes di derivazione chiave debole e Rfc2898DeriveBytes.CryptDeriveKey.
System.Security.Cryptography.PasswordDeriveBytes utilizzato un algoritmo debole PBKDF1. Rfc2898DeriveBytes.CryptDeriveKey non usa il numero di iterazioni e il sale dall'oggetto Rfc2898DeriveBytes
, che lo rende debole.
Come correggere le violazioni
La derivazione della chiave basata su password deve usare l'algoritmo PBKDF2 con hash SHA-2. Rfc2898DeriveBytes.GetBytes può essere usato per ottenere questo risultato.
Quando eliminare gli avvisi
Eliminare l'avviso se il rischio associato all'uso di PBKDF1 viene esaminato attentamente e accettato.
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable CA5373
// The code that's violating the rule is on this line.
#pragma warning restore CA5373
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none
su nel file di configurazione.
[*.{cs,vb}]
dotnet_diagnostic.CA5373.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
Esempi di pseudo-codice
Violazione
Al momento della stesura di questo articolo, l'esempio di pseudocodice seguente illustra il modello rilevato da questa regola.
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);
}
}
Soluzione
using System;
using System.Security.Cryptography;
class TestClass
{
public void TestMethod(Rfc2898DeriveBytes rfc2898DeriveBytes)
{
rfc2898DeriveBytes.GetBytes(1);
}
}