CA5351 Verwenden Sie keine unterbrochenen kryptografischen Algorithmen.

Eigenschaft Wert
Regel-ID CA5351
Titel Keine beschädigten Kryptografiealgorithmen verwenden
Kategorie Security
Fix führt oder führt nicht zur Unterbrechung Nicht unterbrechend
Standardmäßig in .NET 8 aktiviert Nein

Hinweis

Diese Warnung wurde zuletzt im November 2015 aktualisiert.

Ursache

Hashfunktionen wie MD5 und Verschlüsselungsalgorithmen wie DES und RC2 können ein erhebliches Risiko darstellen und führen möglicherweise zur Enthüllung vertraulicher Informationen mithilfe einfacher Angriffsstrategien, wie z. B. Brute-Force-Angriffe und Kollisionsangriffe gegen Hashfunktionen.

Die kryptografischen Algorithmen in der folgenden Liste sind anfällig für bekannte kryptografische Angriffe. Der kryptografische Hashalgorithmus MD5 ist anfällig für Kollisionsangriffe gegen Hashfunktionen. Je nach Einsatzbereich führen Kollisionsangriffe gegen Hashfunktionen zu Identitätswechseln, Manipulationen oder anderen Arten von Angriffen auf Systeme, die auf der eindeutigen kryptografischen Ausgabe einer Hashfunktion beruhen. Die Verschlüsselungsalgorithmen DES und RC2 sind anfällig für kryptografische Angriffe, die zu einer unbeabsichtigten Offenlegung von verschlüsselten Daten führen können.

Regelbeschreibung

Unterbrochene kryptografische Algorithmen werden nicht als sicher betrachtet; ihre Verwendung sollte unterbunden werden. Der MD5-Hashalgorithmus ist anfällig für bekannte Kollisionsangriffe. Die spezielle Sicherheitslücke hängt jedoch vom Verwendungszusammenhang ab. Zum Sicherstellen der Datenintegrität (z. B. Dateisignatur oder digitales Zertifikat) verwendete Hashalgorithmen sind besonders anfällig. In diesem Kontext könnten Angreifer zwei separate Teile der Daten generieren und nützliche Daten durch schädliche Daten ersetzen, ohne den Hashwert zu ändern oder eine zugeordnete digitale Signatur für ungültig zu erklären.

Bei Verschlüsselungsalgorithmen:

  • DieDES -Verschlüsselung enthält eine kleine Schlüsselgröße, die in weniger als einem Tag einem Brute-Force-Angriff zum Opfer fallen könnte.

  • DieRC2 -Verschlüsselung ist anfällig für einen schlüsselbezogenen Angriff, bei dem der Angreifer nach mathematischen Beziehungen zwischen allen Schlüsselwerten sucht.

Diese Regel löst aus, wenn eine der oben genannten Kryptografiefunktionen im Quellcode gefunden wird, und gibt eine Warnung für den Benutzer aus.

Behandeln von Verstößen

Verwenden Sie kryptografisch sicherere Optionen:

  • Verwenden Sie für MD5 Hashes der Familie SHA-2 (z. B. SHA512, SHA384, SHA256).

  • Verwenden Sie für DES und RC2 eine Aes -Verschlüsselung.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie keine Warnung dieser Regel, bevor sie von einem Kryptografie-Experten geprüft wurde.

Unterdrücken einer Warnung

Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.

#pragma warning disable CA5351
// The code that's violating the rule is on this line.
#pragma warning restore CA5351

Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none fest.

[*.{cs,vb}]
dotnet_diagnostic.CA5351.severity = none

Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.

Pseudocodebeispiele

Die folgenden Beispiele mit Pseudocode veranschaulichen das von dieser Regel erkannte Muster und mögliche Alternativen.

Verstoß bei MD5-Hashfunktion

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

Lösung:

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

Verstoß bei RC2-Verschlüsselung

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

Lösung:

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

Verstoß bei DES-Verschlüsselung

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

Lösung:

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