Blockchain - Guia rápido

Nos últimos anos, tem havido muito buzz no Blockchain. Muitos descreveram isso como a tecnologia mais revolucionária da década. Especialmente, os mercados financeiros podem ser os mais afetados.

A tecnologia está sendo adaptada em muitos setores, como saúde, medicamentos, seguros, propriedades inteligentes, automóveis e até mesmo governos.

No entanto, até agora, a implementação de maior sucesso do Blockchain é o Bitcoin - Um Sistema de Caixa Eletrônico Ponto a Ponto, que aliás também é a primeira implementação da tecnologia blockchain. Assim, para entender a tecnologia blockchain, é melhor entender como o sistema Bitcoin é projetado e implementado.

Neste artigo, você aprenderá o que é Blockchain, sua arquitetura, como é implementado e seus diversos recursos. Vou colocar a implementação do Bitcoin no site enquanto descrevo as complexidades do blockchain.

A arquitetura do blockchain não é tão trivial e muitos escreveram bons artigos, tutoriais incluindo vários vídeos. Eles variam de público de iniciante a profissionais. Neste tutorial, irei me concentrar no entendimento conceitual da arquitetura do blockchain, mantendo tanto o novato quanto o profissional em mente. Antes de mergulhar no blockchain, é importante saber por que surgiu a necessidade dessa nova tecnologia. A resposta a esta pergunta está no que é conhecido comoDouble − Spending.

Considere uma situação mostrada na imagem -

Como pode ser visto claramente aqui, Bob está oferecendo uma nota de US $ 10 para Lisa em troca de um livro. Depois que Lisa recebe essa nota física de $ 10, Bob não tem como reutilizar esse dinheiro para alguma outra transação, pois a moeda física agora está em posse de Lisa.

Agora, considere uma situação em que o dinheiro é pago na forma digital. Isso é ilustrado na imagem -

Como o formato para troca de dinheiro é digital, ele é essencialmente um arquivo físico binário armazenado em algum lugar no dispositivo de Bob. Depois que Bob dá esse arquivo (dinheiro digital) para Lisa, ele também pode dar uma cópia do arquivo para Alice. Ambos agora pensam que receberam o dinheiro sem ter nenhum meio de autenticar a moeda digital e, portanto, entregariam seus respectivos bens a Bob. Isso é chamadodouble-spending onde o remetente gasta o mesmo dinheiro em mais de um local para obter serviços ou mercadorias de vários fornecedores.

Para resolver esse problema de gasto duplo, empregaria-se uma autoridade centralizada para monitorar todas as transações. Isso é ilustrado na imagem -

A autoridade centralizada, que em termos comuns é o seu banco, mantém um livro-razão registrando todas as transações. Agora, Bob tem que enviar seu dinheiro digital para o banco, que faria uma entrada em seu livro-razão debitando a conta de Bob. Depois de garantir que Bob tenha saldo suficiente para pagar o dinheiro digital que deseja enviar, ele enviará o dinheiro para Lisa creditando sua conta no livro razão.

Agora, é garantido que Bob não pode gastar o dinheiro em dobro. Se toda transação digital fosse encaminhada por meio de uma autoridade centralizada como essa, o problema do gasto duplo estaria resolvido. Isso também oferece outro benefício em validar a autenticidade de cada moeda (dinheiro digital) que recebe na transação. Assim, o dinheiro falso (dinheiro duplicado, como no caso de Bob pagando a Alice usando uma cópia) seria facilmente detectado e impedido de circular.

A introdução da autoridade centralizada, embora resolva o problema do gasto duplo, apresenta outra questão importante - o custo de criação e manutenção da própria autoridade centralizada.

Como os bancos precisam de dinheiro para suas operações, eles começam a cortar comissões em cada transação de moeda que fazem para seus clientes. Isso às vezes pode se tornar muito caro, especialmente em transferências de dinheiro para o exterior, onde vários agentes (bancos) podem estar envolvidos em todo o negócio.

