Função Hash

Função Hash

As funções Hash são um elemento importante na ciência da computação, criptografia e claro no Bitcoin!

Não é possível explicar como funciona o Bitcoin sem primeiro perceber o que são as funções hash.

Os hashes são usados para todo o tipo de coisas, mas uma simples analogia é pensar neles como impressões digitais para dados. Podes pensar numa função hash como um leitor mágico de impressões digitais. Podes introduzir qualquer dado na função hash, e ela irá cuspir uma impressão digital.

Qualquer coisa pode ser usada como uma função hash, mas uma boa função hash garantirá que diferentes dados de entrada terão impressões digitais únicas. Uma das funções hash mais comuns usadas hoje em dia chama-se SHA-256, que significa "Secure Hash Algorithm, 256 bits".

Vou dar um exemplo criando um hash com o algoritmo utilizado no Bitcoin SHA-256:

SHA-256 de "Sparkpay" produz sempre o resultado = ```0e4c6739df76c2691abd249d49e82dc71e1e7fa67d3e1bc99376e7c52ab1a6ca```

no entanto, basta mudar apenas a primeira letra, de "S" para "s" por exemplo:

SHA-256 de "sparkpay" produz o resultado = ```04e8e11512e04a1a51893c4cc090aac2d671168c122486eb5a6286bc9756e388```

Podes experimentar aqui, e ver como ao alterares alguma coisa o hash muda.

O que acontece no Hash

A função hash é, basicamente, uma fórmula matemática muito complicada que recebe informação de uma forma aleatória e fornece um resultado reproduzível. No entanto, basta alterar a informação de entrada que o resultado altera completamente.

O que a matemática garante é que:

  • todas as impressões digitais, ou hashes, são únicos
  • usando apenas o hash não há forma de saber a informação que lhe deu origem

Este último ponto é muito importante. Por exemplo sabes qual a informação que deu origem a este hash SHA-256?

```5602f538eaa6d6bd9f4319166c9522861085d1759ab4dc8cafe594937adeec4b```

Alguém? De acordo com o que a matemática que conhecemos nos diz, é impossível saber a resposta a esta pergunta a não ser por "Brute Force"!

E então, já começaste a tentar adivinhar? Pode ser apenas a letra "S" ou um capítulo dos Lusíadas!

A questão é, nunca saberás a não ser que adivinhes, ou que eu te diga!

A resposta é "Bitcoin é liberdade". Podes verificar aqui, introduzindo o texto e verificando o hash!

Que mais podemos fazer com as funções hash, além de jogos de adivinhas?

As funções hash são bastante usadas na ciência computacional. Um dos usos mais comuns é guardar passwords!

Imagina que um website guardava a tua password, em texto, numa base de dados. Qualquer empregado desse website teria acesso à tua password, ou se algum hacker acedesse à base de dados, também saberia a tua password.

Em vez disso, os websites guardam hashes das passwords. Quando fazes login, o website cria um hash da password, e depois compara-a com o hash guardado na base de dados. Se forem iguais, podes aceder...

Já pensaste porque razão o "Esqueci a password" faz-te sempre introduzir uma password nova, em vez de te darem a que te esqueceste? É porque o website não sabe qual era a tua password! Eles têm apenas o hash da password.

O que tem a ver com o Bitcoin?

Em Bitcoin, a função SHA-256 desempenha um papel fundamental em endereços, scripts de endereço e mineração.

Não vou entrar em todos os detalhes aqui, mas vamos terminar com mais um jogo que começará a explicar a mecânica de como o Bitcoin usa hashes no seu sistema mineiro...

O jogo é o seguinte...

Quero que inventes alguns dados que comecem com a palavra "Bitcoin", usando SHA-256, e a hash seja algo que começa com 000.

A primeira pessoa a chegar a uma resposta ganha uma recompensa.

Qual é a estratégia? Lembra-te que não há como começar com o hash e descobrir os dados de entrada... A única maneira é usar brute force para adivinhar os dados de entrada!!

O ataque com "brute force" funciona assim:

  1. calcula o hash de "Bitcoin-1" e vê se começa com 000.
  2. calcula o hash de "Bitcoin-2" e vê se começa com 000.

..."Bitcoin-3", "Bitcoin-4", etc.

A única maneira é continuar a tentar e verificar até encontrar um!

Eventualmente, se continuares com este processo, vais encontrar o número 1918, e verificar!

O hash SHA-256 de "Bitcoin-1918" é 00007eb7d15a7f52abb6b1b3e606cc93d020c6f703bf7ff9bd2ac9e, que começa com '000' !!

Como é que descobri? Escrevi um simples script, ou mini programa de computador, que faz o mesmo processo de força bruta. Tenta um número, verifica, passa para o próximo, experimenta, etc... até encontrar um vencedor.

Na realidade, o que eu fiz foi Provar-te que o meu computador teve o Trabalho... Prova de Trabalho, ou Proof of Work, PoW, parecem-te familiares?

Se alterares o jogo, e em vez da palavra Bitcoin, puseres uma data de transacções de bitcoin e é basicamente como funciona o Bitcoin. As transacções Bitcoin são agrupadas em blocos, que são encriptados com SHA-256. Os mineradores têm que descobrir o hash que desencripta o bloco. As hashes possíveis andam na ordem dos triliões, é incrivelmente difícil de conseguir. O primeiro minerador a conseguir a hash certa, recebe como recompensa Bitcoins.