DevSecOps

28 mar, 2018

A revolução do Blockchain

Publicidade

O ano é 2008. Em novembro, o sistema financeiro mundial permanecia em posição de impacto, apenas dois meses após a falência do quarto maior banco de investimento dos Estados Unidos, o Lehman Brothers. Governantes do mundo todo já imaginavam que a aterrissagem seria complicada, prevendo o que já sabemos que foi uma das maiores crises financeiras mundiais desde a famosa Depressão de 1929.

Enquanto o mundo financeiro prendia a respiração, o que parecia cena de filme ocorria em um canto obscuro da Internet. Um intrigante e-mail aparece em uma lista de discussão sobre criptografia com o que se assemelha ao trabalho de um tripulante da nave Nabucodonosor. O autor do texto não era o Sr. Anderson, na pele de Neo, mas Satoshi Nakamoto, cuja identidade real permanece em mistério até hoje.

Esse documento revelava ao mundo, pela primeira vez, uma tecnologia desconhecida, capaz de solucionar o dilema que, há décadas, desafiava os libertários virtuais, e abalar as bases do sistema financeiro estabelecido: um sistema global de dinheiro eletrônico capaz de operar na Internet de forma completamente distribuída, com relativo anonimato e independente de um terceiro confiável.

Esse pode parecer um problema de simples solução para os que desconhecem os ideais da criptoanarquia, afinal, pagamentos na Internet já eram uma realidade naquela data. Porém, trocas virtuais de valores apenas eram seguras se realizadas por meio de intermediários, ou seja, instituições financeiras, empresas de cartões de crédito, ou até mesmo empresas de telecomunicações que assumiam a responsabilidade da guarda dos registros dos clientes, incluindo seus saldos e transações.

Essa intermediação significava que o imprescindível anonimato dos membros da comunidade criptoanárquica evaporava assim que uma interação financeira fosse realizada. Um grande desfalque nas possibilidades de interações da comunidade libertária virtual ou pior, esse intermediário tem o poder de censurar, adulterar, ou até eliminar completamente os registros de um usuário sem deixar rastros, apenas editando seus registros internos.

É nesse cenário que surge o Bitcoin, o sistema monetário distribuído, idealizado no e-mail de Satoshi Nakamoto. Diferente do que poderíamos esperar de uma proposta de tecnologia tão inovadora, sua descrição é surpreendentemente simples, pois não apresenta nenhuma criptografia desconhecida pela humanidade. A resposta para o antigo impasse é apresentada em menos de dez páginas, cita apenas oito referências e utiliza algoritmos bem conhecidos como a função hash e criptografia assimétrica.

Bitcoin, então, não é um software, mas um protocolo, e a denominação de uma moeda (ou ativo) virtual. É possível identificar três pilares básicos do Bitcoin: algoritmos criptográficos, como assinaturas digitais e hash; a estrutura de dados composta por blocos encadeados, o blockchain, que seria a grande contribuição de Nakamoto e, finalmente, o mecanismo de prova de trabalho.

There is no coin

Para entender a utilidade do blockchain, precisamos entender o problema que impedia a criação de uma moeda virtual descentralizada. Portanto, é necessário entender superficialmente o funcionamento do Bitcoin, ignorando detalhes alheios ao foco do artigo, o blockchain.

Uma das grandes confusões do Bitcoin é que não há estrutura de moeda como muitos imaginariam a representação de uma moeda digital, ou seja, arquivos armazenados no computador pessoal equivalentes a cédulas monetárias. O protocolo funciona, na verdade, como um sistema de contabilidade no qual os usuários possuem uma ou mais contas (endereços), e por meio delas podem receber ou transferir valores.

Os identificadores e senhas desses endereços são, respectivamente, as chaves públicas e privadas de um algoritmo criptográfico assimétrico. Assim, deter o controle de um endereço na rede Bitcoin resume-se apenas a ter o conhecimento da chave privada capaz de destravar os valores armazenados no endereço derivado da respectiva chave pública.