Todos os problemas acima são resolvidos com a introdução da moeda digital, chamada Bitcoin. Vou agora dar a você um breve histórico sobre o que é o Bitcoin antes de me aprofundar em seu design e arquitetura.

O Bitcoin foi introduzido neste mundo por Satoshi Nakamoto por meio de um white paper de estilo de pesquisa intitulado Bitcoin: A Peer-to-Peer Electronic Cash System no ano de 2008.

O Bitcoin não só resolveu o problema do duplo gasto, mas também ofereceu muitas outras vantagens. Uma dessas vantagens que vale a pena mencionar aqui é o anonimato nas transações. Satoshi, que criou o sistema e transacionou algumas moedas neste sistema, é totalmente anônimo para o mundo inteiro.

Imagine só, nesse mundo das redes sociais, quando a privacidade de cada indivíduo está em jogo, o mundo não consegue descobrir até agora quem é Satoshi? Na verdade, não sabemos se Satoshi é um indivíduo ou um grupo de pessoas. O Google pesquisando também revelou o fato de que os bitcoins que Satoshi Nakamoto possui valem cerca de US $ 19,4 bilhões - esse dinheiro agora permanece não reclamado no sistema Bitcoin. Então, o que é Bitcoin - vamos dar uma olhada!

O que é Bitcoin?

Como você viu anteriormente, o banco mantém um livro razão que registra cada transação. Este livro-razão é privado e mantido pelo banco. Satoshi propôs que esse livro-razão fosse público e mantido pela comunidade.

No momento em que você tornar público esse livro-razão, várias considerações virão à sua mente. Este livro deve ser à prova de falsificação para que ninguém possa modificar suas entradas. Como cada entrada no livro-razão é visível publicamente, teremos que descobrir como manter o anonimato - obviamente, você não gostaria que todo mundo soubesse que paguei um milhão de dólares a você.

Além disso, como há apenas um único livro-razão controlando cada transação no mundo, o tamanho do livro-razão seria outra grande preocupação. Fornecer uma solução para essas complexidades não era trivial e é isso que estou tentando aqui para fazer você entender a arquitetura subjacente do Bitcoin em palavras simples.

Esta arquitetura subjacente é o Blockchaine é disso que trata este tutorial. Para entender a arquitetura Blockchain, você precisa entender alguns recursos-chave nos quais ela se baseia. Então, vamos começar com PKI - Criptografia de Chave Pública.

A criptografia de chave pública ou em suma PKI também é conhecida como criptografia assimétrica. Ele usa dois pares de chaves - públicas e privadas. Uma chave é um número binário longo. A chave pública é distribuída em todo o mundo e é verdadeiramente pública, como o nome sugere. A chave privada deve ser mantida estritamente privada e nunca deve ser perdida.

No caso do Bitcoin, se você perder a chave privada de sua carteira Bitcoin, todo o conteúdo de suas carteiras ficará instantaneamente vulnerável a roubo e, antes que você perceba, todo o seu dinheiro (o conteúdo de sua carteira) desaparecerá sem mecanismo no sistema para rastrear quem o roubou - esse é o anonimato no sistema que mencionei anteriormente.

A PKI cumpre duas funções - autenticação e privacidade da mensagem por meio de mecanismo de criptografia / descriptografia. Vou agora explicar essas duas funções -

Autenticação

Quando as duas partes trocam mensagens, é importante estabelecer uma relação de confiança entre o remetente e o destinatário. Especialmente, o receptor deve confiar na fonte da mensagem. Indo para nosso cenário anterior (representado na Figura 1) de Bob enviando algum dinheiro a Lisa para a compra de alguns bens dela, vamos ver como a PKI constrói essa confiança entre Bob e Lisa. Veja a imagem abaixo -

Em primeiro lugar, se Bob deseja enviar algum dinheiro para Lisa, ele precisa criar uma chave privada / pública própria. Observe que as duas chaves estão sempre emparelhadas e você não pode misturar as chaves privadas e públicas de diferentes indivíduos ou instâncias diferentes.

