CA5351: non usare algoritmi di crittografia interrotti
Proprietà | valore |
---|---|
ID regola | CA5351 |
Title | Non usare algoritmi crittografici interrotti |
Categoria | Sicurezza |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Abilitato per impostazione predefinita in .NET 9 | No |
Nota
Ultimo aggiornamento di questo avviso: novembre 2015.
Causa
Le funzioni hash come MD5 e gli algoritmi di crittografia come DES e RC2 possono causare rischi significativi ed esporre le informazioni sensibili tramite semplici tecniche di attacco, come attacchi di forza bruta e collisioni hash.
Gli algoritmi di crittografia elencati di seguito sono soggetti ad attacchi crittografici noti. L'algoritmo hash di crittografia MD5 è soggetto ad attacchi di collisione hash. A seconda dell'utilizzo, la collisione hash può causare rappresentazione, manomissione o altri tipi di attacchi in sistemi che ricorrono all'output di crittografia univoco di una funzione hash. Gli algoritmi di crittografia DES e RC2 sono soggetti ad attacchi crittografici che possono provocare la diffusione indesiderata dei dati crittografati.
Descrizione regola
Gli algoritmi di crittografia interrotti non sono considerati sicuri e il loro uso non è consigliato. L'algoritmo hash MD5 è soggetto ad attacchi di collisione noti, anche se la vulnerabilità specifica varia a seconda del contesto d'uso. Gli algoritmi di hash usati per garantire l'integrità dei dati (ad esempio, firma file o certificato digitale) sono particolarmente vulnerabili. In questo contesto gli autori di attacchi possono generare due serie di dati separati, in modo tale che i dati validi possano essere sostituiti da dati dannosi senza modificare il valore hash o invalidare una firma digitale associata.
Per gli algoritmi di crittografia:
La crittografiaDES contiene una chiave di piccole dimensioni, che può essere colpita da attacchi di forza bruta in meno di un giorno.
La crittografiaRC2 è soggetta ad attacchi alle chiavi correlate, in cui l'autore dell'attacco trova le relazioni matematiche tra tutti i valori di chiave.
Questa regola viene attivata quando trova nel codice sorgente una delle funzioni di crittografia indicate sopra e genera un avviso all'utente.
Come correggere le violazioni
Usare opzioni di crittografia più avanzate:
Per MD5, usare gli hash nella famiglia SHA-2 ( ad esempio , SHA512SHA384, ). SHA256
Per DES e RC2, usare la crittografia Aes .
Quando eliminare gli avvisi
Non eliminare un avviso da questa regola, a meno che questa non venga esaminata da un esperto di crittografia.
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 CA5351
// The code that's violating the rule is on this line.
#pragma warning restore CA5351
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.CA5351.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
Esempi di pseudo-codice
Gli esempi di pseudo-codice seguenti illustrano il modello rilevato da questa regola e le possibili alternative.
Violazione di hash MD5
using System.Security.Cryptography;
...
var hashAlg = MD5.Create();
Soluzione:
using System.Security.Cryptography;
...
var hashAlg = SHA256.Create();
Violazione di crittografia RC2
using System.Security.Cryptography;
...
RC2 encAlg = RC2.Create();
Soluzione:
using System.Security.Cryptography;
...
using (AesManaged encAlg = new AesManaged())
{
...
}
Violazione di crittografia DES
using System.Security.Cryptography;
...
DES encAlg = DES.Create();
Soluzione:
using System.Security.Cryptography;
...
using (AesManaged encAlg = new AesManaged())
{
...
}