Já as transferências no protocolo Bitcoin são compostas por um conjunto de entradas e saídas, no qual as entradas são identificadores de transações passadas onde valores foram recebidos, e que agora serão consumidos nessa transação. Similarmente, as saídas informam os valores e os endereços destinatários.

Dessa forma, o saldo de um endereço é composto pelo somatório dos Bitcoins recebidos, subtraído dos Bitcoins transferidos em toda história. Esse sistema é semelhante ao Método das Partidas Dobradas de contabilidade, ou seja, os valores creditados e debitados devem estar equilibrados em todas as contas envolvidas.

Parece complexo, mas não é tanto. Vamos esclarecer com um exemplo. Suponha que eu tenha recebido cinco Bitcoins em uma transação passada no endereço A e três Bitcoins em outra transação no endereço B. Ao adquirir um produto que custa sete Bitcoins de uma loja que detém o controle do endereço C, eu gero uma transação cujas entradas são esses dois identificadores de transações passadas dos endereços A e B, que totalizam oito Bitcoins, e duas saídas, uma de sete Bitcoins para o endereço C do vendedor e outra de um Bitcoin, o troco, para o endereço A, B ou qualquer outro que eu detenha a respectiva chave privada. Essa movimentação de valores está representada na figura 1.

Nesse momento, surge o primeiro pilar do protocolo: os algoritmos criptográficos. Para comprovar que os endereços A e B são meus, ou seja, que eu conheço as chaves privadas, eu assino cada entrada com a chave privada de seu respectivo endereço. Dessa forma, está comprovada a legitimidade do usufruto dos valores utilizados. É importante lembrar que a perda da chave privada significa a impossibilidade de se gastar os valores do respectivo endereço e, similarmente, o seu vazamento significa que outra pessoa poderá gastar todas as transações desse endereço.

O grande desafio dessa arquitetura digital é garantir que sua transação tem “lastro”, ou seja, que o mesmo valor de transação passada não foi usado duas ou mais vezes como garantia em transações subsequentes. Esse é o famoso problema chamado gasto-duplo (double-spending). A solução parece muito simples, basta manter um registro digital com todas as transações já realizadas na rede, permitindo a auditoria prévia de cada nova transação proposta.

Esse é exatamente o trabalho dos intermediários citados anteriormente. Se eu (infelizmente) não consigo sacar mais dinheiro do que tenho no banco, é porque a instituição mantém um histórico de todo dinheiro que recebi e gastei. Logo, calcula exatamente quanto eu tenho disponível. Porém, se o objetivo é não depender mais de um intermediário, quem manterá esse registro? Em quem podemos confiar para manter esse banco de dados íntegro?

Para resolver esse problema é que surge o segundo pilar do Bitcoin: o blockchain, uma estrutura de dados na qual o registro público de todas as transações que já ocorreram na história do Bitcoin é armazenado. O nome blockchain deriva de sua estrutura interna, formada pelo encadeamento ordenado de blocos compostos por, dentre outras informações, as transações e o hash do bloco anterior.

Esse longo registro é armazenado de forma distribuída por todos os nós da rede, utilizando transferências ponto-a-ponto; dessa forma, qualquer participante pode receber e auditar a sequência de transações completa para conferir sua consistência. Como o termo contábil para o registro de todas as transações é “Livro Razão”, ou “ledger” em inglês, o blockchain é também chamado de distributed ledger, originando o acrônimo também muito utilizado para referenciar tecnologias com propriedades semelhantes: o DLT (Distributed Ledger Technology).

Mas afinal, quem tem o direito de escrita no blockchain, se tratando de uma rede aberta e de livre participação? A resposta é simplesmente todos. Qualquer participante é livre para colaborar com a rede, propondo novos blocos com transações, tornando-se um minerador.

