CA5351: Nepoužívejte poškozené kryptografické algoritmy

Vlastnost Hodnota
ID pravidla CA5351
Název Nepoužívejte poškozené kryptografické algoritmy
Kategorie Zabezpečení
Oprava, která může být destruktivní nebo nedestruktivní Nezlomitelný
Povoleno ve výchozím nastavení v .NET 10 Ne
Příslušné jazyky C# a Visual Basic

Poznámka:

Toto upozornění bylo naposledy aktualizováno v listopadu 2015.

Příčina

Hashovací funkce, jako je MD5, a šifrovací algoritmy, jako jsou DES a RC2, mohou představovat významné riziko a mohou vést k vystavení citlivých informací prostřednictvím triviálních technik útoku, jako jsou útoky hrubou silou a kolize hash.

Níže uvedený seznam kryptografických algoritmů podléhá známým kryptografickým útokům. Kryptografický hashovací algoritmus MD5 podléhá útokům kolizí hash. V závislosti na využití může kolize hash vést k zosobnění, manipulaci nebo jiným druhům útoků na systémy, které spoléhají na jedinečný kryptografický výstup funkce hash. Šifrovací algoritmy DES a RC2 podléhají kryptografickým útokům, které můžou vést k nezamýšlenému zpřístupnění šifrovaných dat.

Popis pravidla

Poškozené kryptografické algoritmy se nepovažují za bezpečné a jejich použití by se mělo odradit. Hashovací algoritmus MD5 je náchylný ke známým útokům na kolize, i když se konkrétní zranitelnost bude lišit podle kontextu použití. Algoritmy hash používané k zajištění integrity dat (například podpisu souboru nebo digitálního certifikátu) jsou obzvláště zranitelné. V tomto kontextu by útočníci mohli vygenerovat dvě samostatné části dat, aby neškodná data mohla být nahrazena škodlivými daty, aniž by došlo ke změně hodnoty hash nebo k zneplatnění přidruženého digitálního podpisu.

Pro šifrovací algoritmy:

  • DES šifrování má malou velikost klíče, kterou lze prolomit hrubou silou za méně než den.

  • RC2 šifrování je náchylné k útoku souvisejícího klíče, kde útočník najde matematické vztahy mezi všemi hodnotami klíče.

Toto pravidlo se aktivuje, když najde některou z výše uvedených kryptografických funkcí ve zdrojovém kódu a uživateli vyvolá upozornění.

Jak opravit porušení

Používejte kryptograficky silnější možnosti:

Kdy potlačit upozornění

Nepotlačujte upozornění z tohoto pravidla, pokud ho nezkontroloval kryptografický odborník.

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 CA5351
// The code that's violating the rule is on this line.
#pragma warning restore CA5351

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.CA5351.severity = none

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.

Příklady pseudokódu

Následující ukázky pseudokódu ilustrují vzor zjištěný tímto pravidlem a možné alternativy.

Porušení hash MD5

using System.Security.Cryptography;
...
var hashAlg = MD5.Create();

Řešení:

using System.Security.Cryptography;
...
var hashAlg = SHA256.Create();

Porušení šifrování RC2

using System.Security.Cryptography;
...
RC2 encAlg = RC2.Create();

Řešení:

using System.Security.Cryptography;
...
using (AesManaged encAlg = new AesManaged())
{
  ...
}

Porušení šifrování DES

using System.Security.Cryptography;
...
DES encAlg = DES.Create();

Řešení:

using System.Security.Cryptography;
...
using (AesManaged encAlg = new AesManaged())
{
  ...
}