Quer começar a entender os aspectos técnicos do Bitcoin? Então este artigo está aqui para você. Ele foi adaptado e revisado pelo usuário Pan Nakamoto, quem generosamente nos enviou este conteúdo para publicação. Obrigado Pan =).
Pra aqueles que gostam de se aventurar nas minúcias dos “pqs”!!!
A terceira lei de Arthur Clarke afirma: “Qualquer tecnologia suficientemente avançada é indistinguível da magia”. O que Bitcoin possibilita pode parecer, ao princípio, quase mágico, ou simplesmente impossível (e, portanto, provavelmente é fraudulento ou condenado por muitos).
A seguir descreverei os elementos técnicos básicos por trás do Bitcoin e como eles os reúnem em novas maneiras de tornar possível a magia aparente no mundo real, e principalmente no mundo imaginário.
A segunda lei de Clarke diz: “A única maneira de descobrir os limites do possível é aventurar-se um pouco além deles, já no campo do impossível”, e isso, podemos ver em retrospectiva. É basicamente o que o criador de Bitcoin, Satoshi Nakamoto, fez. Poucos na época, mesmo entre os melhores especialistas em campos relevantes, achavam que a ideia poderia realmente funcionar.
E ela funciona.
Uma das razões pelas quais muitas pessoas têm dificuldade em entender o Bitcoin é que ele usa vários grandes fluxos de tecnologia e métodos “Hackers”. Os principais ingredientes brutos incluem:
- uma matemática simples e robusta;
- um modelo de software livre de código aberto;
- redes peer-to-peer;
- assinaturas digitais;
- algoritmos de hashing.
Os primeiros desenvolvimentos pioneiros em cada uma dessas áreas iniciaram quase que inteiramente entre 1970 e 1990. Efetivamente, não existiam coisas anteriores antes de cerca de 40 anos atrás, um microssegundo no tempo histórico, mas uma era geológica no tempo da revolução digital.
- Alguns começos de marco representativo em cada área foram:
- Para software de código aberto: o projeto GNU (1983) e o projeto Linux (1991);
- Para redes peer-to-peer: ARPANET (1979) e Napster (1999);
- Para assinaturas digitais: a teoria de Diffie-Hellman (1976) e o primeiro conceito de teste RSA (1978);
- Para algoritmos de hash: as primeiras ideias (em torno de 1953) e os principais avanços de Merkle- Damgård (1979).
O Bitcoin combina alguns dos melhores desenvolvimentos posteriores em cada uma dessas áreas para tornar possíveis novas coisas.
Uma vez que poucas pessoas na população em geral entendem muito sobre qualquer um desses componentes essenciais, a compreensão do Bitcoin como uma inovação que os combina de maneiras novas e surpreendentes, surpreendendo até especialistas em cada um desses campos especializados, é, naturalmente, um desafio que exige um bom poder de processamento mental e uma mente aberta no campo de novas possibilidades.
Não só a maioria das pessoas não entende como o enigma da Bitcoin combina tecnicamente, nem entende nenhuma das peças do enigma! A intenção aqui não é entrar em muitos detalhes sobre o conteúdo de qualquer um desses campos técnicos, mas sim fornecer detalhes suficientes para alcançar um rápido aumento no nível geral de compreensão pública.
O Bitcoin em uma palavra: Verificação
O Bitcoin em 3 palavras: Densidade Eletrônica Controlada (mas isso abordaremos em outro post, quando a compreensão pública, já enxergá-la como Hardware e não como Software)
Pode ajudar o entendimento focar não nos detalhes de cada campo, mas em como cada parte contribui estrategicamente para a função “central distribuída” do Bitcoin. Isto é, para criar e manter um único registro inesquecível que mostra a atribuição de cada unidade de Bitcoin aos endereços.
Este registro é estruturado sob a forma de uma cadeia de blocos de transações vinculados e encadeados. O protocolo Bitcoin, a rede e todas as suas peças mantêm e atualizam esta cadeia de blocos de forma que qualquer um possa verificar.
Se uma única palavra pudesse descrever o que a rede Bitcoin faz, seria a verificação, embora alguns gostem da codificação como melhor definição. Para uma moeda global sem margem, confiar na confiança seria a má ideia final. Sistemas monetários anteriores permitem aos “baixos usuários” apenas a alternativa de confiar em algum terceiro confiável.
Primeiro, o software do núcleo Bitcoin é de código aberto e gratuito. Qualquer pessoa pode usá-lo, examiná-lo, propor mudanças ou iniciar um novo ramo com um nome diferente. Na verdade, um grande número de variações de Bitcoin com pequenas diferenças já existem há algum tempo. A abordagem de fonte aberta pode ser especialmente boa para a segurança, porque mais conjuntos de olhos são mais propensos a encontrar fraquezas e ver caminhos de melhoria.
A fonte aberta também tende a promover uma meritocracia de ordem natural. Os contribuintes (nó raiz) que tendem a mostrar o melhor julgamento, o maior número de acertos, também tendem a ter mais de suas contribuições refletidas ao longo do tempo.
As discussões e controvérsias sem fim dos fóruns são um recurso no caso de um bug. Eles concentram a atenção em problemas – tanto reais como imaginários – que ajudam a garantir que tudo o que for implementado tenha sido analisado e testado de vários ângulos, através de diferentes leituras de vida a nível universal.
Muitos computadores em todo o mundo executam software que implementa o protocolo Bitcoin. Um protocolo é algo grosso como uma linguagem falada e para entendê-la com precisão você precisa “raciocinar e pensar” através dessa linguagem (lógica).
Os participantes devem falar esse idioma e não algum outro, e devem falar bem o suficiente para transmitir suas mensagens e entender os outros. Novos protocolos podem ser inventados, mas, assim como com a criação de novos idiomas, geralmente é bastante improdutivo. Tais coisas simplesmente decolam e tornam-se úteis se outros suficientes virem uma vantagem suficiente para realmente participar.
Em segundo lugar, como uma rede peer-to-peer, não há centro. Qualquer um pode baixar o software básico do Bitcoin e iniciar um novo nó. Este nó descobrirá a rede e começará a se comunicar com outros nós ou “pares”.
Nenhum nó possui autoridade ou posição especial. Cada um conecta com pelo menos oito pares, mas às vezes muitos mais. Alguns nós são rápidos e sempre transmitem mais informações e têm mais conexões, mas isso não transmite nenhum status especial.
Qualquer nó pode se conectar ou abandonar a qualquer momento e juntar-se novamente mais tarde. Um usuário não precisa executar um nó completo apenas para usar o Bitcoin para fins comuns.
É comum dizer que o Bitcoin é “descentralizado” ou não tem um centro. Mas então, onde está a base comum? Milhares de nós de peering ativos estão espalhados na maioria dos países pelo mundo/espaço e cada um carrega uma cópia completa atualizada de toda a cadeia de blocos.
Alguns nós não só retransmitem transações e blocos válidos, mas também se juntam ao processo de descobrir e adicionar novos blocos à cadeia. Tais atividades de “mineração” asseguram a verificação final das transações e atribuem a primeira posse de bitcoin novo aos nós participantes como recompensa. Compreender basicamente como a mineração funciona, requer um olhar sobre as distintas funções de vários tipos diferentes de criptografia.
O Bitcoin conta com dois tipos diferentes de criptografia que poucas pessoas entendem. Ambos são contra-intuitivos no que eles possibilitam. Quando a maioria das pessoas ouve “criptografia”, eles pensam em manter os dados privados e seguros através da criptografia.
A criptografia de arquivos pode ser usada para ajudar a proteger arquivos de carteira de Bitcoin individuais, assim como ele pode ser usado para a proteção por senha de qualquer outro arquivo.
Isso é chamado de criptografia de chave simétrica, o que significa que a mesma chave é usada para criptografar e descriptografar (AES256 faz esta função). A criptografia também pode ser usada para comunicação segura entre usuários sobre transações, como com qualquer outro tipo de tráfego seguro. Isso é chamado de criptografia de chave assimétrica.
No entanto, tudo isso é periférico. Nada dentro do protocolo Bitcoin e da rede está criptografado. Em vez disso, são utilizados dois tipos bastante diferentes de criptografia. Eles não são para manter segredos, mas para se certificar de que a verdade está sendo dita.
O Bitcoin é um robusto sistema global de verificação da verdade. É nesse sentido o oposto do “buraco da memória” de 1984 de George Orwell ; É uma cadeia lapsos de lembrança de tempo móvel com poder distribuído.
O primeiro tipo de criptografia no Bitcoin é usado para criar um resumo de mensagens, ou informalmente um “hash”. O Bitcoin usa o hash em muitos níveis diferentes (o mais central é um SHA256 hash executado duas vezes). O segundo tipo é usado para criar e verificar assinaturas digitais. Isso usa pares de chaves de assinatura e chaves de verificação (ECDSA sepc256k1 para assinaturas).
As chaves do reino de Bananal
Apesar das aparências intuitivas para os usuários, as carteiras de Bitcoin não possuem qualquer BTC! Eles apenas contêm pares de chaves e endereços que permitem assinaturas e verificações digitais.
O software Wallet procura o bloqueio para obter referências aos endereços que contém e usa todo o histórico de transações relacionadas para chegar a um saldo vivo para mostrar ao usuário.
Enquanto os designers de software estão trabalhando duro para colocar cadeias de números complexas no fundo das interfaces do usuário e substituí-las ou complementá-las com nomes de usuários mais intuitivos e assim por diante, nosso objetivo aqui é precisamente tocar em alguns detalhes técnicos de como o sistema funciona, então aqui é um exemplo real de um conjunto de chaves de Bitcoin. Esta é uma chave de assinatura real (não use!):
5JWJASjTYCS9N2niU8X9W8DNVVSYdRvYywNsEzhHJozErBqMC3H
Com isso, uma chave de verificação exclusiva (pública) é gerada criptograficamente (versão compactada):
03F33DECCF1FCDEE4007A0B8C71F18A8C916974D1BA2D81F1639D95B1314515BFC
Esta chave de verificação é então esboçada em um endereço público ao qual o Bitcoin pode ser enviado. Nesse caso:
12ctspmoULfwmeva9aZCmLFMkEssZ5CM3x
Como essa chave de assinatura em particular foi tornada pública, ela foi sacrificada permanentemente com insegurança por causa da educação distribuída Bitcoin.
Fazendo um hash
O Hashing desempenha um papel bastante diferente das assinaturas digitais. Isso prova que uma mensagem não foi alterada. Executar um hash da mesma mensagem sempre produz o mesmo resultado. Se um hash não coincide com um anterior, é um aviso de que a versão atual da mensagem não corresponde ao original.
Para ilustrar, aqui está um provérbio russo: “confie, mas verifique, apenas verifique”. – Murray Rothbard, 1962.
E aqui está o resumo SHA256 desta mensagem e atribuição (o mesmo algoritmo que Bitcoin usa):
68ea16d5ddbbd5c9129710e4c816bebe83c8cf7d52647416302d590290ce2ba8
Qualquer mensagem de qualquer tamanho pode entrar em uma função hash. O algoritmo destrói-o, mistura as peças e, de outra forma, “a digita”, até produzir um resultado de comprimento fixo chamado “um resumo”, que para SHA256 toma a forma acima, mas é, em cada caso, diferente em conteúdo.
Existem algumas propriedades críticas de um bom algoritmo de hash. Primeiro, a mesma mensagem sempre produz o mesmo resumo. Em segundo lugar, ele só funciona em uma direção. Nada sobre a mensagem que entrou pode ser reconstruído a partir do resumo que surgiu.
Mesmo a menor mudança produz um resumo completamente diferente, sem relação entre a mudança na entrada e a mudança na saída. Isso é chamado de “efeito de avalanche”. Em terceiro lugar, as chances de produzir o mesmo resumo de uma mensagem alterada são minúsculas. Isso é chamado de “resistência à colisão”. É impossível criar uma mensagem alterada que produza o mesmo resumo do que a mensagem original não alterada.
Para demonstrar, façamos a mesma citação sem as duas aspas.
O que produz esse resumo:
0a7a163d989cf1987e1025d859ce797e060f939e2c9505b54b33fe25a9e860ff
Compare com o sumário anterior:
68ea16d5ddbbd5c9129710e4c816bebe83c8cf7d52647416302d590290ce2ba8
A menor mudança na mensagem, removendo as duas aspas, produziu um resumo completamente diferente que não tem nenhum relacionamento com o sumário anterior. Em suma, um resumo dá uma resposta rápida de sim ou não a uma única pergunta: a mensagem ainda é exatamente a mesma coisa que antes? Se a mensagem difere, o sumário não pode indicar como ou por quanto, apenas que ele tenha mudado ou não.
Como um instrumento aparentemente tão contundente pode ser útil? O Bitcoin é uma aplicação na qual o hashing provou ser realmente útil. Em Bitcoin, o hashing é usado no papel do lynchpin de tornar impossível alterar transações e registros uma vez que eles foram gravados. Uma vez que os hashes são jogados juntos dentro da cadeia de bloqueios, a falsificação de registro em qualquer lugar é impossível.
Transações e como os mineiros competem para descobrir blocos
O software Wallet é usado para criar transações. Isso inclui o valor a ser enviado, o envio e o recebimento de endereços, e algumas outras informações, que são todas juntas. Este hash é assinado com as chaves de assinatura necessárias para criar uma assinatura digital exclusiva válida somente para esta transação e nenhuma outra.
Tudo isso é transmitido para a rede com criptografia, mas as informações são públicas. O que torna isso possível é que a assinatura e a chave de verificação não revelam a chave de assinatura.
Para evitar que alguém tente gastar a mesma unidade duas vezes e cometer um tipo de fraude chamado de dupla despesa, os nós verificam novas transações contra a cadeia de blocos e contra outras novas transações para garantir que as mesmas unidades não estão sendo referenciadas mais de uma vez.
Cada minerador coleta novas transações válidas e as incorpora a um candidato na competição para publicar o próximo bloco reconhecido na cadeia. Cada minerador colhe todas as novas transações juntas. Isso produz um único hash (“mrkl_root”) que torna os registros de todas as outras transações em um bloco interdependentes.
Cada hash, para qualquer bloco de candidato, difere de qualquer outro bloco candidato, não menos importante porque o mineiro inclui seu próprio endereço de mineração exclusivo para que ele possa coletar as recompensas se o seu bloco candidato se tornar reconhecido como o próximo na cadeia. Qual o bloco candidato se torna o vencedor?
Para que os mineiros concorrentes reconheçam um bloco como o próximo válido, o mineiro vencedor deve gerar um certo hash do cabeçalho do seu bloco candidato que atende uma condição rigorosa. Todos os outros mineiros podem verificar esta resposta imediatamente e reconhecê-la como correta ou não.
No entanto, mesmo que seja uma solução correta, funciona apenas para o mineiro que encontrou o seu próprio bloco. Ninguém mais pode apenas tomar a resposta correta de outra pessoa e usá-la para promover seu próprio bloco candidato como o verdadeiro vencedor. É por isso que a resposta correta pode ser livremente publicada sem ser desviada pelos outros. Este único hash de qualificação é chamado de “prova de trabalho”.
A natureza e os usos das digestões de mensagens são anti-intuitivos no início, mas são elementos indispensáveis no que torna o Bitcoin possível.
Um exemplo de um bloco minado
Aqui está um exemplo de alguns dados importantes de um bloco real.
“Hash”: “0000000000000000163440df04bc24eccb48a9d46c64dce3be979e2e6a35aa13”,
“Prev_block”: “00000000000000001b84f85fca41040c558f26f5c225b430eaad05b7cc72668d”,
“Mrkl_root”: “83d3359adae0a0e7d211d983ab3805dd05883353a1d84957823389f0cbbba1ad”,
“Nonce”: 3013750715,
A linha superior (“hash”) foi o hash de cabeçalho de bloco bem sucedido para este bloco. Ele começa com um grande número de zeros porque um hash vencedor deve estar abaixo do valor definido no nível de dificuldade atual. A única maneira de encontrar um vencedor é continuar tentando uma e outra vez.
Este processo é frequentemente descrito na imprensa popular como “resolver um problema de matemática complexo”, mas isso é um pouco enganador. É uma tarefa extremamente simples e brutalmente estúpida, quando exercitada por força bruta, que apenas os computadores podem tolerar.
A função hash deve simplesmente ser executada mais e mais milhões e bilhões de vezes até que uma resposta qualificável finalmente seja encontrada em algum lugar da rede. As chances de um determinado mineiro encontrar tal hash para seu próprio bloco de candidato em qualquer tentativa dada são minúsculas, mas em algum lugar da rede, alguém grita “bingo!” na média de 10 minutos. O vencedor cobra a recompensa de bloco – atualmente 12,5 novos Bitcoins – e quaisquer taxas para as transações incluídas.
Como é cobrada a recompensa?
Os blocos candidatos já estão configurados de antemão para que as recompensas sejam controladas pelo próprio endereço de mineração exclusivo do mineiro vencedor. Isso é possível porque o mineiro já incluiu este endereço em seu próprio bloco candidato único antes de se tornar um vencedor.
O endereço da recompensa já foi incorporado nos dados do bloco para começar. Alterar o endereço de recompensa de qualquer forma invalidaria o hash vencedor e com ele esse bloco de candidatos inteiro.
Além disso, um mineiro só pode gastar recompensas de blocos que realmente se tornam parte da cadeia principal, porque apenas esses blocos podem ser referenciados em transações futuras.
Este design especifica totalmente o controle inicial de todas as primeiras apropriações de novos Bitcoins. Exatamente, quem ganha cada próximo bloco é pseudoaleatório. Para aumentar a probabilidade de ganhar, um mineiro só pode tentar contribuir com uma maior parcela da atual capacidade de hashing de rede total em concorrência com todos os outros tentando fazer o mesmo.
Como mostrado acima com a citação de Rothbard, um hash completamente diferente aparece mesmo após a menor alteração na mensagem. É por isso que o protocolo inclui um lugar para um número que é iniciado em zero e alterado por um para cada nova tentativa de hash (“nonce”).
Somente essa pequena alteração, mesmo que o resto dos dados do bloco candidato seja inalterado, gera um hash completamente diferente a cada vez em busca de um vencedor. No exemplo acima, parece que este mineiro encontrou um hash vencedor para este bloco em algum momento após a tentativa de três bilionésimos (“nonce”: 3013750715), e isso era apenas para esse mineiro ou grupo mineiro, sem incluir a força paralela que perdeu a disputa nas tentativas mal sucedidas de todos os outros mineiros, e tudo isso apenas para a competição por esse bloco.
O ponto chave para entender é que encontrar um hash no nível de dificuldade é extremamente competitivo e difícil, mas verificar depois que esse foi encontrado é trivial. O resto dos mineiros o fazem e se movem para a direita.
Eles usam o hash recentemente descoberto do cabeçalho de bloco anterior (“prev_block”) como uma das entradas para a próxima safra de candidatos de bloco (o que garante a integridade vertical da cadeia de blocos única) e a corrida continua com base no grupo restante de transações não confirmadas.
Uma rede de verificação poderosa e autofinanciada
A rede de mineração de Bitcoin era, em 2015, cerca de 333 Ph/s (Petahashes por segundo) e aumentando a um ritmo logarítmico que em breve tornará a figura pequena (taxa registrada aqui ).
Isso significa que cerca de 3330 hash quadrillion estavam sendo testados na rede a cada segundo, o tempo todo. Esta é a rede de computação distribuída mais poderosa do mundo, de longe, e já vem ampliando esta liderança por algum tempo.
Bloquear recompensas e taxas de transação ajuda a promover a produção e manutenção de toda essa rede de forma descentralizada. Uma vez que a geração de blocos é pseudoaleatória e distribuída em média na proporção da contribuição da força de hash, isso ajuda a incentivar todos os colaboradores o tempo todo. Muitos mineiros participam de pools de mineração cooperativos para que pelo menos algumas recompensas cheguem de forma bastante regular.
A rede destina-se a ser totalmente autofinanciada pelos participantes desde o início, indefinidamente no futuro. No início, as novas recompensas de moeda são maiores e as receitas de transações são menores. Finalmente, apenas a receita das taxas de transações devem permanecer, com uma fase de transição longa e gradual, incorporada.
Se o Bitcoin continuar a ser bem sucedido por um longo prazo, quando a receita de taxa de transação predominar, provavelmente haverá muitas ordens de alta magnitude.
Este foi um resumo de alguns dos principais elementos técnicos do Bitcoin. Os algoritmos Hashing e as assinaturas digitais são, especialmente e propositalmente, invenções contra-intuitivas e relativamente novas, mas saber o que possibilitam é essencial para entender como funciona o Bitcoin.
Para entendê-la, nas minúcias, tem que sair do centralizado, passar pelo descentralizado, operar no distribuído e vivenciar o Bloco matemágico que proporciona tudo isso. Não estar disposto a possibilidade do mundo ser quadrado, como um cubo mágico, escasseará seu entendimento, não importa o que!
Cada um dos principais elementos do Bitcoin contribui para as funções centrais/distribuídas de verificação, manutenção de registros inesquecíveis e prevenção de fraudes. Esses fundamentos técnicos e as funções que eles suportam são tão longamente geniais que superará os enganos sistemáticos de uma fraude universal, assim como qualquer esquema Ponzi.
Adaptado e revisado do Dichavando o Bitcoin Parte 7: Aspectos técnicos HUE (dilmacoin) Pan Nakamoto
Thiago é co-fundador e o suporte técnico, famoso faz-tudo, por trás do BTCSoul. Para ele o interesse nas criptomoedas, Blockchain e Bitcoin se encontra também em seu código.
Texto com formatação incorreta,faltam partes do texto
A pessoa que nos passou já nos informou isso, em breve o atualizaremos e também postaremos outros. Obrigado por avisar.
Texto estupidamente elucidativo.
Fantástico texto!!