CA5350: Não usar algoritmos de criptografia fracos
Property | Valor |
---|---|
ID da regra | CA5350 |
Título | Não usar algoritmos de criptografia fracos |
Categoria | Segurança |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 7 | No |
Observação
Este aviso foi atualizado pela última vez em novembro de 2015.
Causa
Algoritmos de criptografia, como TripleDES e algoritmos de hash, como SHA1 e RIPEMD160, são considerados fracos.
Esses algoritmos de criptografia não fornecem tanta garantia de segurança quanto equivalentes mais modernos. Os algoritmos de hash criptográfico SHA1 e RIPEMD160 fornecem menos resistência à colisão do que algoritmos de hash mais modernos. O algoritmo de criptografia TripleDES fornece menos bits de segurança do que algoritmos de criptografia mais modernos.
Descrição da regra
Algoritmos de criptografia fracos e funções de hash são usados hoje por vários motivos, mas não devem ser usados para garantir a confidencialidade dos dados protegidos.
A regra dispara quando localiza algoritmos 3DES, SHA1 ou RIPEMD160 no código e gera um aviso ao usuário.
Como corrigir violações
Use opções criptograficamente mais fortes:
Para criptografia TripleDES, use criptografia Aes.
Para funções de hash SHA1 ou RIPEMD160, use as da família SHA-2 (por exemploSHA512, SHA384 e SHA256).
Quando suprimir avisos
Suprima um aviso dessa regra quando o nível de proteção necessário para os dados não exigir uma garantia de segurança.
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 CA5350
// The code that's violating the rule is on this line.
#pragma warning restore CA5350
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.CA5350.severity = none
Para obter mais informações, confira Como suprimir avisos de análise de código.
Exemplos de pseudocódigo
No momento em que este material foi produzido, o exemplo de pseudocódigo a seguir ilustrava o padrão detectado por essa regra.
Violação de hash SHA-1
using System.Security.Cryptography;
...
var hashAlg = SHA1.Create();
Solução:
using System.Security.Cryptography;
...
var hashAlg = SHA256.Create();
Violação de hash RIPEMD160
using System.Security.Cryptography;
...
var hashAlg = RIPEMD160Managed.Create();
Solução:
using System.Security.Cryptography;
...
var hashAlg = SHA256.Create();
Violação da criptografia TripleDES
using System.Security.Cryptography;
...
using (TripleDES encAlg = TripleDES.Create())
{
...
}
Solução:
using System.Security.Cryptography;
...
using (AesManaged encAlg = new AesManaged())
{
...
}