CA5358: Använd inte osäkra chifferlägen
Property | Värde |
---|---|
Regel-ID | CA5358 |
Title | Använd inte osäkra chifferlägen |
Kategori | Säkerhet |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Nej |
Orsak
Använd något av följande osäkra krypteringslägen som inte är godkända:
- System.Security.Cryptography.CipherMode.ECB
- System.Security.Cryptography.CipherMode.OFB
- System.Security.Cryptography.CipherMode.CFB
Regelbeskrivning
Dessa lägen är sårbara för attacker och kan orsaka exponering av känslig information. Om du till exempel använder ECB
för att kryptera ett oformaterat block skapas alltid samma chiffertext, så att den enkelt kan se om två krypterade meddelanden är identiska. Om du använder godkända lägen kan du undvika dessa onödiga risker.
Så här åtgärdar du överträdelser
- Använd endast godkända lägen (System.Security.Cryptography.CipherMode.CBC, System.Security.Cryptography.CipherMode.CTS).
När du ska ignorera varningar
Det är säkert att ignorera en varning från den här regeln om:
- Kryptografiexperter har granskat och godkänt chifferlägets användning.
- Den refererade CipherMode används inte för en kryptografisk åtgärd.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA5358
// The code that's violating the rule is on this line.
#pragma warning restore CA5358
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA5358.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.
Exempel på pseudokod
Tilldela ECB till lägesegenskap
using System.Security.Cryptography;
class ExampleClass {
private static void ExampleMethod () {
RijndaelManaged rijn = new RijndaelManaged
{
Mode = CipherMode.ECB
};
}
}
Använda värdet ECB
using System;
using System.Security.Cryptography;
class ExampleClass
{
private static void ExampleMethod()
{
Console.WriteLine(CipherMode.ECB);
}
}
Lösning
using System.Security.Cryptography;
class ExampleClass {
private static void ExampleMethod () {
RijndaelManaged rijn = new RijndaelManaged
{
Mode = CipherMode.CBC
};
}
}