Agora, Bob diz que está enviando $ 10 para Lisa. Portanto, ele cria uma mensagem (uma mensagem de texto simples) contendo a chave pública de Bob (remetente), a chave pública de Lisa (receptor) e o valor ($ 10).

O propósito dessa remessa, como “Quero comprar abóbora de você”, também é adicionado à mensagem. A mensagem inteira agora está assinada usando a chave privada de Bob. Quando Lisa receber essa mensagem, ela usará o algoritmo de verificação de assinatura de PKI e a chave pública de Bob para garantir que a mensagem realmente se originou de Bob. Como a PKI funciona está além do escopo deste tutorial. O leitor interessado deve consultar este site para uma discussão mais detalhada sobre PKI. Isso estabelece a autenticidade do originador da mensagem. Agora, vamos examinar a privacidade da mensagem.

Privacidade da mensagem

Agora, como Lisa recebeu seu pagamento, ela deseja enviar o link para seu e-book que Bob deseja comprar. Então, Lisa criaria uma mensagem e a enviaria para Bob, conforme mostrado na imagem -

A Lisa cria uma mensagem como “Aqui está o link para o meu e-book que você solicitou”, assina-o com a chave pública de Bob que ela recebeu na mensagem de solicitação de Bob e também criptografa a mensagem usando alguma chave secreta que é compartilhada entre os dois durante o handshake HTTPS.

Agora, Lisa tem certeza de que apenas Bob pode decodificar a mensagem usando a chave privada que é mantida somente por Bob. Além disso, alguém que interceptou a mensagem não seria capaz de recuperar seu conteúdo porque o conteúdo é criptografado por uma chave secreta mantida apenas por Bob e Alice. Isso garante a Lisa que o acesso ao e-book é concedido apenas a Bob.

Tendo visto ambos os recursos, Autenticação e Privacidade de Mensagem, implícitos no PKI, vamos seguir em frente para ver como o Bitcoin faz uso de PKI para proteger o livro-razão público que mencionei no capítulo “O que é Bitcoin?”.

Para seu conhecimento - os algoritmos PKI mais populares são RSA e ECDSA , o Bitcoin usa o último.

Uma das funções mais importantes da PKI é a função de hashing. Uma função hash mapeia os dados de qualquer tamanho arbitrário para dados de tamanho fixo. O Bitcoin usa a função hash SHA-256 que produz um hash (saída) de tamanho 256 bits (32 bytes). Isso é ilustrado na imagem -

Bob, ao fazer um pedido com Lisa, cria uma mensagem semelhante à mostrada acima. Esta mensagem é hash por meio de uma função hash que produz um hash de 32 bytes. A beleza desse hash é que, para todos os fins práticos, o hash (o número de 256 bits) é considerado exclusivo para o conteúdo da mensagem. Se a mensagem for modificada, o valor do hash será alterado. Além disso, dado um valor hash, é impossível reconstruir a mensagem original.

Depois de ver a importância do hashing, vamos passar para outro conceito no Bitcoin que é a mineração.

Quando Bob cria uma solicitação de compra para Lisa, ele não a envia para Lisa sozinho. Em vez disso, a mensagem de solicitação é transmitida em toda a rede à qual ele está conectado. A rede de Bob é retratada em imagem.

A mensagem vai para todos os nós conectados (máquinas). Alguns dos nós no diagrama são marcados como mineiros. Essas são as máquinas que executam um software para extrair a mensagem bitcoin. Agora vou explicar o que essa mineração significa.

Processo de Mineração

Como toda a rede é amplamente distribuída, espera-se que cada minerador na rede receba várias mensagens de vários fornecedores em um determinado período de tempo. O que o mineiro faz é combinar essas mensagens em um único bloco. Isso é ilustrado na imagem -

Depois que um bloco de mensagens é formado, o minerador cria um hash no bloco usando a função hash descrita anteriormente. Agora, como você sabe, se qualquer terceiro modificar o conteúdo deste bloco, seu hash se tornará inválido. A propósito, cada mensagem tem um carimbo de data / hora para que ninguém possa modificar sua ordem cronológica sem afetar o valor de hash do bloco. Assim, as mensagens no bloco estão perfeitamente protegidas contra violação. Como esse fato é usado para proteger todas as transações na rede é explicado mais adiante.

