CA5351: non usare algoritmi di crittografia interrotti

Proprietà valore
ID regola CA5351
Titolo Non usare algoritmi crittografici interrotti
Categoria Sicurezza
Correzione che causa un'interruzione o un'interruzione Nessuna interruzione
Abilitato per impostazione predefinita in .NET 8 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:

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())
{
  ...
}