Mineradores recebem constantemente as transações geradas pelos usuários e as armazenam temporariamente em uma estrutura em memória chamada “mempool”. Após uma minuciosa análise da consistência de cada transação, que inclui a verificação de que não há gasto-duplo em suas transações de entrada, o minerador agrega transações em um bloco e o propõe à rede.

Todos os participantes recebem essa proposta e a analisam, verificando novamente se todas as informações desse bloco atendem às regras. Caso o bloco seja aprovado pela auditoria distribuída, ele é incluído na ponta da cadeia de blocos, e seu minerador é recompensado pela criação de novos Bitcoins em seu endereço.

É importante frisar que essa estrutura encadeada possui uma propriedade muito interessante: qualquer tentativa de alteração nos dados de um bloco consequentemente altera seu hash. Como essa informação está gravada no bloco seguinte, ela invalida toda a cadeia de blocos subsequentes.

Porém, somente o blockchain não garante a integridade das informações, afinal, um participante malicioso pode trivialmente criar uma versão adulterada do registro apenas ajustando os hashes de todos os blocos subsequentes. Assim, o atacante poderia criar uma versão perfeitamente válida do blockchain, apagando determinadas transações de seu interesse e impedindo que sua vítima identifique uma transação fraudulenta que utilize fundos já gastos. Ainda falta um mecanismo que permita aos participantes identificarem qual é a cadeia com maior apoio dos participantes da rede, e essa versão do blockchain será a única considerada válida sobre o histórico da rede.

Para solucionar esse impasse, Nakamoto utiliza o terceiro pilar do Bitcoin: o sistema de prova de trabalho (PdT). Esse sistema exige que a solução de um problema criptográfico seja anexada a cada bloco que será proposto para a rede, cujo cálculo depende do conteúdo do bloco.

Uma propriedade interessante desse sistema é a sua dificuldade, que aumenta proporcionalmente ao poder computacional agregado na rede, mantendo a taxa de geração de blocos relativamente constante. Essa taxa de geração é 10 minutos em média na rede Bitcoin. A figura 2 apresenta uma representação simplificada da estrutura do blockchain com a utilização da prova de trabalho.

Dessa forma, o participante malicioso não pode mais simplesmente adulterar os dados de um bloco arbitrário e reconstruir a cadeia apenas recalculando os novos hashes, pois todas as soluções dos problemas criptográficos dos blocos subsequentes também serão invalidadas. O ataque agora passou a exigir o recálculo de toda a prova de trabalho da cadeia original; logo, seu custo é proporcional ao trabalho dedicado à cadeia de blocos que se deseja adulterar.

Logicamente, quanto mais poder de processamento dedicado à construção da cadeia de blocos original, maior será sua resiliência a ataques, principalmente a dados armazenados em blocos mais antigos. Por esse motivo, todos os participantes da rede consideram apenas a cadeia com maior trabalho agregado à sua construção como válida.

As propriedades do blockchain

Como exposto, os dados armazenados no blockchain adquirem características únicas. Primeiro, os dados são armazenados de forma transparente, permitindo a sua auditoria. Adicionalmente, é praticamente impossível adulterar os dados armazenados no blockchain – logo, eles são considerados imutáveis, e suas transações, irreversíveis.

Essas características permitem aos participantes da rede, a manutenção de um conjunto de fatos compartilhado em absoluta sincronia derivada de um processo de consenso entre os participantes. Essa garantia permite que cada participante tenha, não somente conhecimento dos fatos, mas a garantia de que os demais também detêm a mesma informação.

Consequentemente, o protocolo é resistente a fraudes, pois as propostas de alterações são comprovadamente válidas e aderentes às regras do protocolo, resultado do consenso sobre a auditoria realizada por cada participante da rede.

A rede colaborativa que mantém um registro em blockchain também possui peculiaridades interessantes. A primeira que podemos notar é sua alta resiliência, pois a tarefa de manutenção do blockchain é completamente distribuída entre os mineradores, que são totalmente complementares entre si.

