CA5402: Usare CreateEncryptor con l'iv predefinito
Proprietà | valore |
---|---|
ID regola | CA5402 |
Titolo | Usa CreateEncryptor con il vettore di inizializzazione predefinito |
Categoria | Sicurezza |
Correzione che causa un'interruzione o un'interruzione | Nessuna interruzione |
Abilitato per impostazione predefinita in .NET 8 | No |
Causa
Può rgbIV
essere non predefinito quando si usa System.Security.Cryptography.SymmetricAlgorithm.CreateEncryptor.
Descrizione regola
La crittografia simmetrica deve usare sempre un vettore di inizializzazione non ripetibile per impedire attacchi a dizionario.
Questa regola è simile a CA5401, ma l'analisi non è in grado di determinare che il vettore di inizializzazione è sicuramente l'impostazione predefinita.
Come correggere le violazioni
Usare il valore predefinito in modo esplicito rgbIV
, ovvero usare l'overload dell'oggetto System.Security.Cryptography.SymmetricAlgorithm.CreateEncryptor che non ha alcun parametro.
Quando eliminare gli avvisi
È possibile eliminare un avviso da questa regola se:
- Il
rgbIV
parametro è stato generato da System.Security.Cryptography.SymmetricAlgorithm.GenerateIV. - Si è certi che il
rgbIV
parametro sia davvero casuale e non ripetibile. - Si è certi che venga usato il vettore di inizializzazione.
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 CA5402
// The code that's violating the rule is on this line.
#pragma warning restore CA5402
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.CA5402.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
Esempi di pseudo-codice
using System;
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod(byte[] rgbIV)
{
AesCng aesCng = new AesCng();
Random r = new Random();
if (r.Next(6) == 4)
{
aesCng.IV = rgbIV;
}
aesCng.CreateEncryptor();
}
}
Soluzione
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod()
{
AesCng aesCng = new AesCng();
aesCng.CreateEncryptor();
}
}