Os blocos criados por vários mineiros são encadeados para formar o que é conhecido como um livro-razão público verdadeiramente distribuído.

Cada bloco na cadeia contém várias mensagens (transações), conforme visto anteriormente na Figura 8. Um bloco na cadeia pode vir de qualquer minerador. Ao criar a cadeia de blocos, observamos a regra de que o hash do bloco anterior é adicionado ao bloco atual.

Assim, um minerador, ao criar o bloco, pega o hash do último bloco da cadeia, combina-o com seu próprio conjunto de mensagens e cria um hash para o bloco recém-criado. Este bloco recém-criado agora se torna o novo fim da cadeia e, portanto, a cadeia continua crescendo à medida que mais e mais blocos são adicionados a ela pelos mineiros.

Como todas as transações têm registro de data e hora, precisamos implementar um servidor de registro de data e hora distribuído em uma rede ponto a ponto. Isso requer alguma implementação adicional e essa é a Prova de Trabalho que irei descrever agora. Para cada bloco, agora adicionamos mais um item chamadoNonce como mostrado na figura abaixo -

Nonce é um número tal que o hash do bloco atende a um determinado critério. Esse critério pode ser que o hash gerado deve ter seus quatro dígitos iniciais para ser zero.

Portanto, o hash gerado seria semelhante a 000010101010xxx. Geralmente, o minerador começa com um valor Nonce de 0 e continua incrementando-o até que o hash gerado atenda ao critério especificado.

Observe que a geração de hash funciona aleatoriamente e está além do seu controle - ou seja, você não pode forçar a função de hash a gerar um determinado hash. Portanto, pode levar várias iterações até que o hash desejado com quatro zeros à esquerda seja gerado. O tempo esperado para gerar um bloco no sistema bitcoin é de 10 minutos. Assim que o mineiro extrair o bloco com sucesso, ele o libera no sistema, tornando-o agora o último bloco da cadeia.

Observe que há vários mineiros competindo para gerar o bloco legítimo. O sistema Bitcoin premia o primeiro mineiro bem-sucedido, dando-lhe certos bitcoins. Em geral, o minerador com mais poder de computação pode ser um dos primeiros vencedores. Isso pode causar ataques a todo o sistema por aqueles que possuem um grande poder de processamento. Descreverei os ataques e como eles são mitigados no final deste tutorial.

Vou agora resumir as etapas descritas acima; isso é o que acontece na rede -

  • Qualquer pessoa que deseja obter serviços de terceiros que anunciam na rede, primeiro cria uma transação (mensagem para o destinatário desejado).

  • Durante um determinado período de tempo, pode haver muitos remetentes (compradores) e destinatários (vendedores) criando essas transações.

  • Todas as transações são transmitidas na rede para todos os nós. Observe que não é necessário que uma determinada transação alcance cada um dos outros nós da rede.

  • Cada nó monta as novas transações em um bloco. Observe que o conjunto de transações em cada bloco é independente do conjunto de blocos criados por outros e será naturalmente diferente dos outros. Isso não importa; o sistema garante que cada transmissão de transação na rede seja incluída em algum bloco durante um período de tempo razoável. Geralmente, o remetente irá incentivar o nó, oferecendo uma certa quantidade de bitcoins ao minerador por seus esforços. O mineiro pode optar por dar prioridade de inclusão no bloco para aqueles com incentivos maiores.

  • O nó agora trabalha para encontrar a prova de trabalho para seu bloco montado.

  • Quando o nó encontra uma prova de trabalho, ele transmite o bloco montado na rede.

  • Os nós que receberem o novo bloco irão aceitá-lo somente após verificar se todas as transações do bloco são válidas e ainda não foram gastas.

  • Se o bloco for aceito como válido, o nó que está trabalhando em seu próprio novo bloco terá que remontar as transações em seu bloco garantindo que as transações não sejam duplicadas. O nó agora trabalha para encontrar a prova de trabalho em seu bloco recém-criado; ao fazer isso, ele pegará o hash do bloco aceito como o hash anterior.

  • Da mesma forma, o blockchain continua crescendo para sempre.