A inoperância de alguns participantes pouco afeta a rede como um todo. Outra característica notável é sua resistência à censura, pois o bloqueio a uma transação dependeria do conluio de praticamente todos os participantes, fato improvável em uma rede aberta com alto nível de descentralização e sem hierarquia definida.

Porém, não existe almoço grátis. Essas características cobram um preço razoável em outras dimensões do blockchain, e as principais são a escalabilidade, a eficiência, a velocidade de transações e a privacidade.

Como há apenas o acréscimo de dados em um fluxo constante de blocos, é cada vez mais difícil gerenciar essa quantidade de dados. O blockchain do Bitcoin, por exemplo, já possui aproximadamente 150 GB.

Outro fator limitante é a sua eficiência, pois o mecanismo de prova de trabalho demanda uma quantidade proporcional de energia em relação à segurança contra fraudes. O elevado valor de mercado da moeda virtual atrai cada vez mais processamento dos mineradores, e consequentemente o maior é o consumo de energia agregado. A rede Bitcoin terminou 2017 consumindo aproximadamente 35 TWh, mais energia que um pequeno país como a Bulgária.

Para manter a indispensável sincronia da rede, a taxa de criação de blocos e seu tamanho máximo são mantidos em níveis relativamente baixos pelo protocolo para garantir suficiente tempo de sua propagação a toda rede antes da produção de um novo bloco. Essas limitações restringem severamente a capacidade de transações na rede como um todo.

Finalmente, como todos os dados e transações devem estar legíveis para a indispensável auditoria, a privacidade é bastante comprometida. O pseudoanonimato, que antes era possível pela simples desconexão entre o endereço utilizado e seu real proprietário, já é ameaçado por técnicas de análise do blockchain com o objetivo específico de descobrir os reais usuários por trás dos endereços.

Esse tal de blockchain parece interessante…

Como mostrado, o funcionamento do Bitcoin somente é possível devido ao conjunto anteriormente inédito de características em protocolos de tecnologia da informação. Não tardou para suas propriedades “mágicas” aparecerem em diferentes projetos e aplicações, que vão além da manutenção de um Livro Razão distribuído. O exemplo mais notório dessa nova classe de aplicações é o Ethereum.

O Ethereum, além de suportar uma nova moeda virtual nativa chamada ether, permite a execução descentralizada de programas especiais, chamados de contratos inteligentes: programas armazenados no blockchain e executados por sequências de transações. Detalhando um pouco mais, um contrato é gravado em seu estado inicial, e a partir desse bloco ele pode ser executado por transações de participantes da rede gravadas em blocos subsequentes.

De forma geral, um contrato inteligente é um programa determinístico orientado a eventos, cujo novo estado (código e dados) é gravado sequencialmente no blockchain em resposta a cada evento.

Inicialmente, precisamos entender o que é um programa determinístico. Um programa não determinístico pode apresentar resultados diferentes, mesmo quando executado a partir dos mesmos parâmetros de entrada. Códigos que executam funções randômicas são bons exemplos disso. Obviamente, da mesma forma, um programa determinístico obrigatoriamente retornará sempre o mesmo resultado a partir de um conjunto de entrada.

O protocolo Ethereum define uma máquina virtual específica para executar os contratos inteligentes, chamada Ethereum Virtual Machine (EVM). Essa especificação de códigos de operação propositalmente não suporta nenhuma função que possa gerar imprevisibilidade de resultado, garantindo que todos que executem um programa na EVM a partir de um estado sincronizado pelo blockchain e um conjunto de argumentos tenham sempre o mesmo resultado. Isso permite a mesma auditoria anteriormente citada no Bitcoin, e impede que um resultado incorreto de sua execução seja aceito pelos participantes da rede Ethereum.

