Skip to content
BlockchainSign
pt

Carimbo temporal com árvore de Merkle: explicação

Por Publicado a

Carimbo temporal com árvore de Merkle: explicação
Photo: Nurullah Degri

Se alguma vez se perguntou como um serviço pode registar temporalmente ficheiros na Bitcoin sem custos, quando uma transação Bitcoin não é gratuita, a resposta é uma árvore de Merkle. Vale a pena compreender este mecanismo, pois o compromisso que ele implica é a principal diferença entre os serviços de registo temporal disponíveis no mercado.

O problema que resolve

Escrever um hash num registo distribuído custa dinheiro — uma taxa de transação, paga na moeda da cadeia. Se cada ficheiro precisar da sua própria transação, cada registo temporal tem um custo mínimo fixo.

Agrupar muitos hashes numa única transação elimina esse custo mínimo. A dificuldade reside em fazer isso mantendo a capacidade de qualquer pessoa provar que o seu hash específico estava no grupo, sem publicar todo o lote.

Como funciona uma árvore de Merkle

Pegue num conjunto de hashes. Agrupe-os aos pares e faça o hash de cada par. Volte a agrupar os resultados e faça o hash desses novos pares. Continue até restar apenas um hash.

h(A)  h(B)   h(C)  h(D)
   \  /         \  /
  h(AB)         h(CD)
      \        /
       h(ABCD)   ← a raiz de Merkle

Esse valor final é a raiz de Merkle, e compromete-se com todas as entradas. Altere qualquer um dos hashes originais e a raiz muda completamente.

Apenas a raiz vai para a cadeia. Uma transação, independentemente do número de ficheiros no lote.

Provar que o seu ficheiro foi incluído

Para demonstrar que h(A) está sob a raiz, não precisa da árvore inteira. Precisa apenas dos irmãos ao longo do caminho desde a sua folha até ao topo — neste caso, h(B) e h(CD). Qualquer pessoa pode recalcular:

h( h( h(A), h(B) ), h(CD) ) == a raiz na cadeia?

Essa pequena lista de irmãos é a prova de Merkle ou prova de inclusão. Para um lote de um milhão de ficheiros, são cerca de vinte hashes, porque o comprimento do caminho cresce com o logaritmo do tamanho do lote, e não com o próprio lote.

Isto é genuinamente elegante. É o mecanismo subjacente ao OpenTimestamps e à maioria dos carimbos temporais gratuitos.

O que perde

Três coisas, todas operacionais e não criptográficas.

Deve guardar o ficheiro de prova. A cadeia contém a raiz, não o seu hash. Sem o caminho dos irmãos, não há forma de ligar o seu ficheiro à transação. Perde a prova e o registo temporal desaparece — a transação sozinha não lhe será útil.

Há geralmente um atraso e um passo extra. Os lotes fecham segundo um calendário. Até que o lote seja confirmado e validado, a sua prova está incompleta e, em alguns desenhos, deve regressar mais tarde para a "atualizar". Muitas pessoas nunca o fazem e descobrem anos depois.

A verificação exige explicação. Recalcular um caminho de Merkle é uma operação simples para um programador, mas uma surpresa desagradável para qualquer outra pessoa. Um registo cuja verificação requer um tutorial é um registo mais fraco perante um público não técnico.

A alternativa: uma transação cada

A outra abordagem consiste em escrever cada hash na sua própria transação. É o que fazemos: o hash do seu conteúdo vai para os dados de entrada de uma transação Ethereum dedicada, onde qualquer pessoa o pode ler no Etherscan usando "Ver como UTF-8".

Agrupamento Merkle Uma transação cada
Custo por registo temporal Quase zero A taxa total da transação
O que deve guardar Um ficheiro de prova Nada — o hash está na cadeia
Se perder o artefacto Registo irrecuperável Recuperável a partir de dados públicos
Passo extra após submissão Frequentemente sim Não
Verificação Recalcular um caminho de Merkle Ler a transação
Explicar a um advogado Requer um tutorial Abrir o link

Nenhuma das opções é criptograficamente mais forte. Uma prova de Merkle é exatamente tão sólida quanto uma escrita direta. A diferença reside inteiramente no que acontece depois, com uma pessoa que não é si, a segurar um artefacto que não compreende.

Qual escolher

Se está a registar temporalmente em volume, tem conforto técnico e é fiável na guarda dos ficheiros, o agrupamento é excelente e o preço é imbatível.

Se está a registar temporalmente um pequeno número de documentos importantes e o eventual destinatário é um cliente, uma seguradora ou um tribunal, pagar por uma escrita direta compra-lhe uma prova sem riscos e sem necessidade de explicações.

O agrupamento é também a forma sensata de oferecer um nível gratuito, informação útil ao comparar preços: um serviço que cobra centavos por certificado está quase certamente a usar agrupamento, e um que cobra dólares provavelmente não o está.

Perguntas frequentes

Como pode o carimbo temporal blockchain ser gratuito?
Por meio de agrupamento. Muitos hashes são combinados numa árvore de Merkle e apenas o único hash da raiz é escrito na cadeia, pelo que uma única taxa de transação é partilhada por todos nesse lote. O custo que assume em vez disso é operacional: deve guardar a prova de inclusão e, em alguns desenhos, regressar mais tarde para a completar.
O que acontece se eu perder o meu ficheiro de prova de Merkle?
O registo temporal torna-se efetivamente irrecuperável. A transação da blockchain contém a raiz de Merkle, não o seu hash, pelo que, sem o caminho dos irmãos, não há forma de ligar o seu ficheiro a ela. Esta é a forma mais comum pela qual as pessoas perdem registos temporais que pensavam possuir.
Uma prova de Merkle é uma evidência mais fraca do que uma transação direta?
Não criptograficamente — uma prova de Merkle corretamente construída é exatamente tão sólida. A diferença prática é a apresentação: verificá-la significa recalcular um caminho de hash, o que requer uma ferramenta e uma explicação, enquanto uma escrita direta pode ser lida diretamente num explorador de blocos público por qualquer pessoa.

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.