Chaves, assinaturas e endereços · Aula 1 de 5
Funções hash na prática
7 min de leitura
Por que os hashes são importantes além do cabeçalho do bloco
Uma função hash criptográfica converte uma informação digital em um resultado curto e de tamanho fixo chamado valor hash ou resumo. A entrada pode ser uma frase, um documento, uma transação ou uma coleção de registros. Um hash seguro é projetado para que até mesmo uma pequena alteração na entrada produza uma saída que pareça não ter relação com a original. Essa propriedade é valiosa em uma blockchain porque os participantes precisam comparar informações sem inspecionar repetidamente cada byte de um grande conjunto de dados. Ela também é valiosa fora da cadeia, quando um auditor deseja verificar se as evidências foram alteradas entre a coleta e a revisão. Um hash é uma ferramenta de comparação semelhante a uma impressão digital, não um documento de identidade nem uma garantia de que a informação subjacente seja verdadeira.
SHA-256, integrante da família SHA-2 descrita no Federal Information Processing Standard (FIPS) 180-4, Secure Hash Standard, do National Institute of Standards and Technology (NIST), produz 256 bits, comumente exibidos como 64 caracteres hexadecimais. O sistema hexadecimal usa os dígitos de 0 a 9 e as letras de a a f para representar valores binários de forma compacta. Independentemente de a entrada original conter três caracteres ou três milhões, um resumo SHA-256 tem sempre o mesmo comprimento. Esse comprimento fixo torna os resumos identificadores e verificações de integridade convenientes; isso não significa que um resumo contenha informações suficientes para reconstruir a entrada original.
Três propriedades que vale a pena distinguir
Resistência à pré-imagem e computação unidirecional
Resistência à pré-imagem significa que, dado um valor hash, encontrar uma entrada que o produza deve ser computacionalmente inviável para uma função hash segura usada corretamente. Portanto, hashing não é criptografia: a criptografia é projetada para permitir a recuperação autorizada do texto simples usando uma chave, enquanto um hash normalmente não oferece uma operação de descriptografia. Também não é, por si só, um método para proteger um segredo fácil de adivinhar. Por exemplo, aplicar hash a uma senha curta não torna a senha difícil de adivinhar se um invasor puder aplicar hash a candidatos comuns. O armazenamento de senhas exige técnicas separadas, como salts e hashing de senhas desenvolvido especificamente para esse fim e deliberadamente custoso. Esses detalhes operacionais estão fora do escopo deste curso, mas essa distinção evita um equívoco frequente.
Resistência à segunda pré-imagem e resistência a colisões
A resistência à segunda pré-imagem diz respeito a encontrar uma entrada diferente com o mesmo resumo de uma entrada especificada. A resistência a colisões diz respeito a encontrar quaisquer duas entradas distintas que produzam o mesmo resumo. Como há infinitas entradas possíveis, mas apenas um número finito de saídas, as colisões precisam existir em princípio. Uma função hash criptográfica bem projetada torna extremamente difícil descobrir colisões úteis. Uma saída de 256 bits não implica resistência a colisões de 256 bits: o efeito do aniversário estabelece um limite de segurança inferior para buscas genéricas por colisões em comparação com buscas por pré-imagens. Os alunos devem reconhecer os três termos sem tratá-los como intercambiáveis ou presumir que todos os algoritmos permaneceram igualmente seguros ao longo do tempo.
Os bytes submetidos ao hash são decisivos
Duas pessoas podem aplicar hash ao que parece ser o mesmo documento e obter resumos diferentes se não usarem bytes idênticos. Um arquivo pode ter uma quebra de linha diferente; um parágrafo copiado pode conter outra representação Unicode do mesmo caractere visível; uma planilha pode conter metadados ocultos. As funções hash não entendem que dois arquivos parecem iguais. Elas processam sequências específicas de bytes. Antes de comparar resultados, identifique o formato do arquivo, a codificação de caracteres, o escopo exato da entrada e o algoritmo de hashing. Registrar esses detalhes faz parte de uma trilha de auditoria reproduzível.
Considere um contrato em PDF. Aplicar hash ao arquivo PDF exato pode ajudar a detectar alterações posteriores nesse arquivo, incluindo alterações que não sejam aparentes na página. Isso, por si só, não demonstra se o contrato foi celebrado legalmente, se um signatário compreendeu os termos ou se o arquivo estava correto quando foi recebido pela primeira vez. Uma organização pode registrar um resumo junto com a fonte, o horário da coleta, o responsável e o histórico de manuseio. O resumo sustenta uma afirmação sobre a continuidade do arquivo; esses registros complementares sustentam a proveniência. Nenhum deles deve ser confundido com uma certificação independente do conteúdo.
Usos comuns em sistemas de ativos digitais
Os identificadores de transação frequentemente se baseiam em hashes de uma representação da transação definida pelo protocolo. Um identificador permite que nós e analistas se refiram a um objeto de dados específico; seu cálculo exato depende da rede. No Bitcoin, o identificador convencional de transação (txid) é calculado a partir da serialização da transação sem testemunha, aplicando SHA-256 duas vezes, enquanto um identificador de transação com testemunha (wtxid) se compromete com a serialização que inclui a testemunha. Essa distinção é importante ao comparar resultados de software. Outras redes podem usar um algoritmo diferente ou tratar uma assinatura como o identificador de consulta da transação. Nunca presuma que todas as strings denominadas “hash de transação” foram calculadas da mesma maneira.
Os hashes também permitem compromissos compactos com coleções de registros. Uma árvore de Merkle combina hashes em camadas até que um único resumo, chamado raiz de Merkle, represente as folhas incluídas segundo uma construção especificada. Em seguida, uma prova pode demonstrar que um item específico fazia parte da coleção comprometida sem transmitir todos os outros itens. Isso demonstra a inclusão em relação a uma raiz conhecida; não estabelece o significado do item no mundo real. O módulo anterior apresentou a função dos hashes na vinculação de blocos. A lição aplicável aqui é que os compromissos baseados em hash são afirmações precisas e limitadas sobre relações entre dados.
Algoritmos hash não são intercambiáveis
Nomes parecidos podem ocultar diferenças técnicas. O NIST FIPS 202, SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions, define SHA3-256, entre outras funções. A construção Keccak-256, amplamente utilizada pelo Ethereum, está relacionada à família Keccak, mas não deve ser tratada casualmente como idêntica, byte a byte, à SHA3-256 padronizada; suas convenções de preenchimento são diferentes. Da mesma forma, SHA-256 e SHA-256 duplo são cálculos distintos. Um analista que verifica um valor deve usar o algoritmo e a codificação exata especificados pelo protocolo relevante, em vez de escolher uma função hash conhecida em um menu de software.
| Função | Pergunta típica | Limitação importante |
|---|---|---|
| Resumo de arquivo | Esses bytes exatos foram alterados? | Não estabelece a veracidade dos fatos |
| Identificador de transação | A que objeto do protocolo se faz referência? | A construção é específica da rede |
| Raiz de Merkle | Um item está neste conjunto comprometido? | Exige uma raiz de referência confiável |
| Hash de senha | Um segredo candidato corresponde? | Precisa de um projeto dedicado para armazenamento de senhas |
Procedimento prático de comparação
- Identifique exatamente qual objeto está sendo comparado: um arquivo completo, seu conteúdo, uma transação serializada ou um endereço exibido.
- Registre o algoritmo e a representação usados, incluindo a codificação, a rede e quaisquer campos incluídos ou excluídos.
- Calcule ou obtenha o resumo de forma independente e compare o valor completo, em vez de um prefixo abreviado.
- Se o resultado for diferente, investigue as diferenças no nível dos bytes ou na representação antes de tirar conclusões sobre fraude ou alteração.
Às vezes, o software mostra apenas os primeiros e os últimos caracteres de um resumo longo. Essas abreviações podem ajudar uma pessoa a localizar um registro, mas não são adequadas como prova de uma correspondência exata. Uma soma de verificação usada para detectar erros de digitação pode ser muito mais curta e não é a mesma coisa que um resumo criptográfico do conteúdo. Para uma comparação formal, preserve o resumo completo e os detalhes contextuais de forma que outro revisor possa repetir o processo. As afirmações mais sólidas são específicas: “estes bytes exatos corresponderam usando este algoritmo especificado”, em vez de “este documento é autêntico em todos os aspectos”.
Foco na prova: Explique o tamanho de saída fixo, a propriedade unidirecional, a diferença entre resistência a colisões e resistência à pré-imagem e por que o hashing detecta alterações nos bytes, mas não pode provar a exatidão ou a autenticidade jurídica de um registro. Saiba distinguir SHA-256, SHA3-256 e Keccak-256 pelos nomes e pelas especificações, e reconheça por que a serialização exata da entrada é importante.