Como o contrato inteligente permanece dormente, armazenado no blockchain até que seja invocado por uma transação, podemos dizer que ele é orientado a eventos. Alguma entidade, usuário ou até mesmo outro contrato deve provocar sua execução, que pode gerar a alteração de seu estado.

O resultado é um sistema global de execução de programas extremamente resiliente e resistente a fraudes ou censura, as características anteriormente citadas. E o mais importante: como contratos inteligentes podem receber e movimentar a moeda nativa da plataforma, as moedas tornam-se programáveis, e os intermediários potencialmente podem ser substituídos por programas.

Na teoria, as aplicações são intermináveis, e vão desde um simples bolão esportivo entre amigos, onde não é mais necessário rezar para o responsável do caixa não usufruir da arrecadação em uma noitada, até fechaduras residenciais inteligentes capazes de destravar ao receber o valor de aluguel para a temporada, mais uma caução antivandalismo que será devolvida na ausência de danos à propriedade ao fim da estadia. Toda lógica é controlada por contratos inteligentes que custodiam os valores e os movimentam de acordo com o seu código.

Na prática, porém, ainda há muitos obstáculos, usuais a uma tecnologia recente e altamente inovadora. Como primeiro exemplo, cito a incapacidade de contratos inteligentes obterem informações do mundo exterior ao blockchain, como o time vencedor da rodada ou a integridade da propriedade após a saída do inquilino.

Essa é uma área muito ativa em pesquisa, e as soluções que tenho acompanhado oscilam entre a trivial consulta a entidades confiáveis com presença no blockchain, chamadas oráculos, com reputação a zelar pela fidedignidade das informações prestadas e ideias audaciosas como objetos com conexão ao blockchain para reportar informações como sua integridade física ou sua posição geográfica. Outro grande desafio é a capacidade de garantir que as regras de negócio estão corretamente codificadas em um programa de computador, sem erros intencionais ocultos ou comportamentos não previstos.

Como os contratos inteligentes são autônomos e respondem apenas ao seu código, uma vez publicado no blockchain e custodiante de valores muitas vezes elevados em moeda virtual, eles se tornam tentadoras pinhatas, apenas esperando um hacker com o bastão certo.

A teoria em Ciência da Computação sobre a correção funcional de algoritmos é extensa e exige um formalismo que depende, inclusive, da linguagem de programação utilizada. Assim, a capacidade de verificação funcional é praticamente ausente nas plataformas atuais.

Não é surpresa, então, o show de horrores que temos presenciado na rede Ethereum, desde o roubo de milhões em diversos contratos por simples erros de codificação, até o congelamento de outros tantos pela inadvertida desativação de um contrato do qual muitos outros contratos dependiam.

O Império Contra-Ataca!

Com o crescimento generalizado do interesse por moedas virtuais e blockchain, e o aumento da cobertura midiática por agências de informação financeira, 2016 e 2017 tornaram-se anos de exploração da tecnologia, principalmente pelo sistema financeiro estabelecido, justamente o setor supostamente “ameaçado” pelas moedas virtuais. Várias empresas criaram produtos que exploram as virtudes do blockchain e aprimoram suas deficiências, buscando aplicar o DLT em casos reais de negócio.

Não é concebível o uso de redes públicas totalmente descentralizadas para o suporte de processos internos de negócio de um setor tradicional e altamente regulado como o financeiro. Logo, surge o blockchain permissionado. Sua principal diferença é a identificação e aprovação prévia de todo participante da rede, criando uma espécie de consórcio de compartilhamento de dados relevantes a processos de negócio interdependentes.

Uma das principais diferenças entre uma rede permissionada, na qual todos os nós participantes são conhecidos, e uma rede pública de participação aberta é a ausência de necessidade do custoso algoritmo de prova de trabalho. Há várias opções de algoritmos de consenso para esse caso. Alguns exemplos são baseados em confirmações explícitas dos respectivos envolvidos na transação, enquanto outros dependem de uma votação de todos os membros sobre a validade da atualização.

