Aula 2 do curso de quebra-cabeças da blockchain, pra quem não leu o anterior está no link:
Curso: O quebra cabeças da Blockchain - Estou aqui pela tecnologia - Tecnologia - Bastter.com Peço que comentem qualquer dúvida que apareça para melhorarmos o material em conjunto.
Seguindo então nosso estudo sobre algoritmo de hash, vimos que são 5 características que precisam estar presentes para caracterizar um bom algoritmo.
Ver maisVamos entender o significado de cada uma.
Determinístico Algo determinístico significa que, sempre que você der a mesma entrada para um algoritmo, a saída sempre será a mesma. Por exemplo, uma calculadora é determinística pois sempre que você fizer a conta 2+2 o resultado será sempre 4. Ou se fizer uma conta muito complexa com diversas operações e números grandes, sempre terá o mesmo resultado esperado.
Dessa forma, o algoritmo de Hash precisa ser determinístico, pois sempre que tiver como entrada um mesmo texto, a sua saída precisa ser exatamente a mesma, independentemente de local, computador ou tempo que tiver sendo executada, na verdade, independentemente de qualquer coisa.
Computacionalmente Rápido Não há muito o que falar, ele precisa ser rápido de calcular, um algoritmo lento pode ficar inviável de ser utilizado na prática. Imagine a calculadora novamente, já pensou se a cada conta simples tivéssemos que esperar 5 min pela resposta ? Inviabilizaria seu uso, certo ?
Unidirecional Essa é uma característica interessante, significa que a partir do texto é possível chegar ao hash (resumo) do texto, mas deve ser impossível a partir do hash do texto se chegar ao texto original novamente.
Ver maisÉ possível criar uma máquina que entra um porco e saí uma linguiça, mas não é possível criar uma quem entre a linguiça e saia o porco novamente. Um bom hash também é assim.
Efeito avalanche Significa que qualquer mudança no texto original vai gerar um hash completamente diferente, é como uma avalanche, você move apenas um grão de neve e tudo muda. mudou uma vírgula no texto? o hash não se parecerá mais em nada com o anteriormente calculado sem a vírgula. Veja um exemplo. O início do hash para o texto “Dinheiro é lixo” é “b307e48d5d...”, mas se adicionarmos uma vírgula o resultado deve ser completamente diferente. “Dinheiro, é lixo” => “f0c7635eab…” .
Sei que ainda não falamos de como o hash pode ser representado com letras e números, mas chegaremos lá.
Evitar colisões Uma colisão de hash acontece quando 2 textos diferentes geram o mesmo hash.
Veja que a palavra é “evitar”, por uma questão matemática é possível que, mesmo em um bom algoritmo, a colisão ocorra. Mas a probabilidade é tão pequena, a ponto de ser ridículo pensar na possibilidade. Com exemplo, no algoritmo SHA-256 utilizado por diversas blockchains (a bitcoin inclusive) a chance de colisão é uma em 1000...000 (são 77 zeros). Considerando todo o poder computacional atual, seria preciso mais tempo do que a idade do universo para encontrar apenas 1 colisão nesse algoritmo.
Por hoje é isso, no próximo tópico vamos falar do algoritmo SHA-256 e quem sabe entramos em como ele é utilizado para garantir o link entre os blocos ou, como comentado no primeiro tópico, como ele é utilizado para criar uma escrita na rocha que não poderá ser apagada.