Partilhar via


CA5351 Não use algoritmos criptográficos quebrados

Propriedade valor
ID da regra CA5351
Cargo Não use algoritmos criptográficos quebrados
Categoria Segurança
A correção está quebrando ou não quebrando Sem quebra
Habilitado por padrão no .NET 8 Não

Nota

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

Causa

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

A lista de algoritmos criptográficos abaixo está sujeita a ataques criptográficos conhecidos. O algoritmo MD5 de hash criptográfico está sujeito a ataques de colisão de hash. Dependendo do uso, uma colisão de hash pode levar à 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 DES encriptação e RC2 estão sujeitos a ataques criptográficos que podem resultar na divulgação não intencional de dados encriptados.

Descrição da regra

Algoritmos criptográficos quebrados não são considerados seguros e seu uso deve ser desencorajado. O algoritmo de hash MD5 é suscetível a ataques de colisão conhecidos, embora a vulnerabilidade específica varie com base no contexto de uso. Os algoritmos de hashing utilizados para garantir a integridade dos dados (por exemplo, assinatura de ficheiro ou certificado digital) são particularmente vulneráveis. Neste contexto, os atacantes podem gerar dois dados separados, de modo que os dados benignos possam ser substituídos por dados maliciosos, sem alterar o valor de hash ou invalidar uma assinatura digital associada.

Para algoritmos de encriptação:

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

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

Esta regra é acionada quando encontra qualquer uma das funções criptográficas acima no código-fonte e lança um aviso ao usuário.

Como corrigir violações

Use opções criptograficamente mais fortes:

Quando suprimir avisos

Não suprima um aviso desta regra, a menos que ele tenha sido revisado por um especialista em criptografia.

Suprimir um aviso

Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar 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 para um arquivo, pasta ou projeto, defina sua severidade como none no arquivo de configuração.

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

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

Exemplos de pseudocódigo

Os exemplos de pseudocódigo a seguir ilustram o padrão detetado 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())
{
  ...
}