Série Blockchain simples em 3 conteúdos: 1 — O que é Hash# ?!? (Abordagem para não programadores)

Marcio Pessoa
CRYPTOMILES
Published in
4 min readJul 25, 2018

O nosso CTO Rodrigo Bezerra escreveu 3 textos sobre blockchain que explicam essa magnífica tecnologia. Eis o primeiro:

Olá queridos!

Certamente em tempos recentes você já ouviu muito esse termo: Hash, normalmente para quem é mais jovem está associado a outro termo: tag, fazendo assim hash-tag, é curioso como nem precisa estar bem escrito para dar a entender o seu significado por exemplo: #eTois. =D

No entanto, independente da sua idade com certeza absoluta você já ouviu falar muito sobre bitcoin, talvez até mesmo sobre blochchain, e se já se interessou um pouco sobre o assunto, já ouviu falar também de algoritmos de hash. A partir deste ponto, se não for programador, talvez pensou: Estou indo longe demais, não faço ideia do que sejam esses tais de SHA256, MD5 ou mesmo outro algoritmo de hash.

Eu, sendo programador vou tentar fazer uma abordagem sobre este assunto para não-programadores.

Hash é um cálculo matemático que garante que para qualquer volume de dados de entrada o resultado vai ser sempre de tamanho único e potencialmente diferente para entradas diferentes.

Pode ser uma única letra, um livro ou milhares de livros, o resultado do algoritmo de hash é sempre do mesmo tamanho. Complicou?!? Lembra que na infância você resolvia cálculo de prova dos 9?

Agora pasme!!! Esse foi seu primeiro contato com um algoritmo de hash!!!

O noves-fora sempre produz um resultado de tamanho único independente do tamanho do número que vai passar pela prova dos nove: 23 noves-fora: 5 (2+3 = 5); 101 noves-fora: 2 (1+0+1 = 2); 144001 noves-fora: 1 (1+4+4+0+0+1 = 10–9 = 1). Veja que, mesmo que o número que vai passar pela prova dos nove tenha vários algarismos, o resultado da prova dos nove é sempre 1 algarismo somente. E isso servia para a professora olhar para o resultado da prova dos 9 e já ter ideia de que você fez o cálculo correto quando criança, se ela dissesse: some 9 + 15, você diria que a resposta é 24, noves-fora 6. Só de olhar que o noves-fora deu 6 já indicava que a resposta estava correta.

Agora imagine que a professora passando as tarefas para casa, passou os seguintes exercícios e você os resolveu tirando também a prova dos nove:

  • 15 + 8 = 23 noves-fora 5 (2+3 = 5)
  • 6 + 8 = 14 noves-fora 5 (1+4 = 5)
  • 31–8 = 23 noves-fora 5 (2+3 = 5)

Observaram o que aconteceu? Como esse algoritmo de hash, o noves-fora, tem apenas 1 único caractere de saída a chance de termos a mesma saída para cálculos diferentes é muito alta. E todas as vezes que isso ocorre, chamamos de colisão.

Os algoritmos de hash mais modernos tem dentro de si cálculos matemáticos muito mais longos do que simplesmente somar os algarismos, e isto é feito para minimizar ao máximo a possibilidade de colisão, isto é, esse código de saída se repetir para entradas diferentes, mas sempre, sempre resultar na mesma saída para a mesma entrada. No caso do algoritmo de hash SHA256, o resultado vai ser sempre uma saída de 64 caracteres. Vamos agora para exemplos práticos, veja o resultado das frases abaixo passando o cálculo de hash usando o algoritmo SHA256:

  • “Joao deve para Maria R$ 11,00” — Resultado do Algoritmo de Hash SHA256: c63576df87c1bbdbaa2348ca3727742e905553e41b455c5add18bb431c7d2d67(Tam. 64)
  • “Joao deve para Maria R$ 10,00” — Resultado do Algoritmo de Hash SHA256: 165b13fc705c140408d8368c5766713a638b479355cdef91340c0c83483f1f93(Tam. 64)

Nos casos acima, o simples fato de mudarmos um único caractere já resultou em um código totalmente diferente, isto é útil porque se João e Maria tem entre si um contrato indicando que João deve a Maria R$ 11,00 e os dois guardam o hash desse contrato, mesmo que João depois tente como no exemplo, ser esperto e mudar algo no contrato, diminuindo o valor de 11 para 10, o hash já não vai ser o mesmo e Maria saberia que o contrato de João foi adulterado. Útil certo?!?

Mesmo que um único caractere seja alterado, isto altera o resultado inteiro.

Mais um aspecto importante a ser entendido sobre o Hash é que ele é via única, isto significa que não existe um processo de reversão, você não pode passar o resultado no algoritmo e obter a entrada de volta. Estes não são um algoritmo de compressão, onde o arquivo original tem um tamanho, esse tamanho é reduzido em um novo arquivo e em seguida pode-se descomprimir esse arquivo para o seu tamanho original.

Pense nele como um resumo, e de fato é também conhecido como resumo da mensagem, no seguinte sentido: você talvez possa resumir um livro inteiro em uma frase. Mas não conseguiria voltar ao conteúdo inteiro do livro a partir somente da frase de resumo.

Mas no exemplo acima, João pode simplesmente dizer que é o seu Hash que é válido, não o de Maria, neste caso uma outra característica do Blockchain é extremamente útil, o algoritmo de consenso que vamos abordar em outro artigo, mas antes, vamos ver como o Hash é importante para o blockchain.

Até lá!

Rodrigo Bezerra.

--

--