CA5358: Não usar modos de criptografia não seguros
Property | Valor |
---|---|
ID da regra | CA5358 |
Título | Não usar modos de criptografia não seguros |
Categoria | Segurança |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 9 | Não |
Causa
Uso de um dos seguintes modos de criptografia não seguros que não são aprovados:
- System.Security.Cryptography.CipherMode.ECB
- System.Security.Cryptography.CipherMode.OFB
- System.Security.Cryptography.CipherMode.CFB
Descrição da regra
Esses modos são vulneráveis a ataques e podem causar exposição de informações confidenciais. Por exemplo, usar ECB
para criptografar um bloco de texto sem formatação sempre produz um mesmo texto codificado e, portanto, pode facilmente identificar se duas mensagens criptografadas são idênticas. O uso de modos aprovados pode evitar esses riscos desnecessários.
Como corrigir violações
- Usar somente modos aprovados (System.Security.Cryptography.CipherMode.CBC, System.Security.Cryptography.CipherMode.CTS).
Quando suprimir avisos
É seguro suprimir um aviso dessa regra se:
- Especialistas em criptografia revisaram e aprovaram o uso do modo de criptografia.
- O CipherMode referenciado não é usado para uma operação criptográfica.
Suprimir um aviso
Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar a regra.
#pragma warning disable CA5358
// The code that's violating the rule is on this line.
#pragma warning restore CA5358
Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA5358.severity = none
Para obter mais informações, confira Como suprimir avisos de análise de código.
Exemplos de pseudocódigo
Atribuir a propriedade ECB para Modo
using System.Security.Cryptography;
class ExampleClass {
private static void ExampleMethod () {
RijndaelManaged rijn = new RijndaelManaged
{
Mode = CipherMode.ECB
};
}
}
Usar o valor BCE
using System;
using System.Security.Cryptography;
class ExampleClass
{
private static void ExampleMethod()
{
Console.WriteLine(CipherMode.ECB);
}
}
Solução
using System.Security.Cryptography;
class ExampleClass {
private static void ExampleMethod () {
RijndaelManaged rijn = new RijndaelManaged
{
Mode = CipherMode.CBC
};
}
}