CA5351 não use algoritmos de criptografia desfeitos

Property Valor
ID da regra CA5351
Título Não usar algoritmos de criptografia desfeitos
Categoria Segurança
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 8 Não

Observação

Este aviso foi atualizado pela última vez em novembro de 2015.

Causa

Funções de hash, como MD5, e algoritmos de criptografia, como DES e RC2, podem expor riscos significativos e resultar na exposição de informações confidenciais por meio de técnicas de ataque triviais, como ataques de força bruta e colisões de hash.

A lista de algoritmos criptográficos abaixo está sujeita a ataques criptográficos conhecidos. O algoritmo de hash criptográfico MD5 está sujeito a ataques de colisão de hash. Dependendo do uso, uma colisão de hash pode levar a representação, adulteração ou outros tipos de ataques em sistemas que dependem da saída criptográfica exclusiva de uma função de hash. Os algoritmos de criptografia DES e RC2 estão sujeitos a ataques criptográficos que podem resultar na divulgação não intencional de dados criptografados.

Descrição da regra

Algoritmos criptográficos desfeitos não são considerados seguros e seu uso é desencorajado. O algoritmo de hash MD5 é suscetível a ataques de colisão conhecidos, embora a vulnerabilidade específica varie conforme o contexto de uso. Os algoritmos de hash usados para garantir a integridade dos dados (por exemplo, assinatura de arquivo ou certificado digital) são particularmente vulneráveis. Nesse contexto, os invasores podem gerar dois dados separados, de modo que dados benignos possam ser substituídos por dados mal-intencionados, sem alterar o valor de hash nem invalidar uma assinatura digital associada.

Para algoritmos de criptografia:

  • A criptografia DES contém um tamanho de chave pequeno, que pode ser descoberto por força bruta em menos de um dia.

  • A criptografia RC2 é suscetível a um ataque de chave relacionada, em que o invasor encontra relações matemáticas entre todos os valores de chave.

Essa regra é disparada quando localiza qualquer uma das funções criptográficas acima no código-fonte e gera um aviso ao usuário.

Como corrigir violações

Use opções criptograficamente mais fortes:

Quando suprimir avisos

Não suprime um aviso dessa regra, a menos que tenha sido examinado por um especialista em criptografia.

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

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

Para obter mais informações, confira Como suprimir avisos de análise de código.

Exemplos de pseudocódigo

Os exemplos de pseudocódigo a seguir ilustram o padrão detectado por essa regra e possíveis alternativas.

Violação de hash MD5

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

Solução:

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

Violação de criptografia RC2

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

Solução:

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

Violação de criptografia DES

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

Solução:

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