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())
{
  ...
}