Uma função de hash transforma dados numa impressão digital de tamanho determinado. Alterar os dados, mesmo ligeiramente, produz normalmente uma impressão diferente. Esta propriedade torna os hashes úteis para integridade e comparação, mas um hash não é cifragem.
Hash, integridade e comparação de impressões: o que um hash pode realmente provar
Distinga hash, cifragem e assinatura e utilize impressões para verificar igualdade ou integridade sem lhes atribuir falsas garantias.
Mostrar índice
Hash e cifragem têm objetivos diferentes
A cifragem foi concebida para tornar dados ilegíveis sem a chave necessária para os decifrar. Um hash é uma transformação de sentido único utilizada para produzir uma impressão. Não se “decifra” um hash para recuperar o ficheiro original.
Comparar duas impressões
Se dois ficheiros produzirem a mesma impressão com o mesmo algoritmo, isso oferece uma forma prática de verificar que correspondem. A confiança depende, porém, da origem da impressão de referência: comparar um ficheiro comprometido com um hash obtido pelo mesmo canal comprometido não cria uma fonte de confiança independente.
Os algoritmos não têm todos a mesma utilização
SHA-256 continua amplamente utilizado para verificar integridade de ficheiros e em vários protocolos. SHA-3 pertence a outra família moderna. MD5 e SHA-1 ainda aparecem em sistemas antigos ou controlos não adversariais, mas as suas fragilidades de colisão tornam-nos inadequados para muitos usos de segurança.
Quando uma fonte publica várias impressões, prefira o algoritmo moderno recomendado em vez do mais curto ou mais familiar.
Colisões e propriedades criptográficas
Como o espaço de entradas é maior do que o espaço de saídas, colisões são matematicamente possíveis. A segurança de uma boa função moderna depende de ser impraticável construir deliberadamente uma colisão útil no contexto considerado.
O comprimento de uma impressão não deve, por isso, ser interpretado como garantia absoluta sem considerar o algoritmo e o modelo de ameaça.
Verificar um download
Um caso comum consiste em calcular o hash do ficheiro descarregado e compará-lo com um valor publicado por uma fonte de confiança. Se os valores forem diferentes, o conteúdo não corresponde. Se forem iguais, sabe que o ficheiro corresponde à referência comparada.
Isto não prova, por si só, a origem do ficheiro. Para uma garantia mais forte de autenticidade pode ser necessária uma assinatura digital.
Hash, MAC e assinatura digital
Um hash simples não utiliza segredo: qualquer pessoa pode calcular a impressão de conteúdo modificado. Um MAC combina dados com um segredo partilhado para fornecer integridade e autenticidade entre detentores desse segredo. Uma assinatura digital utiliza uma chave privada para assinar e uma chave pública para verificar.
Dizer “o hash corresponde” significa, portanto, apenas que o conteúdo corresponde à referência utilizada.
Encoding também não é cifragem
Base64, hexadecimal e URL encoding alteram a representação dos dados. São reversíveis sem chave e não fornecem confidencialidade. Esta distinção é útil quando se inspecionam JWT ou outras strings técnicas aparentemente ilegíveis.
Palavras-passe exigem funções específicas
Para palavras-passe, a velocidade de um hash genérico é uma desvantagem: permite a um atacante testar muitos candidatos. O armazenamento de palavras-passe necessita de funções de derivação deliberadamente dispendiosas e salts únicos, como Argon2id, scrypt ou bcrypt conforme o contexto.
SRI e recursos Web
Para scripts e folhas de estilo carregados externamente, Subresource Integrity utiliza uma impressão esperada para verificar o conteúdo recebido pelo navegador. Se o recurso mudar e deixar de corresponder ao hash declarado, o navegador pode rejeitá-lo.
Um hash é, portanto, excelente para comparar conteúdos e detetar diferenças, desde que não seja confundido com cifragem, autenticação ou assinatura.
Para comparar hashing com criptografia, HMAC e PBKDF2, continue com Criptografia, hashing e HMAC.
Este artigo foi útil?
Fontes e referências
- NIST — FIPS 180-4: Secure Hash Standard (abre num novo separador)Página em inglês
- NIST — FIPS 202: SHA-3 Standard (abre num novo separador)Página em inglês
- NIST — Policy on Hash Functions (abre num novo separador)Página em inglês
- RFC 6151 — Updated Security Considerations for MD5 and HMAC-MD5 (abre num novo separador)Página em inglês