Agora, como vimos como todo o sistema funciona, deixe-me descrever alguns dos efeitos colaterais e como resolvê-los.

Como vimos no capítulo Bitcoin - Mineração, um minerador pode ser inundado com muitas transações em um determinado período de tempo. O tamanho máximo de um bloco é predefinido no sistema, necessitando que apenas um certo número de transações seja incluído no bloco.

O número de transações no bloco é determinado pelo tamanho do bloco predefinido e o comprimento médio de cada bloco. Uma dica importante aqui é que o remetente não deve incluir muitas informações em sua mensagem para torná-la curta e, assim, incentivar o minerador a aceitá-la antes das outras mensagens longas.

Um remetente geralmente também adicionará uma taxa de transação em termos de um certo número de bitcoins de modo a incentivar o minerador a inclusão antecipada em seu bloco.

A outra consequência na construção do blockchain é seu mero tamanho. Ao longo de um período de tempo, todo o blockchain pode se tornar muito grande para um nó armazená-lo em seu disco. Isso é resolvido usando Merkle Tree, que é descrito a seguir.

O problema de espaço em disco em um nó é facilmente superado porque todas as transações em um bloco são hash em uma árvore Merkle como mostrado na imagem -

O cabeçalho do bloco agora contém o hash do bloco anterior, um Nonce e o Root Hashde todas as transações no bloco atual em uma árvore Merkle. Como esteRoot Hashinclui os hashes de todas as transações dentro do bloco, essas transações podem ser removidas para economizar espaço em disco. Então agora seu blockchain será parecido com a imagem abaixo -

Isso pode resultar em uma grande economia de espaço em disco. Esta estratégia é usada por um cliente normal que está interessado apenas em receber pagamentos de terceiros. No entanto, os mineiros precisam salvar o blockchain completo. Agora surge a pergunta: como um recebedor verifica o pagamento sem ter a capacidade de rastrear uma moeda recebida até sua origem. Isso é explicado a seguir.

Considere um caso em que, como fornecedor, você gostaria de verificar um determinado pagamento feito no passado. Como o blockchain que você está segurando em sua máquina contém apenas os cabeçalhos de bloco conforme mostrado na figura anterior, a transação que você está procurando está faltando na cópia de seu blockchain.

Agora você pode pesquisar para trás em sua cópia do blockchain até encontrar um bloco no qual a transação desejada está registrada. Agora, solicite a árvore de merkle do bloco selecionado e você terá a transação que está procurando. Isso é ilustrado na Figura abaixo -

Aqui, presumimos que você esteja procurando o Tx103. Embora você não possa ver o conteúdo do Tx103, você sabe que ele foi aceito pelo bloco ao qual ele pertence e por todos os blocos subsequentes da cadeia. Assim, você pode confiar com segurança nesta transação e prosseguir com seus negócios.

Como vimos, a rede Bitcoin contém vários mineiros. É possível que os dois mineiros diferentes resolvam a Prova de Trabalho ao mesmo tempo e, assim, adicionem seus blocos ao último bloco conhecido na cadeia. Isso é ilustrado na imagem abaixo -

Agora, temos dois ramos após o Bloco 3. Ambos os ramos são válidos. Portanto, o próximo bloco minado pode ser adicionado em qualquer um dos ramos. Suponha que o minerador adiciona o bloco recém-minerado ao Bloco 104-A, o ramal que contém o Bloco 104-A será mais longo do que o ramal que contém o Bloco 104-B. Isso é ilustrado na imagem abaixo -

