O Que é Hashing?

Hashing é um dos conceitos mais importantes em ciência da computação e segurança. Toda vez que você faz login em um site, baixa software ou faz uma transação de criptomoeda, funções hash estão trabalhando nos bastidores. Este guia explica hashing em termos simples e mostra por que importa.

Função Unidirecional

A característica definidora de uma função hash criptográfica é sua natureza unidirecional. Você pode facilmente computar um hash de qualquer entrada, mas não pode computar a entrada de um hash. Isto não é apenas computacionalmente difícil—é matematicamente projetado para ser impossível sem tentar cada entrada possível até encontrar uma correspondência. Imagine um moedor de carne: você pode colocar um bife e obter carne moída, mas não pode remontar o bife da carne moída. Funções hash funcionam similarmente—elas irreversivelmente transformam dados. A estrutura matemática garante que não existem atalhos para reverter o processo. Esta propriedade unidirecional é o que faz o hash de senha funcionar. Quando você cria uma conta, o serviço hasheia sua senha e armazena apenas o hash. Quando você faz login, sua senha inserida é hasheada e comparada ao hash armazenado. Se coincidirem, você é autenticado. Mas se alguém rouba o banco de dados de hash, não pode reverter os hashes para obter senhas—só pode tentar adivinhar senhas e comparar hashes. A propriedade unidirecional mantém-se mesmo se atacantes sabem tudo sobre o algoritmo. SHA-256 é completamente público—qualquer um pode ler sua especificação—no entanto ninguém pode revertê-lo. A segurança vem da estrutura matemática, não do sigilo. Isto é fundamentalmente diferente de criptografia, onde uma chave secreta é requerida tanto para criptografia quanto para descriptografia. Ataques de força bruta são a única maneira de "reverter" um hash: tentar entradas até encontrar uma que produza o hash alvo. Para hashes fortes com entradas de alta entropia, isto é computacionalmente inviável. Para entradas fracas como senhas simples, tabelas arco-íris (bancos de dados de hash pré-computados) podem acelerar ataques, razão pela qual salting e algoritmos adequados de hash de senha são essenciais.

Resistência a Colisões

Resistência a colisões é uma propriedade crítica de funções hash criptográficas. Uma colisão ocorre quando duas entradas diferentes produzem a mesma saída de hash. Embora colisões devam teoricamente existir (entradas infinitas mapeiam para saídas finitas), uma boa função hash torna-as praticamente impossíveis de encontrar. Para um hash de 256 bits como SHA-256, há 2^256 valores de hash possíveis—um número astronomicamente grande. Se você gerar entradas aleatoriamente, precisaria de cerca de 2^128 tentativas (paradoxo do aniversário) para encontrar uma colisão com 50% de probabilidade. Com a tecnologia atual, isso levaria mais que a idade do universo usando todo poder computacional na Terra. Quando a resistência a colisões de uma função hash é "quebrada", significa que pesquisadores encontraram um método mais rápido que força bruta para encontrar colisões. Isto não significa que colisões apareçam subitamente em todo lugar—significa que a margem de segurança está comprometida. MD5 foi quebrado quando pesquisadores mostraram que podiam gerar colisões em segundos ao invés de bilhões de anos. Resistência a colisões importa por razões diferentes em contextos diferentes. Para assinaturas digitais, se alguém pode criar uma colisão, poderia criar dois documentos com o mesmo hash—um inocente, um malicioso—obter o inocente assinado, então substituir pelo malicioso com uma assinatura válida. Para Git, uma colisão poderia teoricamente permitir alguém criar dois arquivos diferentes com o mesmo hash, embora exploração prática seja extremamente difícil. Forte resistência a colisões é por que SHA-256 e SHA-3 são recomendados para aplicações de segurança. Estes algoritmos têm margens de segurança massivas sem atalhos conhecidos para encontrar colisões. Escolher algoritmos com resistência a colisões comprovada protege contra ataques atuais e potenciais descobertas futuras.

Determinístico

Funções hash são determinísticas, significando que a mesma entrada sempre produz exatamente a mesma saída. Esta propriedade pode parecer óbvia, mas é fundamental para toda aplicação de hashing e tem implicações importantes que valem entender. Determinismo habilita verificação. Quando você baixa um arquivo e compara seu hash ao hash publicado, você está confiando no fato de que se seu arquivo é byte-por-byte idêntico ao original, os hashes devem coincidir. Qualquer diferença—até um único bit—produziria um hash completamente diferente. Esta propriedade também habilita armazenamento e pesquisa eficientes. Índices de banco de dados baseados em hashes funcionam porque os mesmos dados sempre hashearão para o mesmo bucket. Sistemas de cache usam hashes como chaves porque a mesma requisição sempre produzirá a mesma chave. Git pode identificar arquivos idênticos através de um repositório porque conteúdo idêntico tem hashes idênticos. Determinismo é o que faz a verificação de senha funcionar sem armazenar senhas. O serviço armazena o hash no momento do registro. A cada login, hasheia a senha inserida e compara. A única maneira para os hashes coincidirem é se as senhas forem idênticas (ignorando o caso astronomicamente improvável de colisão). Não há elementos aleatórios na computação de hash. Dado o mesmo algoritmo e entrada, qualquer computador em qualquer lugar computará o mesmo hash. Isto habilita sistemas distribuídos a verificar integridade de dados sem coordenação. Nós blockchain ao redor do mundo podem independentemente verificar que hashes de bloco coincidem porque a computação é determinística. Uma sutileza: enquanto a função hash em si é determinística, alguns sistemas adicionam elementos não-determinísticos como salts (dados aleatórios) ou timestamps antes de hashear. Um hash de senha com salt inclui salt aleatório, então hashear a mesma senha duas vezes com salts diferentes produz resultados diferentes. A função hash ainda é determinística—a entrada (senha + salt) é diferente cada vez.

Testar a Ferramenta

Gerador de Hash

Gerador de Hash

Artigos Relacionados