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:
Para MD5, use hashes na família SHA-2 (por exemplo, SHA512, SHA384, SHA256).
Para DES e RC2, use criptografia Aes.
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())
{
...
}