Ferramentas para desenvolvedores · SHA calculadora de hash
Hash criptográfico versus soma de verificação: o que CRC32 e xxHash não podem prometer
· Fundo
sha-256 criptografia segurança
CRC32, FNV e xxHash também são hashes, mas não fazem promessas contra um adversário. Esta postagem explica o que separa hashes criptográficos de somas de verificação e como escolher por caso de uso.
Qual hash para qual trabalho? - a escolha entre velocidade e segurança adversária
As funções hash vêm em três categorias: somas de verificação para detecção de erros acidentais, hashes não criptográficos para distribuição e desempenho e hashes criptográficos para segurança. Cada categoria tem garantias diferentes e compensações diferentes em termos de velocidade e tamanho do resumo. Uma soma de verificação como CRC32 é rápida e curta (4 bytes, 8 caracteres hexadecimais), mas não oferece proteção contra modificação intencional. Um hash não criptográfico como xxHash ou MurmurHash também é rápido e útil para tabelas hash e distribuição de dados, mas não oferece proteção contra um adversário que queira causar uma colisão. Um hash criptográfico como SHA-256 é mais lento e produz um resumo mais longo (32 bytes, 64 caracteres hexadecimais), mas oferece resistência à pré-imagem e resistência à colisão – propriedades de segurança que protegem contra um adversário.
Escolher a função hash errada para o seu caso de uso é um erro de segurança comum. Usar CRC32 para verificar downloads de arquivos de uma fonte não confiável é ineficaz; um invasor pode facilmente modificar o arquivo e recalcular o CRC32. Usar SHA-256 como uma função hash rápida em uma tabela hash de alta frequência é um desperdício; CRC32 ou um hash não criptográfico rápido é suficiente e mais barato.
Somas de verificação para erros acidentais - design de CRC para detectar inversões de bits na transmissão
As somas de verificação são projetadas para detecção de erros durante a transmissão ou armazenamento, onde os erros são considerados aleatórios e acidentais. CRC (Cyclic Redundancy Check) foi originalmente projetado para detectar inversões de bits na comunicação. Um CRC32 produz um resumo de 32 bits. Se um quadro for corrompido por inversões aleatórias de bits durante a transmissão, o CRC32 quase certamente mudará, alertando o receptor para solicitar a retransmissão. CRC pode detectar até um certo número de erros de bits dependendo do polinômio; para os casos de uso mais comuns, uma única inversão de bit ou uma sequência de algumas inversões de bits é detectada de forma confiável.
CRC é determinístico, mas não criptográfico. Dado um arquivo e seu CRC32, um invasor pode modificar o arquivo e recalcular CRC32 para corresponder ao valor esperado. Para um adversário com conhecimento do polinômio CRC, fabricar uma colisão é simples. CRC nunca teve a intenção de resistir a modificações intencionais; é puramente para detecção acidental de erros. Sistemas históricos como arquivos ZIP e arquivos JPEG usam CRC para essa finalidade. Os protocolos modernos usam CRC para detecção rápida de erros em canais criptografados ou autenticados, não como uma verificação de integridade independente.
Hashes não criptográficos para distribuição — FNV, MurmurHash e xxHash em tabelas hash e particionamento
Hashes não criptográficos como FNV-1a, MurmurHash e xxHash são projetados para velocidade e uniformidade em tabelas hash e particionamento de dados. Eles têm latência muito baixa e são usados em situações em que você precisa particionar dados entre servidores ou buckets sem se preocupar com propriedades de segurança. Se você estiver construindo um cache e precisar mapear uma chave para um número de bucket, um hash rápido será apropriado. MurmurHash foi projetado explicitamente para uso em tabelas hash e é mais rápido que SHA na maioria dos hardwares. xxHash é mais recente e é otimizado para CPUs modernas com grandes caches e vetorização.
Esses hashes não são criptográficos porque não resistem a ataques de pré-imagem (encontrar uma entrada que produza um resumo específico) ou ataques de colisão (encontrar duas entradas diferentes que produzam o mesmo resumo). Um invasor pode calcular o algoritmo hash e encontrar entradas que colidem ou que produzem uma saída alvo. Dentro de um ambiente confiável (um cluster onde todos os nós estão sob seu controle), isso é aceitável. Se um usuário não confiável puder controlar a entrada, um hash não criptográfico ficará vulnerável a ataques de colisão que degradam o desempenho (o pior caso da tabela hash é a pesquisa linear quando todas as chaves colidem) ou produzem outros efeitos colaterais.
O que os hashes criptográficos acrescentam – pré-imagem e resistência à colisão contra um invasor deliberado
Hashes criptográficos como SHA-256, SHA-384 e SHA-512 fornecem resistência à pré-imagem: dado um resumo, é computacionalmente inviável encontrar qualquer entrada que produza esse resumo. Eles também fornecem resistência à colisão: é computacionalmente inviável encontrar duas entradas diferentes que produzam o mesmo resumo. Essas propriedades protegem contra um adversário que queira falsificar um download, criar um certificado falso ou adulterar uma mensagem. O custo é a velocidade: SHA-256 é mais lento que CRC32 e mais lento que xxHash na maioria dos hardwares.
SHA-1 está criptograficamente quebrado (colisões são práticas) e não deve ser usado para novos propósitos de segurança, mas ainda é computado para compatibilidade legada. SHA-256, SHA-384 e SHA-512 permanecem fortes e são as escolhas padrão para hashing criptográfico. O "2" em SHA-2 indica a segunda família de algoritmos SHA (o primeiro é o SHA-1 original; SHA-3 é uma família mais recente, mas raramente é usada para esta finalidade).
Hashes criptográficos adicionam propriedades adversárias; este artigo evita reivindicações de velocidade relativa não suportadas
Combinar cinco cenários com a família de hash correta: Primeiro, os quadros de rede transmitidos por um canal confiável criptografado com AES: CRC32 são apropriados. A criptografia protege contra modificações e o CRC detecta corrupção acidental. Segundo, tabelas hash ou hash consistente para balanceamento de carga: um hash não criptográfico como xxHash é apropriado. A velocidade é importante e o ambiente é confiável. Terceiro, é necessário verificar a integridade do download de uma fonte não confiável: SHA-256. Um invasor pode modificar o arquivo e a soma de verificação, mas não o hash criptográfico sem quebrar SHA-256.
Quarto, assinaturas digitais e certificados: SHA-256 é obrigatório e combinado com um algoritmo assimétrico como RSA ou ECDSA. A assinatura prova que o hash não foi modificado após a assinatura. Quinto, a desduplicação de arquivos enviados pelo usuário: SHA-256 é necessária porque os usuários podem fazer upload deliberadamente de arquivos projetados para colidir com arquivos existentes em um hash não criptográfico. Se a desduplicação for baseada em xxHash, um invasor poderá fazer upload de um arquivo com o mesmo hash de outro arquivo, mas com conteúdo diferente, fazendo com que o sistema descarte o upload incorretamente.
Exemplo resolvido - correspondência de cinco cenários (frames de rede, mapas de hash, verificação de download, assinaturas, desduplicação de uploads de usuários) para a família certa
O custo de escolher um hash criptográfico para cada caso de uso é uma sobrecarga de desempenho. SHA-256 é mais lento que CRC e mais lento que xxHash. Em um hot loop – um trecho de código que é executado milhões de vezes por segundo – essa sobrecarga é perceptível. Numa fase de configuração ou numa operação em lote, é insignificante. A estrutura de decisão é: um adversário tem incentivo para causar uma colisão? Se sim, use SHA-256. Se não, e se a velocidade for importante, use um hash mais rápido. Se a segurança for mais importante que a velocidade, use SHA-256 independentemente.
Um erro comum é usar MD5, um hash criptográfico antigo que agora está quebrado. MD5 foi projetado em 1992 e colisões foram demonstradas em 2004. Usar MD5 para qualquer finalidade de segurança não é seguro. Às vezes é visto em sistemas legados e em situações onde a velocidade é priorizada, mas não há cenário onde MD5 seja a escolha certa hoje: se você precisa de velocidade, use xxHash; se precisar de segurança, use SHA-256. Nunca use MD5.
O mapeamento de cenários permanece qualitativo porque o rendimento e o comportamento de colisão precisam de evidências específicas da implementação
O hash de senha é uma quarta categoria, distinta das somas de verificação e dos hashes criptográficos de uso geral. Não use SHA-256 para fazer hash de senhas. Em vez disso, use uma função de hash de senha como bcrypt, scrypt ou Argon2, que são deliberadamente lentas e incluem salt. Um hash criptográfico rápido como SHA-256 torna a adivinhação de senha barata: um invasor pode tentar milhões de tentativas por segundo. Uma função de hash de senha foi projetada para tornar cada tentativa cara em CPU e memória, portanto, adivinhar uma senha forte ainda leva mais tempo do que qualquer invasor pode esperar. O hash de senha é um caso de uso especializado com requisitos próprios.
A calculadora de hash ToolAcre SHA não suporta hash de senha e deliberadamente não oferece MD5, nem parâmetros personalizados nem hashes rápidos. É uma ferramenta para calcular resumos padrão SHA para verificação e verificação de integridade, não para autenticação ou armazenamento de senha.
Conclusão: adversário ou não – use a calculadora de hash ToolAcre SHA quando alguém puder adulterar os dados
A escolha do algoritmo hash é uma decisão fundamental que afeta o desempenho e a segurança de todo o sistema. Um resumo é tão confiável quanto o algoritmo que o produziu. Se você escolher CRC32 para verificação de arquivo, o resumo não fornecerá proteção contra modificação intencional. Se você escolher SHA-256 para uma tabela hash, estará desperdiçando recursos. Conhecer as propriedades e vantagens de cada categoria permite escolher corretamente.
A calculadora de hash ToolAcre SHA fornece SHA-1 a SHA-512, cobrindo os hashes criptográficos importantes para a maioria dos casos de uso. Ele não oferece CRC32, xxHash ou MD5 porque cada um deles é a escolha certa em contextos específicos (CRC para detecção de erros em um canal confiável, xxHash para desempenho em um ambiente controlado, nada para MD5), e oferecê-los sem enfatizar quando usar cada um encorajaria erros. A calculadora serve para calcular resumos criptográficos padrão. Use a linha de comando com `crc32`, `xxh64` ou ferramentas equivalentes se precisar desses hashes. Para verificação de download, impressões digitais de certificados, commits git e casos de uso semelhantes em que um adversário pode adulterar os dados, acesse SHA-256 por meio da calculadora de hash ToolAcre SHA.