CA5351 Não use algoritmos criptográficos quebrados
Property | valor |
---|---|
ID da regra | CA5351 |
Título | 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 9 | Não |
Nota
Este aviso foi atualizado pela última vez em novembro de 2015.
Motivo
Funções de hashing, como MD5 algoritmos RC2 de criptografia e podem DES expor riscos significativos e podem 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 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 para o usuário.
Como corrigir violações
Use opções criptograficamente mais fortes:
Para MD5, use hashes na família SHA-2 (por exemplo, SHA512, , SHA384SHA256).
Para DES e RC2, use Aes criptografia.
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 de um arquivo, pasta ou projeto, defina sua gravidade 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())
{
...
}