Há muito esforço na construção de plataformas baseadas, ou inspiradas em blockchain, principalmente para redes fechadas. Dentre muitas que buscam espaço hoje, cito o conjunto de plataformas Hyperledger, a plataforma Corda, focada principalmente no sistema financeiro, e a plataforma Quorum, derivada do Ethereum.

Ok, parece interessante. Mas o que dá para fazer com isso?

Um dos principais focos na aplicação de tecnologias de registros compartilhados em empresas privadas, é reduzir ineficiências derivadas da falta de uma visão única dos dados, gerando a necessidade de vários registros locais do mesmo acordo, muitas vezes com erros que invariavelmente demandarão enorme retrabalho para a reconciliação dos fatos divergentes.

Em instituições financeiras, esse ponto é crucial, tendo em vista a quantidade de negócios que são realizados diariamente. Adicionalmente, o regulador do setor pode participar do DLT e acessar informações relevantes para o desempenho de suas responsabilidades em tempo real, permitindo tempestividade nas ações preventivas e dispensando a problemática de busca de dados após a ocorrência de problemas, muitas vezes dificultada por envolvidos no imbróglio.

Porém, os benefícios são se restringem ao sistema financeiro. Muitos outros setores da economia podem se beneficiar da tecnologia de registros distribuídos para melhorar o compartilhamento de informações entre diversos participantes, onde uma entidade central confiável, como um controlador do grupo, não existe para hospedar um banco de dados centralizado. Nesse caso, quando maior a quantidade de participantes, maiores serão os benefícios.

Esse é o motivo das experimentações nesse sentido em mercados como de petróleo e gás, automotivo e varejista, pois todos apresentam uma enorme cadeia de fornecedores, prestadores de serviços e parceiros, cada um gerando seu registro individual dos contratos e produtos entregues. Uma rede capaz de manter um registro sincronizado e descentralizado, capaz de unificar a visão de todos os participantes, e acessível a todos os envolvidos nesses setores proporcionaria elevados ganhos de eficiência.

Back… to the Future!

Hoje, vislumbro o que nos espera no futuro. Moedas virtuais descentralizadas e sistemas sem intermediários já são uma realidade. Porém, ainda estão distantes do cidadão comum. Essas tecnologias ainda são um parque de diversões bastante arriscado para os aventureiros e inovadores, focado em um público usuário com um viés altamente tecnológico.

Como vimos, ainda há muito que melhorar, mas não tenho dúvidas de que a evolução ocorrerá. A base de minha convicção está na história: os primeiros automóveis eram máquinas horríveis, ineficientes e perigosas, a ponto de os legisladores da Pensilvânia, nos Estados Unidos, proporem uma lei em 1896 que obrigaria a todo motorista de uma “carroça sem cavalo” parar, desmantelar seu veículo e esconder suas peças nos arbustos ao cruzar com um rebanho na estrada. Esse árduo processo tinha por objetivo preservar a serenidade dos animais, ameaçada pela visão (e audição) de tamanha aberração tecnológica.

Hoje, as vacas nem são capazes de ouvir a aproximação de um belo, eficiente e seguro automóvel elétrico da Tesla. Então, apesar de testemunhar o nascimento do primeiro e imperfeito blockchain, tenho certeza de que trata-se apenas do começo de uma era, e a evolução será inevitável.

E, para terminar, não posso deixar de vislumbrar o que hoje estará pensando o protagonista de nossa história, Satoshi Nakamoto, provavelmente ainda a bordo da Nabucodonosor, enquanto olha atento para os caracteres verdes que descem vagarosamente em seu visor, relatando que ele é o pai da maior revolução tecnológica desde a Internet.

***

Aviso: As opiniões contidas nesse artigo refletem exclusivamente as opiniões pessoais do autor.

Artigo publicado na revista iMasters, edição #24: https://issuu.com/imasters/docs/24