Compartilhe este artigo

Funções de hash do Bitcoin explicadas

Tudo o que você sempre quis saber sobre hash de Bitcoin , mas tinha medo de perguntar.

Qualquer pessoa interessada em Bitcoin já deve ter ouvido a frase "função hash criptográfica" em algum momento. Mas o que isso significa exatamente e como está conectado à Criptomoeda?

As funções hash são uma parte essencial não apenas do protocolo Bitcoin , mas da segurança da informação como um todo.

Продовження Нижче
Não perca outra história.Inscreva-se na Newsletter Crypto Long & Short hoje. Ver Todas as Newsletters

No artigo a seguir, veremos alguns exemplos simples de como eles funcionam, com uma demonstração simples também.

O que é uma função hash?

Em resumo, uma função hash é um processo matemático que recebe dados de entrada de qualquer tamanho, executa uma operação neles e retorna dados de saída de um tamanho fixo.

Em um exemplo mais concreto, isso pode ser usado para pegar uma sequência de letras dequalquercomprimento como entrada – o que chamamos decorda– e retornar uma sequência de letras de umfixocomprimento. Seja a sequência de entrada uma única letra, uma palavra, uma frase ou um romance inteiro, a saída – chamada dedigerir– sempre terá o mesmo comprimento.

Um uso comum desse tipo de função hash é armazenar senhas.

Quando você cria uma conta de usuário com qualquer serviço da web que exija uma senha, a senha é executada por meio de uma função hash, e o resumo hash da mensagem é armazenado. Quando você digita sua senha para fazer login, a mesma função hash é executada na palavra que você digitou, e o servidor verifica se o resultado corresponde ao resumo armazenado.

Isso significa que se um hacker conseguir acessar o banco de dados que contém os hashes armazenados, ele não conseguirá comprometer imediatamente todas as contas de usuários porque não há uma maneira fácil de encontrar a senha que produziu qualquer hash.

Funções hash simples em Python

Você pode experimentar valores de hash usando Python, uma linguagem de programação instalada em sistemas operacionais Mac e Linux por padrão. (Este tutorial assumirá que você está usando alguma versão do OS X ou Linux, pois usar Python no Windows émais complicado.)

Primeiro, abra um terminal, digitePitãoe pressione ENTER.

Isso o colocará no Python REPL, um ambiente onde você pode testar comandos Python diretamente, em vez de escrever um programa em um arquivo separado.

Em seguida, digite o seguinte, pressionando ENTER após cada linha e TAB onde estiver marcado:

importar hashlibdef hash(minhastring):[TAB] hash_object = hashlib.md5(minhastring.encode())[TAB] imprimir(hash_object.hexdigest())[ENTER]

Agora você criou uma função,cerquilha(), que calculará e imprimirá o valor hash para uma determinada string usando o algoritmo de hash MD5. Para executá-lo, coloque uma string entre parênteses entre aspas, por exemplo:

hash("CoinDesk arrasa")

E pressione ENTER para ver o resumo do hash dessa string.

Você verá que chamar a função hash na mesma string sempre gerará o mesmo hash, mas adicionar ou alterar um caractere gerará um valor de hash completamente diferente:

hash("CoinDesk arrasa") => 7ae26e64679abd1e66cfe1e9b93a9e85hash("CoinDesk arrasa!") => 6b1f6fde5ae60b2fe1bfe50677434c88

Funções hash em Bitcoin

No protocolo Bitcoin , as funções hash são parte do algoritmo de hash de blocoque é usado para gravar novas transações no blockchain por meio do processo de mineração.

Na mineração de Bitcoin , as entradas para a função são todas as transações mais recentes e ainda não confirmadas (junto com algumas entradas adicionais relacionadas ao registro de data e hora e uma referência ao bloco anterior).

No exemplo de código acima, já vimos que alterar uma pequena parte da entrada para uma função hash resulta em uma saída completamente diferente. Essa propriedade é crucial para o algoritmo de "prova de trabalho" envolvido na mineração: para "resolver" um bloco com sucesso, os mineradores tentam combinar todas as entradas com suas própriaspedaço arbitrário de dados de entradade tal forma que o hash resultante comece com um certo número de zeros.

Como demonstração básica, poderíamos tentar "minerar" com nossa função hash do Python adicionando manualmente pontos de exclamação depois de "CoinDesk rocks!" até encontrarmos um hash que comece com um único zero.

>>> hash("CoinDesk arrasa!!!")66925f1da83c54354da73d81e013974d>>> hash("CoinDesk arrasa!!!")c8de96b4cf781a6373766c668ceac0f0>>> hash("CoinDesk arrasa!!!!")9ea367cea6a2cc4a6f5a1d9a334d0d9e>>> hash("CoinDesk arrasa!!!!!")b8d43387d98f035e2f0ac49740a5af38>>> hash("CoinDesk arrasa!!!!!!")0fe46518541f4739613b9ce29ecea6b6 => RESOLVIDO!

Claro, resolver o hash para um bloco de Bitcoin – que no momento da escritadeve começar com 18 zeros – requer umextremamentegrande quantidade de computação (e assim o poder de processamento combinado de todos os computadores na rede ainda leva aproximadamente 10 minutos para resolver um bloco).

É a necessidade dessa grande quantidade de poder de processamento que faz com que novos bitcoins sejam minerados ao longo de um longo período de tempo, não todos de uma vez.

Para ganhar bitcoins por meio da mineração, você precisa investir uma enorme quantidade de trabalho necessária para resolver um bloco – e ao ganhar essa recompensa, você está bloqueando todas as novas transações em um bloco, que é adicionado ao registro permanente de todas as transações anteriores: o blockchain.

Alguma noção básica de Cripto que você gostaria de ver explicada a seguir? E-mail: editores@ CoinDesk.com.

Imagem de Bitcoin no tecladovia Shutterstock

Corin Faife

Corin Faife é um colaborador do CoinDesk e cobriu o impacto social e político de tecnologias emergentes para a VICE, Motherboard e o Independent. Corin não é um investidor em nenhuma moeda digital ou projeto de blockchain (Veja: Política Editorial). Siga Corin: corintxt

Picture of CoinDesk author Corin Faife