CA5358 : Ne pas utiliser de modes de chiffrement non sécurisés
Propriété | Value |
---|---|
Identificateur de la règle | CA5358 |
Titre | Ne pas utiliser de modes de chiffrement non sécurisés |
Catégorie | Sécurité |
Le correctif est cassant ou non cassant | Sans rupture |
Activé par défaut dans .NET 8 | Non |
Cause
Utilisation de l’un des modes de chiffrement non sécurisés suivants qui n’est pas approuvé :
- System.Security.Cryptography.CipherMode.ECB
- System.Security.Cryptography.CipherMode.OFB
- System.Security.Cryptography.CipherMode.CFB
Description de la règle
Ces modes sont vulnérables aux attaques et peuvent entraîner l’exposition d’informations sensibles. Par exemple, l’utilisation de ECB
pour chiffrer un bloc en texte brut produit toujours un même texte de chiffrement, afin qu’il puisse facilement déterminer si deux messages chiffrés sont identiques. L’utilisation de modes approuvés peut éviter ces risques inutiles.
Comment corriger les violations
- Utilisez uniquement les modes approuvés (System.Security.Cryptography.CipherMode.CBC, System.Security.Cryptography.CipherMode.CTS).
Quand supprimer les avertissements
Vous pouvez supprimer sans risque un avertissement de cette règle si :
- Des experts en chiffrement ont examiné et approuvé l’utilisation du mode de chiffrement.
- Le CipherMode référencé n’est pas utilisé pour une opération de chiffrement.
Supprimer un avertissement
Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.
#pragma warning disable CA5358
// The code that's violating the rule is on this line.
#pragma warning restore CA5358
Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none
dans le fichier de configuration.
[*.{cs,vb}]
dotnet_diagnostic.CA5358.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.
Exemples de pseudo-code
Attribuer l’ECB à la propriété Mode
using System.Security.Cryptography;
class ExampleClass {
private static void ExampleMethod () {
RijndaelManaged rijn = new RijndaelManaged
{
Mode = CipherMode.ECB
};
}
}
Utilisation de la valeur ECB
using System;
using System.Security.Cryptography;
class ExampleClass
{
private static void ExampleMethod()
{
Console.WriteLine(CipherMode.ECB);
}
}
Solution
using System.Security.Cryptography;
class ExampleClass {
private static void ExampleMethod () {
RijndaelManaged rijn = new RijndaelManaged
{
Mode = CipherMode.CBC
};
}
}