Skip to content
BlockchainSign
pt

O que um hash não revela

Por Publicado a

O que um hash não revela
Photo: Markus Winkler

A afirmação de privacidade da base do registo temporal por hash repousa numa propriedade: um hash não diz nada sobre a coisa de onde provém. Isso é verdade, vale a pena compreender em vez de aceitar por fé, e tem exatamente uma ressalva.

O que é um hash

O SHA-256 recebe qualquer entrada, de qualquer comprimento, e produz uma saída fixa de 256 bits — 64 caracteres hexadecimais. A mesma entrada produz sempre a mesma saída. Uma alteração de um bit produz uma saída completamente diferente.

É uma função unidirecional: fácil de calcular para a frente, inviável de inverter. Não é encriptação. Não há chave, e nada para desencriptar.

"hello"  → 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
"hello!" → ce06092fb948d9ffac7d1a376e404b26b7575bef38f9c1b4e7b3fc0d8e4e93e5

Duas entradas separadas por um único carácter, duas saídas totalmente sem relação. Isso é intencional, e é por isso que um hash não vaza nada sobre o conteúdo.

O que publicar um hash não revela

Praticamente tudo:

  • O conteúdo. Nenhum texto, nenhuma imagem, nenhum dado.
  • O tipo de ficheiro. Um PDF, uma fotografia e uma folha de cálculo produzem todos uma cadeia de 64 caracteres.
  • O tamanho. Um ficheiro de um byte e um ficheiro de dez gigabytes têm hashes do mesmo comprimento.
  • O nome do ficheiro, autor, datas ou quaisquer metadados, a menos que estejam dentro do ficheiro.
  • Se se assemelha a algo mais. Ficheiros semelhantes produzem hashes completamente não relacionados. Não existe correspondência parcial.

Essa última propriedade é o que torna seguro publicá-lo. Um hash não pode ser comparado com outro hash para ver se os ficheiros são parecidos — apenas se são idênticos.

A única ressalva

Existe uma exceção real, e merece ser enunciada claramente em vez de ficar escondida.

Se um documento tiver muito poucos valores possíveis, alguém pode tentar adivinhar e verificar. Fazer o hash de cada candidato e comparar.

Digamos que regista temporalmente um documento cujo conteúdo inteiro é um número entre 1 e 1.000. Um atacante faz o hash dos mil números e encontra o seu instantaneamente. O mesmo se aplica a uma frase curta de um conjunto previsível, uma data, um único nome, ou um modelo com um único campo variável.

Isto não é uma fraqueza no SHA-256 — está a fazer exatamente o que deve. O problema é que o espaço de entrada era pequeno demais para ser pesquisado.

Quando importa: registar temporalmente conteúdos muito curtos e altamente previsíveis.

Quando não importa: qualquer documento real. Um contrato, um manuscrito, um ficheiro CAD, uma fotografia, uma folha de cálculo — o espaço de ficheiros possíveis é astronomicamente grande, e adivinhar não é uma estratégia.

A solução, se precisar de uma: inclua algo imprevisível. Os documentos reais já o fazem, porque contêm texto único, carimbos temporais ou dados. Se genuinamente precisar de se comprometer com um valor minúsculo, adicione uma cadeia aleatória e guarde-a com o documento — o hash cobre então algo impossível de adivinhar.

Porque é que isto importa para o registo temporal

Porque é a propriedade na qual tudo o resto assenta.

O seu ficheiro é convertido em hash no seu navegador. O resultado de 64 caracteres é transmitido, e é o que aparece num registo distribuído público permanentemente. Se essa cadeia revelasse algo sobre o documento, publicá-la seria uma divulgação — e todo o produto seria inutilizável para o material confidencial para o qual se destina.

Não revela. É por isso que um projeto pré-patente, um manuscrito, um documento de negócio sob NDA ou um segredo comercial podem ser registados temporalmente sem nada sair da sua máquina. Veja como provar um segredo comercial sem o divulgar.

Pode verificar o mecanismo em vez de confiar nele: o gerador de hash SHA-256 gratuito corre inteiramente no seu navegador, e funciona com a sua ligação desligada.

O outro lado da mesma propriedade

Porque um hash não revela nada, também não prova nada por si só.

Um hash sem o ficheiro é uma cadeia sem sentido. Para usar um registo temporal, deve produzir o ficheiro original e demonstrar que ele gera o valor registado. Perde o ficheiro e o registo prova que algo existiu, e nada mais.

Esta é a compensação no centro do design: privacidade completa, ao custo de ter de guardar o ficheiro. É uma boa compensação, e não é gratuita.

Perguntas frequentes

Alguém pode inverter um hash SHA-256 para obter o meu ficheiro?
Não. O SHA-256 é uma função unidirecional, não encriptação — não há chave e nada para desencriptar. A única forma de encontrar uma entrada que corresponda a um hash é adivinhar candidatos e fazer-lhes o hash, o que é inviável para qualquer coisa além de conteúdos muito curtos e altamente previsíveis.
Publicar um hash revela algo sobre o meu documento?
Nada sobre o conteúdo, tipo, tamanho, nome do ficheiro ou metadados, e nem sequer se se assemelha a outro ficheiro — entradas semelhantes produzem hashes completamente não relacionados, pelo que não há correspondência parcial. A única exceção é o conteúdo retirado de um conjunto muito pequeno de possibilidades, que pode ser encontrado por tentativa e erro.
Quando é que o hashing não é suficiente para a privacidade?
Quando o espaço de entrada é minúsculo — um número num intervalo pequeno, um único nome, uma data, ou um modelo com um único campo variável. Alguém pode fazer o hash de cada candidato e comparar. Os documentos reais não são vulneráveis a isto, e se tiver de se comprometer com um valor muito curto, adicione uma cadeia aleatória e guarde-a com o documento.

Prove hoje que o seu trabalho já existia

Crie um registo temporal de qualquer ficheiro na blockchain Ethereum e receba um certificado inviolável e vitalício. O seu ficheiro nunca sai do seu navegador.