Monstros do blockchain: hash functions, private keys e public keys explicado

neonbrand-432959

O protocolo blockchain está cheio de nomes e jargões que assustam a maioria das pessoas.

Mas a verdade é que muitos deles, são bem mais simples do que aparentam.

No meu ultimo post referi, de forma simplista, que os protocolos blockchain utilizam uma corrente de blocos criptograficamente ligados para guardar informação sobre transações de dinheiro entre pessoas.

Neste post vamos tentar perceber o que isso significa na prática. E procurar desmistificar alguns dos monstros dos protocolos blockchain.

É realmente mais simples do que parece. Acompanhem-me.

Provavelmente já ouviram falar nos termos hash function, public key (chave pública) e private key (chave privada).

São três conceitos fundamentais para entendermos a tecnologia blockchain. Uma vez compreendidos, fica mais fácil entender tudo o resto.

Hash Function

Para compreendermos o que é uma hash function, precisamos primeiro definir o que é uma função (function).

f(x) = x + 3, é uma função. Onde x é o input e f(x) é o output.

Podemos pensar numa função como uma caixa computacional. Onde cada vez que a caixa recebe um input, produz um output.

No exemplo acima, se o input for 2, o output será 5 (2+3).

Da mesma forma, se soubermos que o output é 5, conseguimos determinar que o input foi 2. Sabendo que 5=x+3, sabemos que x é igual a 2.

Relativamente simples, certo? O que são então as hash functions?

Hash functions são as chamadas funções de um-caminho-só. O que significa que podemos passar de um input para um output, mas se só soubermos o output, é impossível determinar qual foi o input.

Além disso, hash functions produzem um output único(*1) para cada input.

Por isso se diz que as hash functions produzem uma impressão digital para os dados que usamos como input.

Vamos ver como funciona na prática. Preparem-se que as coisas vão ficar mais dinâmicas!

SHA256 é uma hash function (https://anders.com/blockchain/hash.html). E é utilizado no protocolo bitcoin.

Experimentem aceder ao site e colocar um input qualquer. “Olá”, por exemplo. Verão que o output produzido foi “5251c3c68010bca32f4dbedb142270f720fa84a0599816524c85d50c3f589365”.

Este conjunto de caracteres é a impressão digital única dos dados que acabámos de introduzir.

Se tentarmos mudar o input para “Olé”, o output passa a ser “861d2eb0996f7ccedf00dfd5e8cf426db809485e73055c8897327a5aa25653ba”.

Totalmente diferente e igualmente único.

É importante referir que, no que toca a hash functions, quaisquer tipo de dados são permitidos como input. Desde que sejam dados binários.

(Mais sobre dados binários vs ternários num próximo post).

Assim podemos introduzir qualquer coisa numa hash function: ficheiros de filmes, ficheiros mp3, emails, texto, valores e cada input terá um único output (ou impressão digital) correspondente.

Public & Private Keys (chaves públicas e privadas)

Agora que percebemos o conceito de hash function, conseguimos explorar os conceitos criptográficos de chave publica e privada.

O que é criptografia? Importa perceber que é essencialmente sobre duas coisas:

  1. Encriptação. Como posso enviar informação para alguém de forma secreta/privada.
  2. Assinaturas Digitais. Como posso verificar quem é o responsável pelo envio de certa informação.

No protocolo Bitcoin e e na maioria das outras criptomoedas, utilizamos essencialmente o segundo aspeto, assinaturas digitais.

Nomeadamente, na assinatura de transações por forma a provar à rede que somos os proprietários dos fundos que queremos gastar.

Mas importa perceber como funciona também o primeiro aspeto: encriptação.

Como posso comunicar informação a alguém de forma privada utilizando uma rede não segura?

A reposta é: utilizando private e public keys.

Uma private key é um conjunto de caracteres extenso (várias dezenas) criado pela própria pessoa.

Em criptografia, uma private key vem sempre associada a uma public key. Esta public key é gerada por um computador.

Assim, quando geramos as nossas chave publica e privada, a privada é sempre guardada e nunca partilhada com ninguém. A publica é a que divulgamos com o resto do Mundo.

Partilhamos com a internet, com a avó, com o vizinho, com qualquer pessoa. Sem qualquer problema. Mas a chave privada guardamos só para nós.

Não devemos nunca, em qualquer circunstância, partilhar a nossa chave privada com ninguém.

Provavelmente já tinham ouvido esta lenga-lenga do mundo das criptomoedas. “Nunca partilhes a tua chave privada com ninguém.”

Vamos explorar um pouco mais para perceber porquê.

Imaginemos que o Bob quer enviar uma mensagem privada à Alice. O Bob usa a chave pública da Alice (que ela partilhou com o Mundo) e envia a mensagem.

A titulo de exemplo, a mensagem dizia: “Olá Alice”.

Ninguém consegue ler esta mensagem, porque ela está encriptada. A única pessoa que consegue ler esta mensagem é a Alice, que irá utilizar a sua chave privada para abrir a mensagem.

Vamos agora entender como funciona o segundo aspeto da criptografia – assinaturas digitais – que é o mais relevante para a maioria dos protocolos blockchain.

Vamos utilizar o protocolo Bitcoin como exemplo.

No protocolo Bitcoin, utilizamos assinaturas digitais para assinarmos transações. Utilizamos a nossa chave privada para assinarmos uma transação que é depois divulgada/propagada publicamente na rede.

Quando assinamos uma transação não estamos a encriptá-la. Estamos a assiná-la para que todos na rede possam ver quem a assinou.

E assim conseguimos garantir a identidade da pessoa que enviou a transação.

Como?

Bom, se eu receber uma mensagem que é assinada por uma chave privada, eu posso usar a chave publica da pessoa que a enviou para verificar se a transação foi, de fato, enviada usando a chave privada dessa mesma pessoa.

Uma chave pública está sempre obrigatoriamente associada a uma chave privada.

Assim, todos na rede podem verificar a identidade de quem enviou a transação. Este aspecto é extremamente importante em todas as criptomoedas.

Se perdermos a nossa chave privada, significa que outra pessoa poderá assinar as nossas transações. E de repente, a rede “pensará” que estamos a assinar transações, uma vez que a nossa chave privada é o que nos identifica.

É extremamente importante mantermos as nossas chaves privadas, privadas. Por algum motivo elas se chamam assim.

Infelizmente, a falta de informação é um grave entrave à adopção de novas tecnologias. Muitas pessoas perderam já dinheiro por não compreenderem alguns destes conceitos e partilharem as suas chaves privadas com oportunistas.

O meu objetivo é ajudar na democratização do conhecimento sobre a tecnologia blockchain em Portugal. Quanto mais gente informada, mais rápido veremos novas ideias e soluções serem desenvolvidas.

Enquanto a tecnologia blockchain for um monstro para a maioria das pessoas a sua adopção será lenta e residual.

Espero que alguns de vós se sintam agora mais esclarecidos.

 

========

*1: na verdade a minha afirmação não é 100% precisa. Há casos em que dois inputs diferentes têm o mesmo output. Chamamos a isso de colisão. Na teoria, a hipótese de colisão é de fato possível. Mas na prática, as probabilidades matemáticas tornam-no hipoteticamente impossível.

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão /  Alterar )

Google photo

Está a comentar usando a sua conta Google Terminar Sessão /  Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão /  Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão /  Alterar )

Connecting to %s

search previous next tag category expand menu location phone mail time cart zoom edit close