Baixe o app para aproveitar ainda mais
Prévia do material em texto
CERTIFICAÇÃO DIGITAL E BLOCKCHAIN W B A 04 71 _v 1. 0 2 José Eugênio de Mira Londrina Editora e Distribuidora Educacional S.A. 2020 CERTIFICAÇÃO DIGITAL E BLOCKCHAIN 1ª edição 3 2020 Editora e Distribuidora Educacional S.A. Avenida Paris, 675 – Parque Residencial João Piza CEP: 86041-100 — Londrina — PR e-mail: editora.educacional@kroton.com.br Homepage: http://www.kroton.com.br/ Presidente Rodrigo Galindo Vice-Presidente de Pós-Graduação e Educação Continuada Paulo de Tarso Pires de Moraes Conselho Acadêmico Carlos Roberto Pagani Junior Camila Braga de Oliveira Higa Carolina Yaly Giani Vendramel de Oliveira Henrique Salustiano Silva Juliana Caramigo Gennarini Mariana Gerardi Mello Nirse Ruscheinsky Breternitz Priscila Pereira Silva Tayra Carolina Nascimento Aleixo Coordenador Henrique Salustiano Silva Revisor Gustavo Molina Figueiredo Editorial Alessandra Cristina Fahl Beatriz Meloni Montefusco Gilvânia Honório dos Santos Mariana de Campos Barroso Paola Andressa Machado Leal Dados Internacionais de Catalogação na Publicação (CIP) _________________________________________________________________________________________ Mira, José Eugênio de M671c Certificação digital e blockchain/ José Eugênio de Mira, – Londrina: Editora e Distribuidora Educacional S.A., 2020. 44 p. ISBN 978-65-5903-059-0 1. Certificação. 2. Algoritmos. 3. Digital. I. Título. CDD 352.8 ____________________________________________________________________________________________ Raquel Torres – CRB 6/2786 © 2020 por Editora e Distribuidora Educacional S.A. Todos os direitos reservados. Nenhuma parte desta publicação poderá ser reproduzida ou transmitida de qualquer modo ou por qualquer outro meio, eletrônico ou mecânico, incluindo fotocópia, gravação ou qualquer outro tipo de sistema de armazenamento e transmissão de informação, sem prévia autorização, por escrito, da Editora e Distribuidora Educacional S.A. 4 SUMÁRIO Criptografia simétrica e de chaves públicas _________________________ 05 Assinaturas e certificação digital ____________________________________ 23 Blockchain ___________________________________________________________ 39 Criptomoedas e contratos inteligentes ______________________________ 54 CERTIFICAÇÃO DIGITAL E BLOCKCHAIN 5 Criptografia simétrica e de chaves públicas Autoria: José Eugênio de Mira Leitura crítica: Gustavo Molina Figueiredo Objetivos • Compreender os conceitos básicos de criptografias relacionados ao uso de senhas e hash. • Entender o conceito geral de chave simétrica e chave pública. • Conhecer algoritmos criptográficos simples. 6 1. Criptografia de chave simétrica Você já se perguntou como é possível que tantas informações estejam disponíveis, de forma segura, na Internet? Acesso a saldos bancários, transações comerciais, dados sigilosos de pessoas e empresas, tudo que está armazenado na Internet está, de certa forma, acessível para bilhões de pessoas. Como é possível, então, que esses dados estejam seguros? O uso de senhas e de criptografia é o que permite o armazenamento seguro desses dados em servidores remotos. O que é, afinal, a criptografia e como funcionam as senhas? É o que veremos nesta unidade, além de conhecermos um pouco mais sobre as tecnologias por trás desses sistemas. 1.1 Um pouco de confusão O aumento exponencial do uso da Internet exigiu a implantação de sistemas que permitissem o compartilhamento de informações de forma segura. Embora o conceito de criptografia não seja novo para a humanidade, foi com a Internet que se tornou amplamente difundida e utilizada. A função principal da criptografia é esconder uma informação que será enviada por um canal não seguro, de forma que somente as partes interessadas tenham acesso ao seu conteúdo. Imagine que você deseja enviar para seu irmão, que mora em outro estado, um mapa do tesouro, que seu avô deixou enterrado em uma fazenda da família. Você confia em sua irmã, que vai até a fazenda procurar o tesouro, porém, como garantir que o carteiro, que levará a carta, não viole o envelope para descobrir o mapa? Entretanto, você não pode levar a carta pessoalmente, nem tem ninguém de sua confiança para levar. Qual a solução? 7 Figura 1 – O mapa do tesouro Fonte: elaborada pelo autor. Em vez de desenhar um mapa, você o converte em um texto explicativo, transformando uma imagem em um código escrito, como por exemplo: Sete passos ao norte a partir do pilão arcado Vinte passos ao Nordeste Sete palmos de profundidade Isso já resolveria, caso o mensageiro não fosse alfabetizado, porém, em qualquer outro caso, a pessoa saberia se tratar de coordenadas geográficas. Para resolver esse problema, podemos criptografar essas informações. A origem do termo é grega, e une as palavras Kryptós (escondido) e gráphein (escrita). Embora a maioria não conheça, necessariamente, detalhes de seu funcionamento, atualmente, a maioria das pessoas conhece o termo e seu significado: tornar informações confidenciais por meio de um processo matemático reversível. Trata- se de um processo onde símbolos ou partes de uma informação são embaralhadas e substituídas, por meio de um sistema lógico, que permita sua posterior restauração. Para isso, utilizamos uma chave, 8 um dado padrão, conhecido por ambas as partes, que permite a decodificação das informações. A primeira cifra criptográfica conhecida, a cifra de César, realizava o processo de embaralhamento por meio do deslocamento das letras dos textos pelo seu correspondente no alfabeto, por exemplo. Abaixo, a nomenclatura utilizada em criptografia. Quadro 1 – Conceitos de criptografia Nome Conceito Texto claro. Mensagens ou dados originais. Algoritmo criptográfico. Responsável por realizar as substituições e transformações no texto. Chave secreta. É a entrada para o algoritmo criptográfico, um valor que independe da mensagem original e do algoritmo, e deve ser conhecido por quem receberá a mensagem criptografada. Cada chave aplicada ao mesmo algoritmo deverá produzir uma mensagem diferente. Texto cifrado. Essa é a mensagem embaralhada, produzida como saída. Algoritmo de decriptografia. Aplicado ao texto embaralhado, e com a chave secreta certa, produz como saída a mensagem original. Fonte: adaptado de Stalling (2008). Nesse caso, utilizando nosso texto como entrada ou texto claro, poderíamos escolher uma chave secreta conhecida de ambos, como por exemplo, a idade do vovô rico quando veio ao Brasil, que seja 12 anos. Interessante observar que mesmo que informação da chave esteja na mensagem, o mensageiro mal intencionado não terá acesso à informação, pois não deve, em tese, conhecer o avô do remetente e do destinatário. Aplicando como algoritmo de criptografia a cifra de César, obteríamos o seguinte texto cifrado: 9 Eqfq bmeea ma zadfq m bmdfud pa buxma mdompa Huzfq bmeeae ma Zadpqefq Eqfq bmxyae pq bdargzpupmpq O texto já está bem confuso. Em criptografia, dois conceitos importantes são utilizados para compreensão do funcionamento de uma criptografia eficiente: confusão e difusão. O objetivo da confusão é tornar mais complexa a relação entre a chave e o texto, de forma a tornar difícil deduzir qualquer propriedade da chave a partir do conhecimento do texto, de acordo com Terada (2008). No nosso caso, a confusão está relacionada à força da chave, que não é tão grande. Afinal, o mensageiro poderia conhecer o avô do remetente e tentar decriptografar o texto a partir desse dado. Além disso, observe como a letra M se reproduz constantemente no texto. Um observador poderia notar isso e, a partir daí, deduzir que o M representa uma letra comum na Língua Portuguesa. Para evitar esse tipo de ataque, utiliza-se, na criptografia, o que chamamos de difusão, cujo objetivo é embaralhar ouespalhar os bits do texto legível para que a qualquer redundância seja eliminada do texto legível, de acordo com Terada (2008), , como no caso, a repetição de letras. Nesse caso, a reversibilidade da mensagem para seu estado original está seriamente prejudicada, pois a quantidade de informação na mensagem resultante permite uma estimativa considerável acerca da informação original. Para definir esse fenômeno, o teórico Claude Shannon emprestou o termo entropia, da termodinâmica, que é uma medida do grau de irreversibilidade de um determinado sistema. Esse conceito denota que sistemas tendem, naturalmente, a desordem de suas partes, como, por exemplo, um sorvete com cobertura esquecido no banco do carro: ao derreter, ele irá se misturar a cobertura e com o próprio tecido do assento. Mesmo que se coloque o carro de novo dentro de uma câmara fria, o sorvete não volta ao estado natural. Nem as manchas de sorvete sumirão do assento. Os estudos de Shannon, sobre matemática aplicada à comunicação, teorizavam sobre os efeitos 10 que ruídos de transmissão poderiam causar a informação transmitida, que poderia tornar-se inutilizável. Entretanto, a teoria acabou sendo aplicada justamente a favor da transmissão de dados, uma vez que, em transmissões criptografadas, uma alta entropia é desejável. Assim, nossa criptografia apresenta baixa entropia, pois é facilmente reversível. Um dos maiores redutores de entropia é, sem dúvida, o significado de parte do texto. Partes comuns, que se repitam, ou seja, redundantes, podem levar a quebra do código, como é o caso da observação da letra M em nosso texto. Além disso, cifras como a de César são facilmente quebradas por ataques de força bruta, onde um software substitui rapidamente todas as opções possíveis de chaves até encontrar uma que gere significado. Uma opção, nesse caso, seria utilizar uma chave mais complexa e uma criptografia com maior espalhamento, como é o caso da cifra de Vigenère, que utiliza um sistema de matrizes de transposição colunar com chave numérica, segundo Zochio (2016).Nesse sistema, ao invés de um número, uma palavra é usada como chave com seu respectivo numérico e, portanto, cada letra varia de acordo com a complexidade e tamanho da chave. Nesse caso, o texto poderia receber uma chave com o nome do avô, outro dado que poderia ser de conhecimento apenas dos interessados familiares. Por exemplo, ao receber a chave filisbino, a primeira letra é trocada por X, já que o S é cifrado pela letra F e, portanto, deslocado seis vezes. Já a segunda letra da mensagem, E, é substituída por um M, já que a segunda letra da chave a desloca nove vezes. Assim, a saída do texto seria: Observe que os espaços foram removidos, aumentando, assim, a dificuldade de se localizarem palavras separadas. De fato, a eficiência da cifra fez com que só fosse quebrada cerca de trezentos anos depois, por Charles Babbage, inventor daquele que é considerado o primeiro XmemhbafcfwywjumndfzeqjewcwqwlzublbJnvemhbafcxizVgslrgymDmlfxnzrwdl wqzbtzvoqvblr 11 computador analógico de uso geral, a máquina analítica. Uma maneira de se resolver esse enigma seria a análise da repetição dos caracteres, para então estimar qual a língua utilizada na mensagem. Além disso, a chave ainda é fraca, pois se trata de uma informação que, embora conhecida, pode ser adivinhada com certa facilidade. Por isso, grande parte dos esforços da criptografia moderna parte da ideia de como se compartilhar uma chave com segurança ou da utilização de uma senha para acesso das informações. 2. Gerenciando chaves Ao invés de utilizar uma chave previamente conhecida e um sistema ultrapassado, e que pode ser descoberta, você decide utilizar um sistema mais eficiente para encriptar a mensagem. Parte do problema com as criptografias relatadas acima vem do fato de que o conhecimento do algoritmo utilizado, seja a transposição simples ou matricial, torna simples o processo de quebra automatizada da chave. Portanto, alguns algoritmos modernos tinham como premissa a decriptografia baseada apenas na chave, e nunca no algoritmo, ou seja, mesmo com o conhecimento de como é a realizada a criptografia, sua reversão só é possível com a chave. Um algoritmo de chave simétrica é aquele que recebe um determinado texto legível que ao ser submetido ao algoritmo com a utilização de uma determinada chave, torna-se computacionalmente difícil, a partir do texto gerado, obter-se o texto original sem a chave. 2.1 DES Projetado pela IBM, o algoritmo DES (Data Encryption Standard ou padrão de encriptação de dados) foi baseado em uma versão anterior, chamada LUCIFER. Além do nome pouco popular, essa versão possuía 12 uma chave de 128 bits, que no DES foi encurtado para uma chave de 56 bits, a pedido da própria NSA (National Security Agency ou Agência de Segurança Nacional), segundo Terada (2008). O DES é um sistema de criptografia baseado em hardware, ou seja, projetado para funcionar diretamente nos microcontroladores, e possui um sistema complexo baseado em rodadas criptográficas (as iterações), onde a cada rodada, sua entrada em texto claro de 64bits é separada em duas metades e invertida, e submetida a uma nova chave criptográfica gerada a partir da chave original e uma tabela de valores pré-definidas. A sua característica mais relevante era justamente o fato de que, dada complexidade do processo criptográfico, o algoritmo pode tornar-se público, pois a única maneira de se quebrar a criptografia seria por meio de um processo de força bruta, substituindo-se cada chave possível. Para ter uma ideia, um computador que consiga realizar o teste de 90 bilhões de chave, por segundo, levaria cerca de cinco dias para achar uma chave de 56bits. O DES passou a ser considerado inseguro no final dos anos 1990, e com os vazamentos ocorridos durante o episódio dos Wikileaks, segundo Carvalho (2019), comprovou-se que o governo dos EUA podia quebrar facilmente essa criptografia. 13 Figura 2 – Fluxograma do DES Fonte: adaptado de Terada (2008). O DES, assim como a cifra de Cesar e Vergenerè, bem como outras mais modernas, como a AES, são consideradas cifras simétricas, ou seja, uma mesma chave é utilizada para criptografar e decriptografar a mensagem. Portanto, o processo de envio dessa chave e sua segurança é algo de grande interesse para as partes. Como no início dos anos 1970 toda comunicação criptografada era, basicamente, para uso militar, então o envio de chaves seria feito provavelmente a bordo de um 14 helicóptero escoltado por caças. Entretanto, com o advento da Internet, a necessidade de possibilitar a troca de chaves por meio da própria rede e de forma segura aumentou. Uma das maneiras de se fazer isso, é um sistema de distribuição de chaves. Você poderia enviar sua chave para seu mapa do tesouro, por meio de um serviço terceirizado de entrega, o que descartaria a possibilidade do mensageiro1 ter acesso a chave. De fato, a entrega de chaves fisicamente é uma realidade, porém, exige uma logística complicada, principalmente, quando se trata de muitos destinatários. Considerando duas partes, A e B, essa entrega pode ser feita de muitas maneiras, de acordo com Stallings (2008): 1. A pode selecionar uma chave e entregar pessoalmente a B. 2. Um terceiro pode selecionar uma chave e entregá-la para A e B. 3. Se A e B tiverem usado uma chave anterior recentemente, uma parte pode transmitir a nova chave criptografada a outra, usando a mesma chave. 4. Se A e B tiverem uma conexão criptografada com um terceiro C, C pode entregar a chave para eles. Entretanto, a Internet e suas aplicações dão a esse problema uma camada extra de complexidade. Enquanto, no início, apenas as conexões eram criptografadas, o uso corporativo da Internet obrigou um rigor maior com o uso de diversas aplicações, como envio de e-mails e acesso a websites seguros. Em um cenário desses, a quantidade de chaves exigidas sobre exponencialmente, emuma escala que alcança a casa dos bilhões de chaves. Como distribuir e gerenciar uma quantidade tão grande de informações? 2.2 Criptografia baseada em senha Desde o início desta leitura, você deve estar se perguntando se o problema descrito é uma complicação desnecessária, que o tal mapa 15 poderia ser enviado por e-mail ou simplesmente por uma ligação telefônica. Poderia ser feito dessa forma. Entretanto, como você pode garantir que um e-mail é seguro? Como garantir que outra pessoa não tenha acesso aos dados enviados por meio de uma conexão de e-mail? Observe uma conversa entre um computador e um servidor de armazenamento de e-mail baseado no protocolo POP3 (Post Office Protocol ou protocolo de correio) 1. Server: +OK POP3 server ready 2. Computer: user zeca 3. Server: +OK 4. Computer: pass cidade 5. Server: +ok user succesfully logged on 6. Computer: list 7. Server: 1 512 8. Server: . 9. Computer: retr 1 10. Server: <conteúdo da mensagem 1> 11. Computer: dele 1 12. Computer: quit Observe que na linha 10, o conteúdo da mensagem é enviado, sem nenhum tipo de criptografia. Alguém que estivesse acessando essa transmissão poderia interceptar as mensagens sem dificuldade. Entretanto, na linha 4, há um outro ponto de interesse, que é a palavra de comando pass, de password (senha), enviada do computador para o servidor, seguida por um OK, indicando que a senha informada permitiu o acesso aos dados. Senhas são palavras chaves usadas para acessar informações armazenadas, seja em um banco de dados ou em uma sessão de transporte de dados, como o exemplo acima. Embora parecidas, senhas e chaves criptográficas não são, por definição, a mesma coisa: 16 Figura 3–Chaves versus senhas Fonte: elaborada pelo autor. Senhas, ao contrário das chaves, podem ser utilizadas para a transmissão de dados em uma sessão segura, inclusive, a transmissão de chaves criptográficas. Em sistemas seguros, é comum a geração de chaves criptográficas aleatórias ou pseudoaleatórias para uma sessão, que, uma vez encerradas, são descartadas. Essa chave é conhecida como chave de sessão e, no exemplo acima, cada vez que o usuário se conectar com banco de dados de e-mail, deve fornecer uma senha que dá acesso à chave de sessão usada na criptografia dos dados. A geração de uma chave criptográfica segura, a partir de uma palavra comum, exige um processo lógico-matemático para torná-la segura e com uma alta entropia, afinal, no geral, senhas são palavras comum, mesmo que associadas com números e símbolos. Por isso, o processo de senhas baseadas em encriptação (conhecido como PBE ou Password-Based Encryption) adiciona números aleatórios ao processo, e gera uma chave de tamanho único, mas praticamente irreversível. 17 Figura 4 – Diagrama de um algoritmo PBE Fonte: adaptado de Crypto-It (2020). O processo de armazenar a chave utilizando uma senha, adiciona uma camada extra de proteção aos dados, já que, para acessar os dados da sessão, um atacante deve primeiro descobrir ou decriptografar a senha, porém, o armazenamento de uma senha permite que vários usuários tenham acesso a uma mesma chave secreta, sem compartilhá- la. Para cada sessão, é preciso apenas a senha do usuário e o número randômico gerado no processo, pois é a partir dela que a chave criptografada é gerada. Esse número randômico é conhecido como SALT, que é adicionado à senha no processo de produção de hash, e é armazenado ou enviado junto durante a sessão. Sua função é a prevenção de ataques de dicionário, onde os hackers tentam quebrar a criptografia gerando hashs prévios, a partir de exemplos de senhas comuns. 18 Quadro 2 – Senhas e seus respectivos hashs Senha SALT Hash gerado password <nenhum> 5f4dcc3b5aa765d61d8327deb882cf99 password 524 84e7579a731065084289baff27e1bd5f password 075 1b47dc7aa9bf5c85a1c2da5509c45aa1 Fonte: elaborado pelo autor. O hash gerado a partir da palavra password é tão comum que pode ser encontrado em pesquisas na Internet. Já os dois outros, gerados a partir da adição do salt, são mais seguros. Apesar disso, é importante que a senha seja mantida em segurança. Já o contador de iterações, executa um looping de criação se hashs, de forma consecutiva, então uma determinada senha + o SALT com um contador de iteração de 100 deveria realizar o processo de criação de hash em um looping de 100 vezes. O contador de interação também é público, mas dificulta o ataque, pois ao passo que para o usuário um processo de login com algumas centenas de loopings pode demorar apenas alguns milissegundos, para o atacante, utilizando um software de ataque de força bruta, tornaria o processo inviável, pois teria de reverter o processo, 100 vezes, para cada senha que testasse. Papel semelhante tem o IV, o Initialization Vector (vetor de inicialização), que adiciona um bloco de texto randômico na chave a ser criptografada. Assim como o SALT, deve ser armazenado junto a senha para permitir sua criptografia. 3. Criptografia de chave assimétrica Apesar de possível, a troca de chaves de sessão sempre pode fragilizar a criptografia, uma vez que uma senha pode ser atacada com mais 19 facilidade do que a chave em si. Além disso, exige uma terceira parte confiável, que seria o armazenamento dos hashs em um servidor, que também poderia ser atacado. Imagine que para garantir o envio seguro da chave, ao invés de enviar o mapa criptografado com uma chave conhecida, você envia a chave de criptografia do texto também criptografada, mas com uma chave diferente. A chave, porém, é criptografada, utilizando uma chave desconhecida para o destinatário, digamos, o nome do seu cachorro, Zezé. No exemplo, utilizaremos a cifra de Vigenerè: Chave escolhida aleatoriamente: CBTMMKPA Chave utilizada para criptografar a chave: ZEZE Resultado (usando a cifra de Vigenerè): BFSQLOOE Ao receber a chave, seu primo não pode decriptografar o texto, pois, não tem a sua chave (que é privada). Então, criptografa sua chave com uma chave que só ele conhece, por exemplo, o nome de seu gato, Mingau, e envia de volta: Chave utilizada pelo destinatário: MINGAU Resultado (usando a cifra de Vigenerè): NNFWLIAM Ao receber a chave, você não tem acesso à chave privada que o destinatário usou, mas tem a chave inicial, usada para encriptar a chave inicial, e a utiliza para decriptografar a chave recebida: Chave recebida decriptografada usando a chave privada ZEZE: OJGSMEBI Agora, de posse de uma chave segura, você pode encriptar o texto todo utilizando a chave inicial, CBTMMKPA, e enviar para ele, junto com a chave decriptografada com sua chave privada, OJGSMEBI. Perceba que, 20 nesse sistema, em nenhum momento a chave foi enviada desprotegida pelo canal inseguro. Ao receber o texto, e a chave, o usuário a decriptografa usando a chave privada: Chave recebida: OJGSMEBI Chave recebida submetida a chave do usuário MINGAU: CBTMMKPA Agora, você e seu primo tem uma chave comum, e podem compartilhar conteúdo criptografado, no entanto, nenhum dos dois conhece a chave privada do outro, e em nenhum momento a chave foi enviada pelo canal inseguro. A criptografia de chave assimétrica é um algoritmo que pressupõe um canal não confiável para a troca das chaves, de maneira que uma das chaves se torna pública, enquanto a outra é armazenada de forma segura. Assim, é possível uma troca de chaves segura, uma vez que a chave privada pode ser usada para criptografar conteúdo criptografado com a chave pública, e a chave pública pode decriptografar conteúdo gerado com a chave privada, mas é impossível reverter a criptografia criada com a chave pública com a mesma chave pública. Por isso, a criptografia assimétrica é também conhecida como criptografia de chave pública. Algoritmos de chave pública utilizam operações matemáticas complexas e reversíveis, desde que uma parte dos elementos equação seja conhecida. Whitfield Diffie e Martin Hellman foram os primeirosa propor um sistema eficiente de utilização de chaves públicas para resolver o problema de distribuição de chaves. Inspirados por eles, Ronald Rivest, Adi Shamir e Len Adleman, professores do MIT, criaram então o algoritmo RSA, segundo Zochi (2016) A segurança do RSA depende da dificuldade de fatorar números grandes e dos números primos escolhidos para a criação das chaves, que devem ser grandes também, utilizando a propriedades da aritmética modular. A forma mais óbvia de atacar o RSA é descobrir um método de fatoração rápido, que consiga 21 descobrir os fatores primos do número usado como chave, o que ainda com a computação tradicional é algo extremamente complexo. Já o algoritmo El Gamal, desenvolvido pelo criptógrafo Taher Elgamal, utiliza igualmente a propriedade do logaritmo discreto para permitir o envio de um texto ilegível, por meio de um canal inseguro, com uma adição interessante: a utilização de um NONCE, um acrônimo para Number used ONCE ou número usado uma vez. Isso porque o algoritmo El Gamal publica uma parte da chave, e apenas uma parte é mantida secreta. Para isso, o El Gamal usa alguns números específicos: • p é um número primo relativamente longo. • g é um inteiro relativamente primo de n, sua raiz primitiva, que elevado a algum número n vai produzir o número p, sendo conhecido, assim, como gerador. Vamos entender o processo matemático, usando o exemplo dos primos Zeca e Bento: • Bento gera chave pública e privada: • Bento escolhe um número muito grande q e um grupo cíclico Fq. Do grupo cíclico Fq, ele escolhe qualquer elemento g e um elemento a tal que o mdc (a, q) = 1. Em seguida, calcula h = ga. Bento publica F, h = ga, q e g como sua chave pública e mantém a como chave privada. • Zeca criptografa os dados usando a chave pública de Bento: • Zeca seleciona um elemento k do grupo cíclico F de modo que mdc (k, q) = 1. Em seguida, calcula p = gk e s = hk = gak e multiplica s com M. Depois, envia para Bento (p, M * s) = (gk, M * s). • Bento descriptografa a mensagem: 22 • Bento calcula s1 = pa = gak. Ele divide M * s por s1 para obter M como s = s1. Essa propriedade é importante, pois permite o cálculo do módulo, mas não o cálculo do número ao qual p é elevado. Assim, ao publicar a chave pública, o emissor omite a informação do expoente, que é sua chave privada. Dessa forma, a mensagem original é criptografada multiplicando-se gak por ela. Para remover a máscara, uma pista é fornecida na forma de gk. A menos que alguém conheça a, ele não será capaz de recuperar M. Isso ocorre porque encontrar o logaritmo discreto em um grupo cíclico é difícil e simplesmente saber ga e gk não é bom o suficiente para calcular gak. A utilização de sistemas criptográficos de chave assimétrica apresenta um problema de eficiência, uma vez que, para conjuntos grandes de dados, o processo pode ser extremamente demorado, dependendo da capacidade de processamento do equipamento. Assim, é comum a utilização desses sistemas para distribuição de chaves simétricas de forma segura. Além disso, a criptografia assimétrica permite a implementação do não repúdio, que é a característica implementada em sistemas como o de assinatura e certificação digital. Referências Bibliográficas CARVALHO, L. O que é o WikiLeaks? Olhar Digital, onze de abril de dois mil e dezenove. Disponível em: https://olhardigital.com.br/noticia/o-que-e-o-wikileaks- saiba-mais-sobre-o-site-criado-por-julian-assange/84650. Acesso em: 25 nov. 2020. CRYPTO-IT. Password-Based Encryption (PBE). Disponível em: http://www.crypto- it.net/eng/theory/pbe.html. Acesso em: 25 nov. 2020. SHANNON, C. E. A mathematical theory of communication. The Bell System Technical Journal, n. 27, p.379–423, p.623–656, 1948. STALLINGS, W. Criptografia e segurança de redes. 4. ed. São Paulo: Pearson Prentice Hall, 2008. TERADA, R. Segurança de dados: criptografia em redes. São Paulo: Blucher, 2008. ZOCHIO, M. F. Introdução a criptografia. 1. ed. SãoPaulo: Novatec, 2016. https://olhardigital.com.br/noticia/o-que-e-o-wikileaks-saiba-mais-sobre-o-site-criado-por-julian-as https://olhardigital.com.br/noticia/o-que-e-o-wikileaks-saiba-mais-sobre-o-site-criado-por-julian-as http://www.crypto-it.net/eng/theory/pbe.html http://www.crypto-it.net/eng/theory/pbe.html 23 Assinaturas e certificação digital Autoria: José Eugênio de Mira Leitura crítica: Gustavo Molina Figueiredo Objetivos • Compreender os sistemas de assinatura digital e a geração de hash. • Assimilar a relação entre a geração de hash e a confiabilidade de mensagens • Reconhecer algoritmos de hash e assinaturas digitais. 24 1. Assinatura digital e hash Fãs de séries policiais, já devem ter visto peritos recolhendo impressões digitais, que são desenhos únicos formados pelas papilas dos dedos, que são pequenas elevações na pele da ponta (polpa) dos dedos. Impressões digitais têm componentes genéticos e epigenéticos, o que implica dizer que além do DNA, quaisquer alterações durante a gestação alteram o processo de geração dessas impressões. Impressões digitais não são únicas, embora sejam, probabilisticamente, ínfimas as possibilidades de que duas pessoas com as mesmas impressões estarem em uma mesma região/cidade ao mesmo tempo e, quando se trata de crimes, fica fácil associar as impressões aos suspeitos já levantados pela polícia. Dessa forma, podem ser utilizadas facilmente como confirmação. Entretanto, a partir de uma impressão que nunca tenha sido registrada antes, não se pode descobrir quem é seu dono. Exatamente da mesma forma que ocorrem com os hashs. 1.1 Espalhamento e dispersão Um dos pilares da Segurança da Informação é o não repúdio, uma característica que impede que pessoas e instituições neguem a autoria de determinadas mensagens. O não repúdio funciona tanto como uma forma de segurança, garantindo a originalidade, e, portanto, a confiabilidade da mensagem enviada, quanto como autenticação. Com a popularização de contratos e transações, realizadas por meio da internet, vem se tornando cada vez mais comuns, tornou-se importantíssimo que fosse possível garantir a autenticidade da autoria de mensagens eletrônicas. A utilização de técnicas de espalhamento e a utilização de chaves públicas são apresentadas como uma solução para isso. 25 Funções de hash, ou funções de dispersão ou espalhamento, operam sempre no nível dos bits das mensagens ou dados, transformando sequências de dados em blocos de tamanho único, de forma determinística, o que implica dizer que uma mesma entrada de dados deve gerar sempre a mesma saída. Também deve ter uma alta entropia, de forma que seja impossível a partir do hash gerado obter-se o arquivo original. O primeiro ponto para compreender a função de hash, é sua característica de saída de tamanho único. Isso implica dizer que independentemente do tamanho do texto de entrada, a saída sempre deverá ter o mesmo tamanho. Isso é feito com o algoritmo associando a entrada dos dados a blocos. O tamanho total dos dados é separado sempre na mesma quantidade de porções de dados, cada um desses blocos é tratado separadamente. Figura 1 – Saída de tamanho único Fonte: elaborada pelo autor. Observe que na Figura 1, no bloco da esquerda, temos uma matriz de 4 por 4, com 16 valores no total. Já na direita, temos uma matriz de 8 po 8, com um total de 64 valores. Entretanto, nossa saída tem um tamanho único de oito. Para isso, os valores da esquerda são concatenados de 26 dois em dois, enquanto os da direita são concatenados em blocos de oito. Assim, todos serão, no final, apenas um conjunto de oito valores. Dessa forma, caso tenhamos um bloco de dados de 16 bytes, cada byte é tratado como um bloco. Dessa maneira,, cada bloco em minha função de espalhamento terá apenas um byte; caso tenhamos uma entrada de dados de 1024 bytes, cada bloco terá 64 bytes. A função de hash aplicará a mesma sequência lógica a cada um desses bytes, de forma que a saída terá sempre o mesmotamanho. As funções de hash mais simples se baseiam em uma função muito básica do processamento digital, que é a função de OU exclusivo, ou XOR. Assim, o hash dos valores de um conjunto de dados é visto pela função de hash como uma sequência de blocos de n bits. A esse conjunto de bits, são aplicados um a um a função XOR. A função XOR possui a tabela verdade com melhor espalhamento para operadores binários, com 50% de saídas zero ou um, e por isso, cria uma dispersão melhor do que os operadores AND (E) e OR (OU). Figura 2 – Imagem em binário Fonte: elaborada pelo autor. 27 A imagem acima foi convertida para valores binários, onde o branco é representado por um e o preto por zeros. Depois, efetuou-se o cálculo binário, linha a linha, utilizando diferentes operadores binários. Cada linha tem 40 caracteres, e foram calculadas exatamente 40 linhas. O resultado pode ser observado abaixo. Os cálculos foram feitos utilizando uma calculadora on-line: Com o operador AND: 1110000000000000000000000000000000000111 Com o operador OR: 0000000000000000000000000000000011111111 Com o operador XOR: 1110110010101100000110101001111001000 Perceba como a dispersão dos bits é mais eficiente com o operador XOR, por isso é utilizado como operador para os cálculos de hash. Claro que esse é um exemplo simplificado. Algoritmos de hash reais fazem operações cíclicas de bits por bloco, adição de hash e recálculo, por exemplo, para tornar ainda maior a dispersão. Outra característica importante, para o hash, é o que chamamos de efeito avalanche, que implica dizer que uma pequena mudança nos dados de entrada gera uma grande alteração no hash. Isso é chamado de efeito avalanche. Se x é o valor de entrada e h é o hash, então a função de hash é representada por h = H(x), onde H representa a função aplicada para se obter a saída h. Uma colisão ocorrerá quando x ≠ y e H(x)=H(y). Segundo Stallings (2008), colisões de hash são indesejáveis, mas como não são impossíveis de se evitar, é desejável que o algoritmo seja capaz de reconhecer quando uma colisão é intencional. 1.2 Algoritmos de hash O estudo de formas eficientes para atender necessidades de uma função de espalhamento, fomentaram o desenvolvimento de diversos 28 algoritmos. Para ser considerado um algoritmo de hash eficiente, cinco requerimentos são essenciais: 1. Unidirecionalidade: para qualquer hash gerado, seja inviável a partir dele encontrar a mensagem original. 2. Determinismo: a mesma entrada de dados deve sempre produzir o mesmo valor de hash. 3. Eficiência: o cálculo do hash deve ser rápido. 4. Efeito avalanche: uma alteração mínima no dado original deve produzir um hash completamente diferente. 5. Resistência à colisão: impedir que entradas de dados diferentes gerem hashs iguais. Abaixo, alguns algoritmos de hash conhecidos: 1) MD5: O hash também pode ser conhecido como sumário de mensagem, ou message digest, que nomeia o algoritmo MD5, ou message digest n# 5, a quinta versão de um dos algoritmos de hash mais utilizados, até ser considerado inseguro. É baseado em dois artigos, de dois autores, R.C. Merkle e I.B. Damgård. Segundo Terada (2008), o primeiro tratava de um sistema de autenticação com chave pública, e o segundo, de um sistema de hash resistente a colisões.. Ambos resultaram na função Merkle- Damgård, um algoritmo de hash de mão única. O MD5 foi desenvolvido por Ronal Rivest, e é uma melhoria da versão anterior MD4 produzida pela RSA Data Security, para resolver algumas falhas de segurança na produção de colisões. O MD5 usa um sistema eficiente de rodadas e de blocos, onde cada bloco produzido, a partir da mensagem original, alimenta a entrada da rodada seguinte. Embora ainda seja muito utilizado para, por exemplo, garantir a integridade de programas e arquivos baixados da Internet, o MD5 foi considerado inseguro para o uso em aplicações, de acordo com Chad (2008), como de 29 assinatura e certificação digital, , sendo substituído pelos algoritmos da família SHA. Produz uma saída de 128 bits. 2) SHA1: O SHA1 (Secure Hash Algorithm 1) é um padrão definido pelo FIPS (Federal Information Processings Starndards) 180-1, depois de problemas de colisão relatados no SHA (conhecido posteriormente como SHA0). Projetado pela própria agência de segurança nacional dos EUA, produz uma saída de 160bits (20 bytes). As primeiras vulnerabilidades teóricas foram demonstradas em 2005, sendo que, desde 2013, sites como o Google não aceitam mais certificados gerados com SHA1 (NIST, 2012). Também descende do MD4, mas utiliza cinco palavras, ao invés de quatro, nas rodadas de bloco. Cada bloco também possui 512 bits. O SHA1 ainda é utilizado, principalmente, em aplicações de checagem de integridade. 3) SHA2: O SHA2, atualmente, é o sistema de hashing mais utilizado, embora já exista um sucessor, conhecido como SHA3. O SHA2 é uma família, composta de SHA256, SHA 384 e SHA512 (NIST, 2012). O SHA256 é um algoritmo eficiente, pois produz uma saída de 64 bytes, com uma segurança de 128 bits (o MD5, por exemplo, tem uma segurança de apenas 64 bits), produzidas em apenas 64 rodadas. Atualmente, certos padrões de assinatura e certificados digitais só são aceitos se utilizarem a função hash SHA2, que também é a função de hash utilizada no processo de mineração dos blocos da blockchain da bitcoin. O seu sistema é mais complexo do que todos os anteriores, usando oito palavras de 32 ou 64 bits, que passam por processos complexos de cálculo binário AND, XOR e de negação. 30 4) Whirpool: Vincent Rijmen (o R da sigla RSA) e o brasileiro Paulo S. L. M. Barreto criaram um algoritmo livre de hash, que chegou a ser utilizado pelo software aberto TrueCrypt, uma aplicação para criar discos virtuais criptografados. Certificação e assinatura digital A utilização de algoritmos de resumo tornou possível que um sistema simples de verificação de mensagem fosse implementado, o que permitiu, posteriormente, a criação de sistemas de assinatura e certificação digital. Isso porque a transmissão de um hash, ou resumo junto da mensagem, garante que essa mensagem não sofreu alterações. Figura 3 – Autenticação baseada em resumo Fonte: adaptado de Stallings (2008). Na Figura 3, podemos ver duas situações. Na primeira, os dados são enviados junto com sumário da mensagem (hash – H), gerado pelo remetente. Ao receber os dados, o destinatário gera o próprio sumário, e compara com o sumário enviado. Caso os valores sejam iguais, confirma 31 que os dados não foram alterados. Entretanto, caso a mensagem tenha sido alterada, ao receber os dados e realizar seu próprio hash, os valores serão diferentes, assim, sabe que os dados da mensagem não foram os mesmos enviados pelo remetente. Como garantir, no entanto, que o documento foi realmente enviado pelo destinatário? Afinal, um hacker poderia gerar o próprio documento, e gerar o hash. Para garantir a autenticidade, é necessário, portanto, que alguma informação que somente o destinatário conheça, verificável digitalmente, seja anexada ao documento. É nesse ponto que entra a criptografia de chave pública. Sabemos que em um sistema de chave pública, apenas uma pessoa conhece a chave privada, e sua chave pública pode ser utilizada para decriptografar documentos previamente encriptados com sua chave privada. Desse modo, se Z deseja enviar seu documento para B, basta o remetente Z gerar o resumo da mensagem com uma função hash, aplicar uma criptografia com a sua chave privada, e enviar o documento a B, junto do hash. Ao decriptografar o documento com a chave pública de Z, B deve obter o valor de hash, e ao compará-lo com o hash gerado a partir da mensagem original, será capaz de saber se: 1. A mensagem foi alterada. 2. Quem enviou a mensagem originalmente. O sistema, embora simples, garante um sistema de não repúdio à prova de falhas, pois, como somente o um lado possui a chave privada, seria impossível outra pessoa ter criptografado ohash. Para isso, no entanto, duas coisas devem ser levadas em conta: • Uma vez comprometida, a chave privada deve ser abandonada e não pode ser mais utilizada. • Um sistema externo confiável, uma entidade certificadora, deve garantir que quem possui um determinado par de chaves pública 32 e privada é realmente a pessoa/ instituição que diz ser. Isso é feito por meio de um processo de certificação digital. SHA1, MAC e DSA: Existem outras formas de autenticação de mensagens, por exemplo, por meio do uso de um código de autenticação de mensagens, ou MAC, onde uma chave secreta compartilhada entre as duas pontas é adicionada a uma função de hash junto da mensagem original. A sua principal vantagem é o envio em texto claro, e o fato de não haver criptografia envolvida permite economia de recursos de processamento. Sistemas de monitoramento de emergência também podem se aproveitar desse sistema. Além disso, separar confidencialidade e autenticidade permite uma maior flexibilidade do controle da informação, de acordo com Stallins (2008). Um esquema conhecido de assinatura digital é baseado no algoritmo El Gamal, de chave pública. É importante conhecê-lo, pois é o sistema de verificação de assinatura digital do NIST, conhecido como DSA (Digital Signature Algorithm, ou Algoritmo de Assinatura Digital), baseado também em sistemas de aritmética modular e o problema do logaritmo discreto (NIST, 2009). Apresentado como padrão de assinatura, o DSA foi projetado originalmente com o SHA1, porém, pode ser utilizado com as funções da família SHA2.É implementado, entre outros, no protocolo OpenSSL para comunicação segura de páginas web. Ataques Sistemas de hash e arquiteturas de chave pública estão sujeitos a ataques, como qualquer sistema de segurança da informação. De fato, nos últimos anos têm-se investido muito em sistemas de comunicação, com algoritmos capazes de gerar acessos eficientes, mas seguros. Apesar disso, um dos grandes problemas com a Segurança da Informação ainda é o elo mais fraco da cadeia, o fator humano. 33 Rainbow tables: Ataque baseado em hashs pré-determinados, que são comparados com os valores armazenados em um banco de dados. Embora possa parecer um ataque improvável, existem diversos sites que armazenam sequências de hashs de senhas comuns (como password e senha123). Além disso, aplicativos podem ser utilizados para, baseados em senhas prováveis, determinar alguns hashs possíveis e então compará-los com os hashs armazenados. Caso uma senha se torne pública em algum vazamento de dados, é bem possível que ela seja armazenada em sistemas de hash. Ataque de aniversário: É um ataque que explora a matemática por trás da geração dos hashs e fragilidade algorítmica das colisões de algumas funções. Baseia-se na teoria probabilística de que em um dado grupo n para 1, a probabilidade de alguém do grupo fazer aniversário no mesmo dia do indivíduo escolhido é baixa, pois é uma possibilidade em 365 dias. Já em um grupo de mesmo tamanho, a probabilidade de n para n aumenta de acordo com o tamanho de n. Se em um grupo onde n = 40, a probabilidade de, ao escolher um indivíduo aleatoriamente, outro fazer aniversário no mesmo dia que ele, é algo em torno de 10%, porém, a probabilidade que dois indivíduos no grupo n façam aniversário no mesmo dia é de 89%. Assim, o ataque de aniversário tenta prever, a partir de diferentes entradas, duas entradas cujo hash gerado seja idêntico, onde x1 e x2 tem f(x1)=f(x2). Nas funções hash mais modernas, a resistência ao Ataque de Aniversário é grande, porém, em funções mais antigas como o MD5, poderiam ser quebradas com sistemas de processamento especializado em alguns meses. Comparando com o SHA1, o tempo necessário seria de alguns milhares de anos. 34 Man-in-the-middle: Esse tipo de ataque também conhecido como MITM pressupõe que alguém tem acesso à comunicação entre duas partes, e pode interceptar mensagens e substituí-las. De fato, considerando que uma criptografia de chave pública oferece uma segurança considerável, uma opção é enviar chaves trocadas e, assim, interceptar as mensagens e retransmiti- las. Nesse cenário, se Z envia uma mensagem para B solicitando sua chave pública, D pode interceptá-la; então, enviar sua própria chave pública para Z. Z encripta sua mensagem com a chave pública de D, pensando tratar-se da chave de B. Ao enviar a mensagem cifrada, D a intercepta novamente, decriptografa com sua chave privada, e pode então alterá- la ou simplesmente voltar a encriptar o texto com a chave pública de B (que interceptou anteriormente) e enviar de volta. Esse tipo de ataque mascara identidades de sites com conexão segura com o uso de protocolos SSL. Ao criar um site falso e interceptar a comunicação entre o usuário e o servidor, o atacante intercepta a comunicação com o site. Outra maneira de se explorar esse ataque é se posicionar entre comunicações de e-mail, falsificando a comunicação com remetentes falsos. Segundo Torres (2018), entre as técnicas utilizadas, podemos citar a falsificação de IP e envenenamento de ARP. 1.3 Certificação e PKI Sabemos que os sistemas de chave pública são seguros, e que a utilização desta criptografia associada com funções eficientes de hash depende de uma estrutura de armazenamento, controle e identificação das chaves públicas. Afinal, ao acessar um site que exibe um determinado certificado, quem garante que a empresa realmente foi a responsável por gerar aquele certificado? Assim como para a emissão de documentos oficiais, como RG e CPF, a certificação digital e as 35 assinaturas digitais dependem de entidades centralizadoras que possam atestar a identidade do usuário. Chamamos essas entidades de CA ou Certificate Authority (Autoridade de Certificação). Segundo Stallins (2008), existem dois sistemas mais utilizados de esquemas de distribuição de chaves públicas.: O sistema de autoridade de chave pública é baseado na emissão em tempo real de chaves. Uma autoridade central armazena cópias de chave públicas de diversos entes, e fornece a cada um deles chaves públicas para que possam manter uma comunicação segura com a autoridade. Só a autoridade conhece a chave privada de cada canal para cada um dos solicitantes. Assim, caso Z solicite a chave pública de B, a autoridade responde a mensagem já encriptada com sua chave pública. Além da chave de B, a autoridade envia também a mensagem de solicitação original, com o timestamp (etiqueta de tempo) da solicitação. Isso garante que a chave é recente. Isso explica como uma data ou horário incorreto no computador pode impedir a pessoa de acessar determinados sites ou serviços on-line. Como o timestamp estará incorreto, a autoridade não reconhece a solicitação de chave como legítima. Uma outra maneira de se fazer isso é por meio da emissão de um certificado digital. No exemplo acima, um excesso de solicitações poderia gerar um gargalo na autoridade de chave pública. Um certificado consistiria em um documento digital, contendo uma chave pública e um identificador do proprietário dessa chave, em um bloco assinado pela chave pública da entidade certificadora. Assim, quando você acessa um site em uma conexão segura, utilizando, por exemplo, o protocolo TLS, seu computador busca no servidor onde o site está hospedado um certificado. Esse certificado indica: • Qual CA emitiu esse certificado. • Quem solicitou a emissão desse certificado. 36 • Quando o certificado foi emitido e quando irá expirar. Observe na Figura 4, um certificado emitido para o site wikipedia.org: Figura 4 – Certificado e conexão segura ao site Fonte: print de tela de wikipedia.org. Observe que os campos fornecem a identificação que comprova que os proprietários do site solicitaram a uma entidade verificadora um certificado, com duração de 90 dias; nos campos acima podemos ver a versão do certificado e sua definição. Essa janela pode ser acessada clicando no cadeado que indica umaconexão segura (destacado no alto da figura) e, no caso do navegador Google Chrome (e outros baseados na plataforma Chrominium) n a opção certificado. Importante frisar que só o cadeado no site não garante sua segurança, uma vez que outra 37 empresa ou pessoa poderia emitir um certificado próprio, adicioná-lo a um servidor para, então, proceder um ataque de MITM ou de phishing. A garantia está no fato do certificado ter sido emitido para a empresa/ instituição indicada no corpo do certificado. 2. PKIs e o certificado x.509 Uma infraestrutura de Chave pública (PKI de Public Key Infraetructure ou no Brasil, ICP, de Infraestrutura de Chaves públicas) é, portanto, o sistema organizado de emissão de chaves públicas, baseado no princípio de uma entidade confiável para controle de identidade e emissão de certificados. Como você pode imaginar, uma estrutura centralizada poderia engessar a emissão de certificados. Assim, para manter essa infraestrutura são gerados certificados para que outras entidades possam gerar seus próprios certificados. Além do prazo de expiração, um certificado pode ser revogado em outros casos, como, por exemplo, quando a chave privada do usuário é comprometida. Além disso, mudanças na identidade do usuário como alteração de nome podem exigir a emissão de um novo certificado digital, bem como alguma falha de segurança venha a comprometer o certificado ou seu emissor, segundo Stallings (2008). É importante observarmos que o PKI funciona baseado na confiança em um terceiro, ou seja, uma instituição centralizadora deve reconhecer a existência do sujeito e/ou entidade para emitir o certificado em questão. Existem questões relacionadas à legitimidade dessa autoridade, e que se não poderia ser utilizada de forma a deslegitimar pessoas e/ou instituições ou, até mesmo, controlar o tráfego de dados ou comprometer a comunicação em países com governos totalitários ou pouco democráticos. Isso tem levado a tentativas de se estabelecer 38 sistemas de autenticação e confiabilidade que não necessitem dessa terceira parte confiável. Referências Bibliográficas CHAD, D. R. MD5 vulnerable to collision attacks. Carnegie Mellon University, Software Engineering Institute, 2008. Disponível em: https://www.kb.cert.org/vuls/ id/836068. Acesso em: 25 nov. 2020. ISHIZU, P. As impressões digitais são realmente únicas? Super Interessante, vinte e um de dezembro de dois mil e dezessseis. Disponível em: https://super.abril.com. br/blog/oraculo/as-impressoes-digitais-sao-realmente-unicas/. Acesso em: 25 nov. 2020. NIST. FIPS 186-4 Digital Signature Standard (DSS). 2009. Acesso em 22 de agosto de 2020, disponível em NIST Information Technology Laboratory–COMPUTER SECURITY RESOURCE CENTER: https://csrc.nist.gov/publications/detail/fips/186/4/ final NIST. FIPS 180-4 Secure Hash Standard (SHS). Information Technology Laboratory, Computer Security Resource Center, 2012. Disponível em: https://csrc.nist.gov/ publications/detail/fips/180/4/final. Acesso em: 25 nov. 2020. STALLINGS, W. Criptografia e segurança de redes. 4. ed. São Paulo: Pearson Prentice Hall, 2008. TERADA, R. Segurança de dados: criptografia em redes. São Paulo: Blucher, 2008. TOOLSLICK. Bitwise Calculator. Disponível em: https://toolslick.com/math/bitwise. Acesso em: 25 nov. 2020. https://www.kb.cert.org/vuls/id/836068 https://www.kb.cert.org/vuls/id/836068 https://super.abril.com.br/blog/oraculo/as-impressoes-digitais-sao-realmente-unicas/ https://super.abril.com.br/blog/oraculo/as-impressoes-digitais-sao-realmente-unicas/ https://csrc.nist.gov/publications/detail/fips/186/4/final https://csrc.nist.gov/publications/detail/fips/186/4/final https://csrc.nist.gov/publications/detail/fips/180/4/final https://csrc.nist.gov/publications/detail/fips/180/4/final 39 Blockchain Autoria: José Eugênio de Mira Leitura crítica: Gustavo Molina Figueiredo Objetivos • Conhecer os princípios da blockchain e seu histórico. • Compreender o funcionamento do blockchain e seus princípios. • Entender a relação do blockchain com bitcoin e sua relação com sistemas de relação confiável. 40 1. Principios da blockchain A assinatura de documentos digitalmente, e mesmo o processo de certificação digital, pressupõe a existência de relações de confiança entre os emissores das mensagens ou então entre os emissores e a entidade certificadora. Em alguns casos, no entanto, essa relação de confiança não pode ser estabelecida. O blockchain vem para solucionar esse problema por meio de uma cadeia de dados públicos, que torna todos os blocos de dados encadeados entre si (e daí o nome, blockchain, ou corrente de dados). Para isso, usa conceitos como o de chave pública e privada e o uso de hash. 1.1 A origem da blockchain Sistemas confiáveis representam a base das relações humanas desde o primórdio das civilizações. Em pequenos grupos humanos, o comércio era baseado no bem comum e na confiança quase familiar entre os membros do grupo. No entanto, com a expansão pelo mundo e o aumento exponencial dos grupos humanos, o comércio, como sistema confiável, passou a necessariamente precisar de uma base material. Os objetos de trocas, como animais e produtos agrícolas, acabaram sendo substituídos por garantias do monarca local, que emprestava sua confiança de que dívidas contraídas nas trocas seriam pagas. Pequenas efígies eram gravadas em metais preciosos, e surgiu, assim, o dinheiro, baseado na confiança na terceira parte. Com o tempo, trocas baseadas em materiais tornaram-se difíceis e dispendiosas, principalmente, com a expansão dos comércios na Ásia e América por meio de longas rotas terrestres e ultramarinas. O dinheiro era algo perigoso de ser transportado e os cruzados passaram 41 a funcionar como depositários confiáveis, guardando em seus fortes os dinheiros de viajantes. O dinheiro recebia uma carta assinada pelos cruzados, e só poderia ser retirado pelo seu portador ou com autorização deste. Surgiam, assim, os bancos os primeiros sistemas de saque e depósito baseado em autenticação. Figura 1 – Moeda do reino do rei Edward I Fonte: studiocasper/ iStock. Embora não seja comum pensarmos sobre isso, sistemas monetários sempre contaram com uma confiança em uma terceira parte, seja um governo ou uma instituição. Isso implica dizer que o próprio valor de um dinheiro em um determinado país está atrelado ao grau de confiança em bancos ou no próprio estado. É comum, inclusive, situações onde um banco falido pode levar a um colapso no sistema financeiro, rompendo a cadeia de confiança entre clientes e as instituições. Da mesma maneira, instabilidades políticas e econômicas em um país podem levar a uma situação onde o governo perde sua capacidade de garantir o valor do dinheiro; compreender esse sistema é essencial para compreender o surgimento da blockchain, que nasce do interesse de grupos em criar um sistema computacional capaz de garantir transições de valores em uma https://www.istockphoto.com/br/portfolio/studiocasper?mediatype=photography 42 rede descentralizada, sem interferência de instituições ou do estado e sem a necessidade de confiança entre as partes. Preocupados com isso, grupos de ativistas libertários1, cypherpunks2, matemáticos e pessoas ligadas à computação começaram a propor, nas décadas de 1980 e 1990, por meio de fóruns e listas de e-mails, maneiras de se criar um ativo digital. De fato, a maneira como a blockchain surge, de forma anônima e descentralizada, está ligada diretamente a preocupação desses grupos com questões relacionadas à liberdade e anonimato. A própria criação do bitcoin, por meio da blockchain, até hoje é creditada a um personagem desconhecido. Nakamoto (2008) é quem assina o white paper que cria o bitcoin por meio da rede ponto a ponto da blockchain, e é um pseudônimo. Embora existam pistas de sua identidade, até hoje não comprovaram a identidade de seu criador. O que é necessário é um sistema de pagamento eletrônico baseadoem prova criptográfica em vez de confiança, permitindo a quaisquer duas partes dispostas a transacionar diretamente uma com a outra sem a necessidade de um terceiro confiável. Transações que são computacionalmente impraticáveis de reverter protegeriam os vendedores de fraudes e mecanismos rotineiros de disputa poderiam ser facilmente implementados para proteger os compradores. (NAKAMOTO, 2008, p. 1) O white paper do bitcoin não inicia, mas na verdade encerra uma era de tentativas de alcançar um sistema computacional capaz de transacionar de forma segura, transparente e descentralizada, por meio de uma rede ponto a ponto e que não exige uma terceira parte confiável. Não obstante, a bitcoin e a própria blockchain são consideradas como tecnologia disruptiva e talvez umas das mais importantes do século XXI. Como isso é possível? 1 Diferente de liberais, libertários são grupos mais radicais que combatem todo tipo de interferência estatal, não só na economia. 2 Não confundir com os cyberpunks. Cypherpunks eram grupos que estudavam criptografia como forma de enfrentar o sistema estatal e as grandes corporações. P3 43 1.2 A lógica da blockchain O conceito de confiança em documentos digitais baseia-se na premissa de cálculos matemáticos tão grandes e complexos que somente quem estiver de posse de todos os dados originais poderia prever exatamente seu resultado. Assim, ao usar o problema do logaritmo discreto, é possível que um cálculo realizado previamente com um determinado número e seu módulo forneça um resultado que pode ser obtido utilizando uma parte dos números utilizados nesse cálculo. Esse é o princípio por trás dos algoritmos de chave pública e privada como o RSA e o El Gamal. No blockchain, é utilizado para garantir o acesso aos blocos de dados e permitir registros. Além disso, a função de hash é utilizada no processo de criação das cadeias que compõe o blockchain, garantindo a irreversibilidade do processo de criação. Além disso, o hash é uma validação utilizada no processo de geração da bitcoin, que é uma criptomoeda gerada a partir da criação do processo de mineração, que é o nome dado à criação das chaves públicas e privadas que garantirão o acesso à escrita no bloco. Diferentemente do RSA, no entanto, o blockchain utiliza um sistema de chaves públicas e privadas baseadas em uma função que se aproveita das propriedades da teoria das curvas elípticas. Uma curva elíptica é, por definição, uma curva algébrica nãolinear, o que significa que não tem pontas agudas (cúspides) ou intersecções. Geradas a partir de uma função matemática, possuem propriedades de multiplicação e de soma, de forma que uma reta traçada sobre essa curva fará intersecções com ela em pontos específicos. Observe, na Figura 2, uma curva elíptica gerada a partir da função y ^ 2 = x ^ 3 - 3 x + 7: 44 Figura 2 – Curva elíptica de uma função Fonte: elaborada pelo autor. Os pontos traçados na reta P1 e P2, desde que não tenham o mesmo valor em x, determinam o próximo ponto, chamado de -P3. Uma reta paralela ao eixo y define o ponto P3, onde P1 + P2 = P3. Qualquer ponto, nesse gráfico, pode ser definido como uma soma de P, onde kP = P + P + P (repetido por k vezes). Um sistema de chave pública e privada, baseada nas curvas elípticas, gera um gráfico de pontos, onde as informações sobre as intersecções desses pontos não são conhecidas, mas a função sim, segundo Terada (2008). Dessa maneira, é possível utilizar a propriedade de reversibilidade da operação em sentido único. A chave privada é, portanto, um número de forma imprevisível, e a chave pública é obtida a partir dela e da multiplicação do chamado ponto base. Esse algoritmo é conhecido como ECDSA (Elliptic Curve Digital Signature Algorithm, ou Algoritmo de Assinatura Digital de Curvas Elípticas), e é o sistema criptográfico de chave pública por trás da proteção dos dados armazenados na blockchain, segundo Rykwalder (2020). Uma transação, ou seja, a movimentação de valores por meio da cadeia da blockchain, só é 45 possível para quem tem a chave privada desse bloco. Já a chave pública, é utilizada como endereço para o envio de valores através do bloco. Os dados escritos na blockchain, a partir de quem controla suas chaves, são divididos por todos os computadores que fazem parte da rede de peers (pontos) da blockchain. Assim, qualquer dado que seja registrado na blockchain fará parte de um registro público, descentralizado e inalterável. Embora, na teoria, o armazenamento de dados dentro do blockchain sirva para os registros das transações ocorridas dentro da própria cadeia, como as trocas de criptomoedas entre os usuários da rede, qualquer registro pode ser inserido na blockchain, a um pequeno custo conhecido como fee (a taxa de mineração). Apesar do conceito de blockchain basear-se no sistema desenvolvido para criação e transação de bitcoins, seu formato de distribuição, acesso aos dados e criação de blocos encadeados pode ser utilizado por soluções descentralizadas de armazenamento de dados, garantindo a irreversibilidade de registros. Em um sistema de certificação digital, essa propriedade pode ser utilizada para garantir que, uma vez assinada, uma transação passe a ser reconhecida publicamente como válida. O sistema notarial poderia ser substituído por uma cadeia semelhante, onde qualquer pessoa ou instituição poderia registrar seus dados e confirmar, aceitando ou rejeitando, transações. Uma informação importante é que, embora qualquer pessoa possa criar uma blockchain, uma vez que o programa tem código aberto, já tendo sido replicado para a criação de centenas outras criptomoedas e blockchains privadas, a blockchain ligada ao blockchain responsável pelo bitcoin é única. Assim, chamamos de blockchain a cadeia ligada a criptomoeda bitcoin, e de blockchain o sistema por trás das redes distribuídas P2P (peer-to-peer) de registros imutáveis 46 2. Criando a blockchain Em inglês, peer-to-peer network significa redes ponto a ponto, ou seja, redes descentralizadas, sem um computador centralizado, ou seja, sem um servidor. Desde o final da era dos mainframes, grandes computadores corporativos centralizados, as redes de computadores passaram por um processo conhecido como downsizing, com computadores sendo transformados em estações de trabalho cada vez mais autônomas, que poderiam compartilhar recursos com outros na rede com outros, bem como utilizar recursos de outros também. Essa proposta se populariza com a Internet e, logo nos primeiros anos do século XXI, surgem os primeiros softwares de compartilhamento de arquivos distribuídos. Assim, quando um computador disponibiliza um arquivo, rapidamente é copiado por outros e, assim, sucessivamente. Mesmo que o primeiro computador se torne indisponível, agora centenas ou milhares de cópias desses arquivos já foram copiados para outros computadores, que vão continuar compartilhando e assim por diante. Esse sistema se tornou popular ao permitir o compartilhamento de arquivos de áudio e vídeo por meio de programas de torrente. Um torrent é um arquivo, que contém os endereços de computadores que tem um determinado arquivo disponível. Ao ser compartilhado, o arquivo é atualizado, apontando para os novos computadores. A rede da blockchain funciona de forma análoga. Para fazer parte da rede, é preciso utilizar um software que se conecta a rede e faz uma cópia de todas as transações existentes, e passa a colaborar nessa rede. Cada computador da rede é chamado de node (ou nó) e colabora recebendo todos os blocos da rede e realizando um processo que consiste basicamente em tentar adivinhar o próximo bloco válido, o que é feito por meio de uma proof-of-work (prova de trabalho). Observe a descrição do white paper sobre o processo de trabalho da rede na blockchain da bitcoin: 47 1) Novas transações são transmitidas para todos os nós. 2) Cada nó coleta novas transações em um bloco. 3) Cada nó trabalha para encontraruma proof-of-work complexa para o seu bloco. 4) Quando um nó encontra uma proof-of-work, ele transmite o bloco para todos os nós. 5) Os nós aceitam o bloco somente se todas as suas transações são válidas e já não foram gastas. 6) Os nós expressam sua aceitação do bloco, trabalhando na criação do próximo bloco na cadeia, usando o hash do bloco aceito como o hash anterior. (NAKAMOTO, 2008, p. 3) Portanto, um bloco é um conjunto de transações, ou seja, um conjunto de alterações, dos valores descritos na blockchain, transmitidas pela rede. Uma proof-of-work é uma comprovação de que um determinado computador utilizou um tempo de processamento para realizar uma determinada tarefa proposta pelo código do software da blockchain. O processo de realização de uma prova de trabalho recebe uma recompensa em criptomoedas, e esse processo recebe o nome de mineração. 2.1 Encadeando blocos Em 1992, a professora americana Cynthia Dwork e o professor israelense Moni Naor apresentaram um trabalho que versava como sobre combater SPAM no envio de e-mail. A proposta dos acadêmicos era de que, para cada email enviado, um custo computacional fosse necessário. Se eu não te conheço e você deseja me enviar uma mensagem, deve provar que gastou, digamos, dez segundos de tempo de CPU, apenas para mim e apenas para esta mensagem (DWOR; NAOR, 1992, p. 1-2 ), ou seja, ao invés de simplesmente enviar o dado, o sistema tem que realizar um trabalho computacional, trabalho esse que envolve uma função que demanda certo custo matemático para ser calculada, mas que pode ser verificada com facilidade. 48 Na blockchain, esse trabalho é realizado por uma função de hash. Todos os dados do bloco anterior são adicionados como entrada em uma função que calcula o hash do próximo bloco. Nesse sentido, todos os blocos permanecem inalteráveis após a geração do próximo bloco da cadeia, e quem verifica a validade de um determinado bloco é a própria rede, o que é chamado de consenso. Figura 3 – Formação do bloco encadeado Fonte: adaptado de Nakamoto (2008, p. 2). Nesse processo de criação do bloco, a mineração, alguns dados devem ser utilizados, além da informação do bloco anterior. São adicionados como entrada na função hash um nonce e o timestamp do momento em que a tentativa de criação do bloco foi realizada. Essas duas informações tornam simples a verificação de outros nós da rede sobre a validade do bloco minerado. O nonce é um número de 32 bits, e o timestamp é o horário escrito em formato computacional, com data e hora contendo minutos e segundos. Figura 4 – Dados de formação do bloco Fonte: elaborada pelo autor. 49 Entretanto, a criação de blocos não é tão simples assim, isso porque a proof-of-work implementa uma dificuldade para a geração dos hashs, conhecido como quebra-cabeça criptográfico. Dessa maneira, somente um hash com um formato muito específico é aceito na validação de um novo bloco. A formação do consenso se dá por meio da implementação de um algoritmo que resolve um problema conhecido como tolerância à falha bizantina. Cada um dos nós analisa a informação recebida dos outros envia para os outros nós da rede se o bloco gerado é válido ou não, por meio da verificação do hash. Se a maioria dos nós aceitar o bloco como válido, passa a integrar a cadeia, e o próximo bloco deverá ser gerado por meio dos dados desse bloco. Entretanto, se o bloco é público e a função de hash não muda, como garantir que a prova de trabalho continue complexa e que não seja possível adivinhar o próximo bloco? 2.2 Proof of work e mineração À primeira vista, a criação de um dinheiro digital a partir de um algoritmo matemático pode parecer bem difícil de acreditar. Isso advém da ideia abstrata, que temos, de que dinheiro tem representações físicas. Isso é verdade? Não podemos esquecer que, atualmente, boa parte do dinheiro está armazenada em contas bancárias, onde são nada mais do que representações numéricas em um sistema computacional e, embora as instituições bancárias sejam confiáveis, não podemos esquecer fatos como o que levaram a grande crise econômica de 2008, com a quebra do banco Lehman brothers. Mesmo no dia a dia, fazemos pagamentos com cartões de débito e, agora, aplicativos, onde o dinheiro existe somente como uma representação digital de valor. Da mesma maneira que um papel emitido pelo governo só tem valor pela confiança que as pessoas depositam nas instituições, os dados da blockchain só 50 tem valor devido à confiança que as pessoas têm na impossibilidade de alteração de seus dados. De fato, embora o processo de criação da bitcoin seja diretamente ligado ao funcionamento da blockchain e sua mineração, o valor deles advém da confiabilidade de uma rede de armazenamento de dados confiáveis distribuída globalmente, imutável e segura. Quem possui um endereço válido e uma assinatura de chave privada deste endereço, pode enviar transações para outras pessoas, e essas transações serão distribuídas e confirmadas por toda a rede. Para serem confirmadas, devem fazer parte de um bloco válido, e o bloco válido é aquele que resolve o quebra-cabeça, encontrando um valor muito específico de hash. Esse valor é conhecido como alvo, e é um hash com um valor numérico muito baixo. Como a blockchain usa uma função hash SHA256, sua saída é um valor numérico, hexadecimal, de 256 bits. Assim, esse número é escrito em valores de zero a F, sendo f igual a 16. Em um endereço hexadecimal, 0f é igual a 16, e 1f é igual a 17; 0ff é igual a 32 e 1ff é igual a 33. Como o valor de hash não pode ser previsto, todos os computadores que fazem parte da rede ponto a ponto realizam um processo de tentativa e erro para tentar alcançar um hash com um valor numérico muito baixo, ou seja, com muitos zeros à esquerda. Cada tentativa varia o número no nonce, que vai de zero a 4.294.967.295. E essa tentativa deve ser realizada no menor tempo possível, pois, a cada segundo, o timestamp do bloco se altera, e os hashs precisam começar a ser gerados novamente. 51 Figura 5 – Golden nonce e alvo (target) Fonte: elaborada pelo autor. Essa dificuldade computacional é altíssima, e como a rede aumenta exponencialmente, com mais mineradores, a dificuldade também é ajustada. O criador da blockchain pensou, no entanto, que, no início, deveria incentivar pessoas a fazer parte da rede, e definiu, assim, um sistema de recompensas, que é um grande atrativo da mineração, além das taxas. Ao concluir o quebra- cabeça criptográfico, o computador que conseguiu encontrar o valor específico do hash determinado, recebe um valor em bitcoins pelo esforço. Esse valor é fixo por bloco, e cai pela metade a cada certa quantidade de blocos encontrados, mantendo uma relação entre dificuldade de encontrar novos blocos e valor. Segundo o que o próprio criador define em um artigo: A adição estável de uma quantidade constante de novas moedas é análoga a garimpeiros dispenderem recursos para colocar mais ouro em circulação. No nosso caso, tempo de CPU e eletricidade que estão sendo consumidos. O incentivo também pode ser financiado com taxas de transação. Se o valor de uma transação de saída é menor que o valor de entrada, a diferença é uma taxa de transação que é adicionada ao valor de incentivo do bloco que contém a transação. (NAKAMOTO, 2008, p. 4) Embora os mineradores sejam a força bruta por trás da criação da bitcoin, a manutenção da blockchain é distribuída entre todos os participantes da rede ponto a ponto. Somente os blocos que resolvem 52 os quebra-cabeças são adicionados como parte da cadeia, e o aceite desses blocos se dá a partir do momento que novos blocos são gerados e testados. Embora seja computacionalmente impossível dois mineradores gerarem o mesmo bloco ao mesmo tempo, é possível que atrasos na propagação do novo bloco na rede gerem atrasos, situação que poderia criar dois blocos válidos (situação chamada de competing chains ou cadeia concorrente), ou seja, dois blocoscujo hash corresponde ao alvo numérico abaixo de um determinado limiar. Nesse caso, a rede aguardará a emissão de um próximo bloco, e será considerado válido aquele bloco presente na rede com maior quantidade de peers. Esse bloco invalidado será considerado um bloco órfão, e as transações presentes nele deverão ser validadas novamente. Por isso, uma transação na rede blockchain deve aguardar um tempo para ser confirmada. Embora complexo, a blockchain é a implementação de conceitos conhecidos, como assinaturas baseadas em chaves privadas e funções de hash. A união de tais conceitos criou um sistema de encadeamento de blocos imutáveis que tem um grande poder disruptivo, pois permite sistemas abertos, distribuídos e auditáveis, além de um sistema de transações e registros que pode vir a substituir, no futuro, cartórios, bancos e até mesmo contratos. Referências Bibliográficas DWORK, C.; NAOR, M. Pricing via processing or combatting junk mail. Crypto’92, p. 11, 1992. Disponível em: http://www.wisdom.weizmann.ac.il/~naor/PAPERS/pvp. pdf. Acesso em: 25 nov. 2020. SYMBOLAB. Calculadora de funções e plotagem de gráfico. Eqsquest, 2017. Disponível em: https://pt.symbolab.com/solver/functions-graphing-calculator/. Acesso em: 25 nov. 2020. NAKAMOTO, S. Bitcoin: um sistema de dinheiro eletrônico peer-to-peer. Disponível em: https://bitcoin.org/files/bitcoin-paper/bitcoin_pt_br.pdf. Acesso em: 25 nov. 2020. http://www.wisdom.weizmann.ac.il/~naor/PAPERS/pvp.pdf http://www.wisdom.weizmann.ac.il/~naor/PAPERS/pvp.pdf https://pt.symbolab.com/solver/functions-graphing-calculator/ https://bitcoin.org/files/bitcoin-paper/bitcoin_pt_br.pdf 53 RYKWALDER, E. (2020). A matemática por trás do Bitcoin–CoinDesk 2020–Bitcoin on air. Bitcoin on air, 2020. Disponível em: https://pt.bitcoinonair.com/math-behind- bitcoin. Acesso em: 25 nov. 2020. TERADA, R. Segurança de dados: criptografia em redes. São Paulo: Blucher, 2008. https://pt.bitcoinonair.com/math-behind-bitcoin https://pt.bitcoinonair.com/math-behind-bitcoin 54 Criptomoedas e contratos inteligentes Autoria: José Eugênio de Mira Leitura crítica: Gustavo Molina Figueiredo Objetivos • Compreender o que são criptomoedas. • Entender o processo de transações autoexecutáveis por meio de contratos inteligentes. • Reconhecer características de criptomoedas, contratos inteligentes e suas linguagens. 55 1. Criptomoedas e transações Em uma blockchain, determinados registros podem ser movidos por meio de diferentes endereços, desde que assinados com a chave privada do proprietário do endereço que contém um registro, que será transacionado para o outro. Esses registros são valores atribuídos, inicialmente, ao endereço que consegue, por meio do processo de resolução do quebra-cabeça criptográfico, minerar os dados do bloco seguinte da cadeia. Veremos a visão de criptomoedas e suas transações, o funcionamento de contratos inteligentes e como podem representar um avanço considerável em área de negócio e tecnologia, e até mesmo na área jurídica. Veremos também um pouco sobre as linguagens utilizadas na execução desses contratos e o conceito de tokens. 1.1 Criptomoedas existem? Criptomoedas são, na prática, apenas registros de um bloco de um banco de dados distribuídos. Ao mover um valor de bitcoins, por exemplo, de um endereço para o outro, o que é feito é simplesmente dizer que determinado endereço passou a ter um valor menor em seu registro, e o outro, um valor maior. Pode parecer estranho, mas não podemos esquecer que, em tese, uma boa parte do dinheiro em circulação são apenas registros eletrônicos na base de dados de algum governo ou instituição bancária. O conceito de criptomoedas em uma blockchain fica mais claro e simples de se compreender quando usamos a analogia do livro-razão. Em contabilidade, um livro-razão é um documento escriturário que possui informações sobre as diferentes contas de uma empresa, suas entradas e saída de valores, em uma disposição cronológica. Assim, é possível 56 saber com precisão quais os valores iniciais de cada uma das contas, quais valores circularam entre quais contas e qual o saldo final delas. Em um livro razão (ou ledger), diferentes colunas são utilizadas para o registro de entradas e saídas. Dessa forma, fica fácil ao final do dia, ou do mês, contabilizar se houve lucro ou prejuízo. Se a soma de todas as colunas de entradas for maior do que a coluna de saída, houve lucro, caso contrário, houve prejuízo. Figura 1 – Um antigo livro-razão Fonte: arenadesign/ iStock.com. Uma coluna mais à direita mostra o balanço das contas, de forma a tornar mais simples os cálculos de fluxo. Nos pequenos comércios, era comum um volume muito grande de transações de entrada e saída, por isso, às vezes, mesmo com um fluxo muito grande de valores no dia, ao final, o saldo poderia ser zero. Então, a função dos registros era permitir ao administrador saber se tinha mais ou menos dinheiro do que ao iniciar o negócio. O conceito de transação, dentro de uma blockchain, captura justamente a ideia de que é mais fácil controlar os registros de https://www.istockphoto.com/br/portfolio/arenadesign?mediatype=photography 57 transações do que o saldo em si. Em um sistema fechado, como é o caso da blockchain, todo valor gerado em criptomoedas, desde o primeiro ciclo até hoje, precisa estar em algum endereço, em algum lugar. Na blockchain, não se registram os valores, mas o fluxo desses valores. Um endereço de blockchain não possui um saldo em bitcoins, mas uma diferença entre as entradas e as saídas, assim como em um livro-caixa. Os livros-caixa, por apresentarem um registro temporal das transações são, inclusive, utilizados para fins de declaração de impostos. Desde sempre, no entanto, havia a possibilidade de que tais livros pudessem ser fraudados, é claro, desde que com um pouco de perícia e muito trabalho manual. Com a migração para os sistemas digitais, aumentaram as possibilidades de fraudes. Uma blockchain, no entanto, funciona como um livro-razão aberto, encadeado automaticamente e à prova de fraudes retroativas. Cada transação só pode ser enviada de um livro para o outro, sem a possibilidade de sobras, exceto pelas taxas de transação (que serão enviadas para os mineradores responsáveis pelo registro da transação). Cada livro só pode ter entradas vindas de outros livros e todos os livros são imutáveis, uma vez que para uma pequena alteração em um registro, todos os demais seriam invalidados. Um sistema contábil computacionalmente à prova de falhas. Conforme explica Ulrich (2014): A invenção do bitcoin é revolucionária porque, pela primeira vez, o problema do gasto duplo pode ser resolvido sem a necessidade de um terceiro; bitcoin o faz distribuindo o imprescindível registro histórico a todos os usuários do sistema via uma rede peer-to-peer. Todas as transações que ocorrem na economia bitcoin são registradas em uma espécie de livro-razão, público e distribuído (...), o que nada mais é do que um grande banco de dados público, contendo o histórico de todas as transações realizadas. Novas transações são verificadas contra o blockchain de modo a assegurar que os mesmos bitcoins não tenham sido previamente gastos, eliminando assim o problema do gasto duplo. A rede global peer-to-peer, composta de milhares de usuários, torna-se o próprio intermediário; (ULRICH, 2014, p. 17) 58 A rede blockchain é formada por diferentes tipos de nodes e, embora todos partam do mesmo princípio, possuem especificidades de acordo com a função para qual foram desenvolvidos. No início da rede, o que existia era um único tipo de node, que minerava, validava transações e verificava o saldo restante dos endereços. Com a ampliação da rede, foram criados nodes com funções especializadas, de acordo com a necessidade dos usuários que operam cada node. Com o aumento da dificuldade de mineração, tornou-se inviável que usuários que queriam apenas validar transações, auxiliando
Compartilhar