Na arquitetura Bitcoin, o ramo mais longo sempre vence e os mais curtos são eliminados. Portanto, o Bloco 104-B deve ser eliminado. Antes de limpar este bloco, todas as transações neste bloco serão devolvidas ao pool de transações para que sejam extraídas e adicionadas a algum bloco futuro. É assim que os conflitos são resolvidos e apenas uma única cadeia de blocos é mantida pelo sistema.

Como o livro-razão que registra todas as transações de bitcoin é tornado público, a privacidade está em jogo. Qualquer pessoa no mundo saberia quem pagou quem? O sistema bancário tradicional é capaz de manter esse tipo de privacidade, mantendo seus registros confidenciais.

A privacidade no sistema Bitcoin é alcançada por uma estratégia diferente. Observe que dissemos que o remetente de um bitcoin precisa saber a quem pagar. Assim, ele pede a chave pública do vendedor para o qual deseja efetuar o pagamento. Essa chave pública pode ser anônima.

Nesse sentido, como um fornecedor de alguns serviços, quando alguém lhe pergunta para onde enviar o pagamento, você simplesmente enviaria sua chave pública. A associação desta chave pública com você não é registrada em nenhum lugar do razão. Dessa forma, qualquer pessoa fora dessa transação saberia apenas quanto dinheiro foi transacionado e para qual chave pública o dinheiro foi pago.

Para alcançar um maior grau de privacidade, para cada transação, você pode gerar uma nova chave privada / pública para cada transação, de forma que várias transações feitas por você não possam ser agrupadas por terceiros. Para um estranho, isso significaria simplesmente que várias transações de valores menores foram feitas e elas nunca estarão vinculadas a uma fonte comum.

Por último, qualquer sistema baseado na Internet online é vulnerável a abusos. Agora descreverei alguns tipos possíveis de ataques ao sistema Bitcoin e como eles são mitigados.

Vou discutir três tipos diferentes de ataques prováveis ​​no sistema Bitcoin -

Ataque de corrida

Como um invasor, você pode enviar a mesma moeda para diferentes fornecedores em rápida sucessão, provavelmente usando duas máquinas diferentes. Se os vendedores não esperarem pela confirmação do bloqueio antes de entregar a mercadoria, logo perceberão que a transação foi rejeitada durante o processo de mineração. A solução para esse tipo de ataque é que o vendedor deve aguardar pelo menos uma confirmação de bloqueio antes de enviar a mercadoria.

Finney Attack

Nesse caso, o atacante é o mineiro. O mineiro extrai um bloco com sua transação e não o libera no sistema. Ele agora usa as mesmas moedas em uma segunda transação e, em seguida, libera o bloco pré-minerado. Obviamente, a segunda transação seria rejeitada eventualmente por outros mineiros, mas isso levará algum tempo. Para mitigar esse risco, o vendedor deve aguardar pelo menos seis confirmações de bloqueio antes de liberar a mercadoria.

O Ataque de 51%

Nesse tipo de ataque, partimos do pressuposto impraticável de que alguém possui 51% do poder de computação da rede. O atacante neste tipo de ataque mina um blockchain privado onde gasta o dobro das moedas.

Como ele possui a maior parte do poder de computação, ele tem a garantia de que seu blockchain privado em algum ponto do tempo seria mais longo do que a cadeia de rede “honesta”. Ele então libera sua blockchain privada no sistema, tornando todas as transações registradas anteriormente na blockchain honesta para serem inválidas.

Esse tipo de ataque é fictício, pois é muito caro adquirir um poder de computação igual ou superior a 51% do poder de computação de toda a rede.

Neste breve tutorial, você foi apresentado a vários conceitos de Blockchain, tomando Bitcoin como um estudo de caso. O Bitcoin é a primeira implementação bem-sucedida de blockchain. Hoje, o mundo encontrou aplicações da tecnologia blockchain em diversos setores, onde se deseja a confiança sem o envolvimento de uma autoridade centralizada. Bem-vindo ao mundo do Blockchain.

Leituras adicionais -

  • Artigo original de Satoshi - Bitcoin: A Peer-to-Peer Electronic Cash System

  • Site oficial - Bitcoin.org