50
Universidade Federal do Rio Grande do Norte Centro de Tecnologia Departamento de Engenharia de Computação e Automação Curso de Engenharia de Computação Votechain, uma solução mais segura, acessível e inovadora para as eleições, implementada com a tecnologia Blockchain Thúlio Mattheus Pereira de Sousa Natal-RN Junho de 2019

Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

Universidade Federal do Rio Grande do NorteCentro de Tecnologia

Departamento de Engenharia de Computação e AutomaçãoCurso de Engenharia de Computação

Votechain, uma solução mais segura, acessívele inovadora para as eleições, implementada

com a tecnologia Blockchain

Thúlio Mattheus Pereira de Sousa

Natal-RN

Junho de 2019

Page 2: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

Thúlio Mattheus Pereira de Sousa

Votechain, uma solução mais segura, acessível einovadora para as eleições, implementada com a

tecnologia Blockchain

Trabalho de Conclusão de Curso de Enge-nharia de Computação da Universidade Fe-deral do Rio Grande do Norte, apresentadocomo requisito parcial para a obtenção dograu de Bacharel em Engenharia de Compu-tação.

Orientador

Prof. Dr. Carlos Manuel Dias Viegas

Universidade Federal do Rio Grande do Norte - UFRNCentro de Tecnologia - CT

Departamento de Engenharia de Computação e Automação - DCACurso de Engenharia de Computação

Natal-RN

Junho de 2019

Page 3: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

Trabalho de Conclusão de Curso de Graduação sob o título "Votechain, uma solução mais

segura, acessível e inovadora para as eleições, implementada com a tecnologia Blockchain"

apresentada por Thúlio Mattheus Pereira de Sousa e aceita pelo Departamento de En-

genharia de Computação e Automação do Centro de Tecnologia da Universidade Federal

do Rio Grande do Norte, sendo aprovada por todos os membros da banca examinadora

abaixo especificada:

Prof. Dr. Carlos Manuel Dias ViegasPresidente

Departamento de Engenharia de Computação e Automação -DCA

Universidade Federal do Rio Grande do Norte - UFRN

Prof. Me. Sérgio Natan SilvaExaminador

Departamento de Engenharia de Computação e Automação -DCA

Universidade Federal do Rio Grande do Norte - UFRN

Prof. Me. Francisco Sales de Lima FilhoExaminador

Instituto Federal do Rio Grande do Norte - IFRN

Natal-RN, 24 de Junho de 2019

Page 4: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

Dedico este trabalho primeiramente aos meus pais João Tomé e Joana D’arc, aos meus

familiares mais próximos à quem sou grato por tudo, aos meus poucos e grandes amigos,

e por último mas não menos importante, à companheira que sempre me apoiou e me deu

forças principalmente nos momentos de dificuldade, Kamila Medeiros.

Page 5: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

Agradecimentos

Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais

ainda, pelas forças para enfrentar a vida quando a capacidade deixou de ser suficiente.

Dentre os parentes à quem mais devo agradecimento, destaco meus tios Márcia, Arthur

e Paula, por sempre terem me oferecido mais do que apenas o conhecimento necessário

para me destacar, mas principalmente pelo aprendizado humano e dedicação investida.

Além destes, um agradecimento especial é destinado a minha avó Maria Aparecida,

pois se meus tios muitas vezes se aproximaram de pais, esta senhora muitas vezes se

comportou como tal e por isso possuirá meus eternos agradecimentos.

Outra pessoa que merece uma lembrança destacada das demais é minha irmã Bruna.

Apesar de nunca termos sido exemplo desses clichês idealizados pela sociedade, com cer-

teza, à nossa maneira, sempre prezamos um pelo outro e por isso, a ela sou muito grato.

Apesar da distância e da personalidade complicada de ambos, alguém pelo qual possuo

admiração e devo muitos agradecimentos, é meu pai, o “Seu João”. Algumas qualidades

fundamentais à um homem como perseverança, trabalho duro e dedicação, sobram para

este senhor e o tornam alguém em quem se espelhar, até mesmo para mim.

Minha mãe. É, à esta cidadã devo inúmeros agradecimentos. Por todo o amor recebido,

pelos momentos de sacrifício vividos, na tentativa de me proporcionar coisas que a ti nunca

foram ofertadas, pelo enorme incentivo dado aos meus estudos e por todo o resto, agradeço

de coração. Tenho certeza de que não será a última vez que a farei orgulhosa.

Finalizando os agradecimentos, gostaria de lembrar da minha companheira Kamila.

Mesmo sendo complicado, crítico e exigente, tenho a sorte de ter uma pessoa incrivelmente

alegre, otimista e amorosa ao meu lado. “Bacorinha”, agradeço por você estar comigo nos

momentos alegres e mas ainda nos complicados, espero não parar de te orgulhar nunca.

Menções honrosas são dadas à meus familiares: Belise, Ketura, Miumo, Paulo, Sarah

e vovó Albertina, meus amigos de infância Thiago, André, Danyllo e Arthur, meus amigos

de curso Isaac, Dmytres e Judson, meus amigos de trabalho Adryel, Mateus, Lailson e

Diogo, além do meu orientador Viegas. Obrigado a todos, vocês também são parte disso.

Page 6: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

“Ter em si próprio uma confiança exagerada é um excelente treino intelectual.”

Tristan Bernard

Page 7: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

Votechain, uma solução mais segura, acessível einovadora para as eleições, implementada com a

tecnologia Blockchain

Autor: Thúlio Mattheus Pereira de Sousa

Resumo

Este trabalho apresenta uma alternativa ao atual modelo de votação executado no Brasil,

através do uso de uma blockchain. As técnicas utilizadas foram baseadas na blockchain do

Bitcoin e implementadas com adaptações, utilizando a linguagem de programação Python

e o framework de desenvolvimento Web, Django. A arquitetura do sistema é baseada em

uma rede Ponto-a-Ponto, em que não existe um servidor centralizador para guardar todas

as informações do cliente como nas aplicações comuns, em vez disso, todos os nós da

rede, em conjunto, são responsáveis por tal tarefa. Diversas estratégias como criptografia

assimétrica, criptografia de senhas na aplicação cliente e geração de assinaturas digitais,

foram utilizadas para garantir a segurança exigida durante um processo eleitoral. Os

resultados alcançados são observados em tempo real, ao se simular uma votação utilizando

contêineres em Docker para representar diferentes nós e alguns usuários conectados para

simular os eleitores. Pretende-se dar continuidade ao trabalho realizado, implementando

diversas melhorias que tornem o sistema ainda mais robusto e confiável.

Palavras-chave: Blockchain, Eleições, Criptografia, Segurança de Redes.

Page 8: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

Votechain, a safer solution, accessible and innovative toelections, implemented with Blockchain technology

Author: Thúlio Mattheus Pereira de Sousa

Abstract

This work introduces a alternative to the current model of votation executed in Brazil,

through the use of a blockchain. The adopted techniques were based on Bitcoin block-

chain and implemented with adaptations, using the programming language Python and

the web development framework Django. The system architecture was based in a Peer-

To-peer network, where there is no centralizer server to store all information of client as

in common applications, instead, all nodes of network together, are responsible to such

task. Several strategies like asymmetric encryption, password encryption on client appli-

cation and digital signature generation, were utilized to guarantee the required security

during the electoral process. The achieved results are observed in real time by simula-

ting a votation using Docker containers to represent different nodes and some connected

users to simulate the electors. The intention is to continue the work, implementing many

improvements that make the system even more robust and confiable.

Keywords : Blockchain, Elections, Cryptography, Computer Network Security.

Page 9: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

Lista de figuras

1 Exemplo da blockchain de um nó. . . . . . . . . . . . . . . . . . . . . . p. 15

2 A blockchain anterior, após uma alteração nos dados . . . . . . . . . . p. 16

3 Exemplo da blockchain como lista distribuída de blocos . . . . . . . . . p. 17

4 Arquitetura de rede Ponto a Ponto . . . . . . . . . . . . . . . . . . . . p. 18

5 Consumo de energia do Bitcoin num período de um ano . . . . . . . . . p. 19

6 Exemplo de Cifragem de Mensagem com Criptografia Simétrica . . . . p. 22

7 Exemplo de Cifragem de Mensagem com Criptografia Assimétrica . . . p. 23

8 Exemplo de Assinatura Digital com Criptografia Assimétrica . . . . . . p. 23

9 Exemplo de Função Hash . . . . . . . . . . . . . . . . . . . . . . . . . p. 24

10 Estrutura da Votechain . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 26

11 Diagrama de Implantação UML das aplicações . . . . . . . . . . . . . . p. 28

12 Diagrama Entidade-Relacionamento da votechainClient . . . . . . . . . p. 28

13 Diagrama Entidade-Relacionamento da votechainNode . . . . . . . . . p. 29

14 Exemplo de chave privada . . . . . . . . . . . . . . . . . . . . . . . . . p. 34

15 Verificação da assinatura digital . . . . . . . . . . . . . . . . . . . . . . p. 36

16 Estrutura da rede criada . . . . . . . . . . . . . . . . . . . . . . . . . . p. 39

17 Tela de cadastro de um eleitor na aplicação ‘Cliente 1’ . . . . . . . . . p. 40

18 Tela do ‘Nó 1’ informando que sua cadeia de blocos está vazia . . . . . p. 40

19 Tela do ‘Cliente 1’ mostrando a criação de um voto . . . . . . . . . . . p. 41

20 Tela do ‘Cliente 1’ após o voto, mostrando a lista de votos já realizados p. 41

21 Tela do ‘Cliente 1’ impedindo o eleitor de votar com dados de outra pessoa p. 42

22 Tela do ‘Cliente 2’ mostrando sua lista de nós conhecidos . . . . . . . . p. 42

Page 10: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

23 Tela do ’Nó 2’ mostrando suas informações básicas . . . . . . . . . . . p. 43

24 Tela que mostra as conexões do ‘Nó 1’ com o ‘Nó 2’ e o ‘Nó 3’ . . . . . p. 43

25 Resposta dada pelo ’Nó 1’ ao ’Nó 4’ da requisição de sua blockchain, em

JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 44

26 Tela do ‘Nó 4’ mostrando a lista com todos os seus blocos de votos . . p. 45

Page 11: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

Lista de abreviaturas e siglas

P2P – Peer to Peer

API – Application Programming Interface

REST – Representational State Transfer

HTTP – Hypertext Transfer Protocol

JSON – JavaScript Object Notation

UML – Unified Modeling Language

DER – Diagrama Entidade-Relacionamento

Page 12: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

Sumário

1 Introdução p. 13

1.1 Motivação e Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 13

1.2 Estrutura do Trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 14

2 Referencial Teórico p. 15

2.1 Blockchain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 15

2.2 Django . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 20

2.2.1 Django Rest Framework . . . . . . . . . . . . . . . . . . . . . . p. 20

2.2.2 JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 21

2.2.3 Celery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 21

2.3 Criptografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 22

2.3.1 Criptografia Simétrica . . . . . . . . . . . . . . . . . . . . . . . p. 22

2.3.2 Criptografia Assimétrica . . . . . . . . . . . . . . . . . . . . . . p. 23

2.3.3 Função Hash . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 24

2.4 Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 25

2.4.1 Docker Compose . . . . . . . . . . . . . . . . . . . . . . . . . . p. 25

3 Desenvolvimento p. 26

3.1 Estrutura da Votechain . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 26

3.1.1 Definição do escopo das aplicações . . . . . . . . . . . . . . . . p. 26

3.1.2 Modelagem do Banco de Dados . . . . . . . . . . . . . . . . . . p. 28

3.1.2.1 Blocos . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 30

Page 13: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

3.1.3 Implementação do escopo da votechainClient . . . . . . . . . . . p. 33

3.1.4 Implementação do escopo da votechainNode . . . . . . . . . . . p. 35

3.1.4.1 Mineração dos Blocos . . . . . . . . . . . . . . . . . . p. 37

4 Resultados p. 39

5 Conclusão p. 46

5.1 Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 46

Referências p. 47

Page 14: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

13

1 Introdução

O protocolo entitulado de “Bitcoin: A Peer-to-Peer Electronic Cash System” (NAKA-

MOTO, 2008), que livremente traduzindo para o português significa “Bitcoin: Um Sistema

Financeiro Eletrônico Ponto-a-Ponto”, foi responsável por descrever o Bitcoin e suas de-

pendências, construindo assim, a primeira aplicação com a tecnologia Blockchain (GOYAL,

2018).

Nos anos seguintes, o Bitcoin obteve uma valorização grande, chegando ao ponto

de no fim de 2017 ter sua unidade valendo R$ 69.700,00 (BITCOIN, 2018). Por causa

de todo esse sucesso, a blockchain foi diretamente atrelada à criação de moedas digitais

seguras, sendo novamente utilizada como base do Ethereum, Litecoin e todas as outras.

Entretanto, essa tecnologia tem potencial para ser utilizada em diversas outras áreas,

como saúde, entretenimento e transportes (MARR, 2018).

1.1 Motivação e Objetivos

Um dos maiores problemas durante a época de eleições, está diretamente relacionado

à desconfiança gerada na população pela forma como o processo acontece (SILVA, 2018).

Uma das queixas do modelo atual, se deve à dificuldade em obter transparência no

processo inteiro, ao se restringir o grupo verificador dos votos, fazendo com que alguns

acreditem até mesmo que o modelo antigo -o voto impresso- pudesse ser uma melhor

solução, como afirma o professor doutor do Instituto de Computação da Universidade

Estadual de Campinas e coordenador de equipes nos testes públicos de segurança de 2012

e 2017 (ARANHA, 2018), (MONTE, 2018).

Alguns países como Japão e Estados Unidos já iniciaram os experimentos de migração

do modelo eleitoral atual, para um modelo baseado em blockchain (BEEDHAM, 2018). No

fim do ano passado a empresa ABFintechs realizou a primeira eleição feita com blockchain

no Brasil (HAMIDEH, 2019). Ao se analisar as notícias e a busca crescente pela adoção do

Page 15: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

14

modelo proposto, este trabalho terá grande importância no atual estado de compreensão

da tecnologia.

A proposta deste trabalho é fazer uso dos benefícios trazidos pela blockchain na esfera

eleitoral, a fim de prover uma alternativa segura que possivelmente cause menos descon-

fiança e mais inclusão para a população. O modelo proposto se baseia em:

• Garantir a privacidade dos eleitores;

• Oferecer camadas de verificações que detectem e invalidem qualquer alteração feita

nos votos originais;

• Oferecer transparência ao processo inteiro;

• Permitir a possibilidade de uma votação prática e à distância.

1.2 Estrutura do Trabalho

A metodologia utilizada para a realização do trabalho corrente, foi baseada em uma

pesquisa que se deu através da leitura de diversos artigos, tutoriais e textos explicativos,

citados ao longo do documento.

Este trabalho é constituído fundamentalmente de 5 capítulos, este primeiro busca

mostrar ao leitor, os objetivos e motivações da criação da plataforma Votechain. O segundo

capítulo oferece o embasamento teórico das tecnologias utilizadas no desenvolvimento da

plataforma como Django, Docker e Blockchain. O terceiro capítulo é responsável por

explicar todo o desenvolvimento realizado, nele serão apresentadas dentre outras coisas,

a estrutura das aplicações criadas, os modelos dos bancos de dados utilizados e uma

explicação de como se deu a mineração dos blocos. O capítulo seguinte trata dos resultados

obtidos, mostrando algumas telas da aplicação e explicando as operações sendo realizadas.

Por fim, o último capítulo é a conclusão, onde se realiza uma breve análise dos resultados

obtidos, comparando-os com os previstos no início do projeto, além de citar os trabalhos

futuros que serão realizados, com a finalidade de melhorar a Votechain e torná-la mais

robusta.

Page 16: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

15

2 Referencial Teórico

Para se desenvolver um sistema robusto e de maior complexidade, é comum os arqui-

tetos de software utilizarem ferramentas auxiliares como frameworks de desenvolvimento

Web, gerenciadores de tarefas assíncronas, agendadores automáticos de tarefas e bancos

de dados. A plataforma Votechain possuirá todas as necessidades citadas anteriormente,

além de outras que serão introduzidas nas próximas seções.

2.1 Blockchain

A Blockchain é uma lista distribuída de registros, conhecidos como blocos, interco-

nectados com o uso de criptografia (TAPSCOTT; TAPSCOTT, 2016). Cada bloco da cadeia

é geralmente constituído por seu identificador, o hash do bloco anterior, o hash do bloco

atual, a hora de criação do bloco (timestamp), os dados à serem guardados e um número

inteiro conhecido por Nonce que está relacionado à dificuldade do bloco e será melhor

explicado na Seção 3.1.2.1. Uma estrutura semelhante a esta é representada na Figura 1.

Figura 1: Exemplo da blockchain de um nó.

Fonte: https://anders.com/blockchain/blockchain.html

Page 17: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

16

Ao analisar a Figura 1, é possível observar que o bloco 2 possui o hash anterior

igual ao hash atual do bloco 1. Além disso, nota-se que todos os hashs dos dois blocos,

começam com alguns caracteres iguais à zero. Essa estratégia é frequentemente utilizada

como definição da dificuldade do bloco e está diretamente relacionada ao atributo nonce.

Modificações nos valores de qualquer um dos atributos do bloco, geram uma alteração

em seu hash atual, tornando a blockchain inválida. Por tal motivo, sua estrutura se mostra

resistente à modificações. Um exemplo desse comportamento é ilustrado na Figura 2.

Figura 2: A blockchain anterior, após uma alteração nos dados

Fonte: https://anders.com/blockchain/blockchain.html

Percebe-se que o hash atual do bloco 2 não possui a mesma quantidade de caracteres de

antes, indicando que houve alguma alteração nos dados do bloco e, portanto, a blockchain

se tornou inválida.

Os exemplos mostrados nas Figuras 1 e 2 estão relacionados à apenas uma instância

da blockchain, porém, pelo fato desta ter sido definida como uma lista distribuída de

blocos, algumas operações adicionais precisam ser realizadas. Uma ilustração de como se

daria essa distribuição mencionada, pode ser vista na Figura 3.

Page 18: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

17

Figura 3: Exemplo da blockchain como lista distribuída de blocos

Fonte: https://anders.com/blockchain/distributed.html

Partindo desse princípio, um pré-requisito fundamental para a construção de uma

blockchain é a utilização de uma rede que permita a interconexão de vários computadores

(LISK, 2019). Dessa forma, eles poderão trocar informações diretamente com facilidade.

Fazendo uma análise das principais arquiteturas de rede existentes, percebe-se que

a mais recomendada neste caso é a Peer to Peer, abreviada como P2P e traduzida

como Ponto a Ponto (BASSOTTO, 2018). Esta é caracterizada por substituir o modelo

utilizado na grande maioria das aplicações, o cliente-servidor, por um modelo onde os nós,

nome dado aos computadores da rede, podem funcionar tanto como clientes quanto como

servidores. Dessa maneira, cada nó torna-se independente de outros nós, entretanto, no

caso da P2P utilizada na Blockchain, os nós devem buscar o contínuo compartilhamento

de dados com o resto da rede, evitando a possibilidade de tornarem-se obsoletos. Um

exemplo da arquitetura P2P é visto na Figura 4.

Page 19: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

18

Figura 4: Arquitetura de rede Ponto a Ponto

Fonte: https://medium.com/rodrigo-soares/blockchain-visão-arquitetural-4df7363fd42b

Essa arquitetura remove problemas como a existência de um ponto central de falha

que possa ser explorado por invasores mal intencionados (VU; LUPU; OOI, 2009). Além

disso, remove problemas de disponibilidade, pois caso algum nó deixe de existir ou torne-

se indisponível, outros nós possuirão uma cópia de suas informações e o substituirão.

Mesmo a blockchain possuindo diferentes versões individuais em cada nó, deve se fazer

presente uma forma de escolher a melhor de todas, a fim de resolver problemas como o

mostrado na Figura 3. Nela pode-se ver que somente a blockchain do nó ’A’ é válida,

tornando-se assim a melhor da rede e devendo ser utilizada por todos os nós da mesma.

Um algoritmo de consenso que geralmente é utilizado para definir qual a melhor

blockchain da rede, é o da maior cadeia válida (DEXTER, 2018). Esse algoritmo considera

a blockchain do nó que possui a maior quantidade de blocos como a melhor, tendo ainda

a restrição adicional de que mais da metade dos nós da rede a considere válida.

A blockchain possui dois tipos diferentes de usuários, os nós e os clientes (SARDAN,

2018). Os clientes têm o intuito de utilizar apenas as informações da blockchain que os

interessam, não precisando portanto de uma cópia inteira da mesma.

Por outro lado, os nós são responsáveis por guardar uma cópia inteira da melhor

cadeia, além de possuírem a possibilidade de minerar novos blocos na mesma. Mineração

é o nome dado à criação e indexação de novos blocos ao fim da blockchain.

A dificuldade dos blocos da blockchain está relacionada à mineração do próprio bloco.

Essa dificuldade é baseada na busca de um nonce que torne o hash atual aceitável. Ten-

Page 20: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

19

tando explicar de uma maneira simplificada, suponha que caso a dificuldade de mineração

de um bloco seja 4, ele precisa de quatro zeros como caracteres iniciais no seu hash atual.

Caso ela aumente para 8, passará a precisar de oito zeros. Essa dificuldade pode aumentar

ou diminuir, dependendo da função utilizada.

Geralmente, com o aumento de blocos na cadeia, a dificuldade de mineração tende a

crescer, tornando-se algo demorado e caro por necessitar de um maior poder computaci-

onal e um grande aumento de energia para se obter os mesmos resultados.

Para tornar o processo de criação de blocos atrativo aos mineradores, nome dado aos

criadores dos blocos, algoritmos de consenso foram desenvolvidos. Um dos mais conhe-

cidos é o Proof of Work, em português, Prova de Trabalho (TAR, 2018). Esse algoritmo

recompensa o primeiro minerador à resolver a função matemática, com algo de seu inte-

resse. No caso do Bitcoin, o primeiro minerador que consegue gerar um novo bloco válido,

recebe alguns satoshis, menor unidade monetária da criptomoeda (BITCOIN.ORG, 2019).

Técnicas como essa têm fundamental importância no ecossistema da blockchain, por

oferecer mais benefícios aos que “jogam limpo” e prejudicar os que tentam burlar as regras,

já que a maneira mais conhecida de se obter vantagem é possuir um poder computacional

maior do que metade da rede, problema conhecido como ataque dos 51 por cento (S.,

2018). Entretanto, pelo valor gasto de energia na posse de tal poder computacional, ser

maior do que o valor ganho ao minerar os blocos, a prática se torna desencorajada. Um

exemplo do alto consumo de energia gerado na mineração pode ser visto na Figura 5.

Figura 5: Consumo de energia do Bitcoin num período de um ano

Fonte: https://digiconomist.net/bitcoin-energy-consumption

Page 21: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

20

2.2 Django

Django (DJANGO, 2019) é um framework bastante utilizado no desenvolvimento de

aplicações Web com Python. Frameworks Web são bibliotecas que oferecem um conjunto

de funções básicas para acessar a rede, já implementadas. Além disso, o Django se destaca

por algumas características como:

• Disponibilização de funcionalidades voltadas para segurança quase nunca ofertadas,

mas extremamente recorrentes, como controle de acesso, autenticação do usuário e

tratamento modular da verificação das senhas;

• Estrutura de projeto baseada em aplicativos, permitindo maior desacoplamento e

reuso das aplicações construídas;

• Fornecimento de uma conexão padrão já configurada ao SQLite, banco de dados

relacional para persistir os dados dos modelos do projeto;

• Maior comunidade de desenvolvedores dentre todos os frameworks Web para Python,

aumentando com isso a quantidade de soluções pré-existentes para diversas aplica-

ções.

Por esses e outros motivos que serão melhores compreendidos ao longo deste docu-

mento, o Django foi utilizado para configuração e desenvolvimento do projeto, permitindo

assim a criação das interfaces de usuário que serão utilizadas pelos eleitores e pelos nós

da blockchain.

2.2.1 Django Rest Framework

API é um conjunto de rotinas e padrões de programação que permitem o acesso à

dados de uma aplicação sem uma ligação direta com seu código. Já REST é um estilo

de arquitetura de software baseado em verbos HTTP , que tem a finalidade de integrar

aplicações pela Web. Ou seja, uma API REST permite que os dados de uma aplicação

sejam acessados de maneira indireta com o intuito de se integrarem a outra aplicação

Web.

O Django REST Framework (VINCENT, 2018) é um aplicativo que oferece diversas

funcionalidades para se construir uma aplicação deste tipo, e por tal razão foi utilizado

para permitir o acesso por parte dos eleitores, aos dados dos nós da blockchain sem

comprometê-los.

Page 22: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

21

2.2.2 JSON

A API facilitará o compartilhamento dos dados, dado que será baseada em verbos

HTTP como o GET, para consultar dados, ou o POST, para adicionar registros. Além

disso, o formato dos dados manipulados será o JSON . Alguma das vantagens desse

formato em comparação aos outros disponíveis, são: maior facilidade de leitura e escrita,

maior velocidade na execução e transporte de dados, menor tamanho dos arquivos gerados

e estrutura baseada em objetos. Um exemplo desse formato pode ser visto no pseudocódigo

abaixo.

{

"numero" : 123 ,

" f r a s e " : "Uma␣ f r a s e ␣de␣ t e s t e " ,

" decimal " : 1 . 5 ,

" vetorDeFrutas " : [ "Uva" , "Maca" , "Laranja " ] ,

" d i c i o n a r i o " : {

" a t r ibu to1 " : "Qualquer␣ c o i s a " ,

" f l a g " : true

}

}

2.2.3 Celery

Celery (ALVES, 2015) é uma fila de tarefas assíncronas que se baseia na passagem

distribuída de mensagens e é usada como mecanismo para distribuir o trabalho entre

threads ou máquinas. Ela é focada nas operações em tempo real mas também suporta

agendamento de tarefas.

A ferramenta se fez necessária no momento que os nós realizavam o broadcast dos vo-

tos, mas concorrentemente, precisavam continuar acessíveis para consulta na API REST.

De maneira similar, a geração dos blocos de votos precisava ser executada periodicamente,

e por tal motivo decidiu-se por utilizar o agendador de tarefas do Celery, o Celery Beat

(BARTOSZ, 2018).

Como foi dito anteriormente, o Celery se baseia na passagem distribuída de men-

sagens, e para tal, necessita de um intermediário para enviá-lo as mensagens. O broker,

nome dado à esses intermediários, utilizado foi o RabbitMQ (CELERY, 2019), indicado

pela própria ferramenta em sua documentação.

Page 23: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

22

2.3 Criptografia

A segurança da informação sempre foi indispensável à vida das pessoas, isso pode ser

comprovado em atitudes como: realizar treinos fechados à imprensa antes de um grande

jogo, não divulgar sua senha do banco para ninguém, ou até mesmo rasgar bilhetes confi-

denciais logo após sua leitura. Por tal motivo, um dos principais critérios para se avaliar

a qualidade de um sistema, é sua segurança.

Um dos principais artifícios para se garantir tal atributo, é fazer uso de criptografia.

Criptografia é o ato de codificar e decodificar dados, a fim de dificultar sua real interpre-

tação por pessoas não autorizadas (STALLINGS, 2014). Os principais tipos de criptografia

utilizados na grande maioria das aplicações são: Criptografia Simétrica, Criptografia As-

simétrica e Função Hash (KESSLER, 2019).

2.3.1 Criptografia Simétrica

A criptografia simétrica, ilustrada na Figura 6, é caracterizada pela utilização de

apenas uma chave tanto para a encriptação da mensagem original, quanto para a decodi-

ficação da mensagem encriptada. O principal atributo desta metodologia é a garantia de

privacidade, dado que apenas os detentores da chave conseguirão ter acesso à mensagem

original.

Figura 6: Exemplo de Cifragem de Mensagem com Criptografia Simétrica

Fonte: https://en.wikipedia.org/wiki/Cryptography

Page 24: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

23

2.3.2 Criptografia Assimétrica

A criptografia assimétrica, ilustrada na Figura 7, diferentemente da anterior faz uso

de duas chaves, uma que será usada pelo remetente e cifrará a mensagem original e outra

que o destinatário usará com o intuito de decriptar a mensagem recebida. Qualquer uma

das chaves é capaz de realizar as operações especificadas, entretanto, apenas a outra será

capaz de realizar a operação inversa, graças as propriedades matemáticas que as definem.

Figura 7: Exemplo de Cifragem de Mensagem com Criptografia Assimétrica

Fonte: https://en.wikipedia.org/wiki/Cryptography

Outra aplicação importante da criptografia assimétrica é a geração de assinaturas

digitais. Estas são baseadas em sua chave privada e podem ser verificadas por qualquer

um que possua a respectiva chave pública, como ilustrado na Figura 8.

Figura 8: Exemplo de Assinatura Digital com Criptografia Assimétrica

Fonte: https://en.wikipedia.org/wiki/Cryptography

Page 25: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

24

Além disso, essa técnica garante a autenticidade da mensagem, pois Bob conseguiu

verificar a assinatura ao utilizar a chave pública de Alice, além do não-repúdio, caracterís-

tica de algo que não se pode negar, pois apenas a chave privada de Alice pode ter gerado

aquela assinatura. Por este motivo, esse é um dos principais conceitos da blockchain e será

usado para aumentar a segurança do sistema desenvolvido.

2.3.3 Função Hash

O último tipo de criptografia bastante utilizado é a Função Hash. Esta técnica encripta

uma mensagem de uma maneira tal, que esta não pode retornar ao seu formato original

por intermédio de uma função inversa, pelo fato da primeira função ser capaz de gerar

um mesmo resultado para diferentes mensagens de entrada. Uma demonstração de seu

uso pode ser visualizada na ilustração abaixo.

Figura 9: Exemplo de Função Hash

Fonte: http://learningspot.altervista.org/cryptographic-hash-functions/

Apesar da mensagem não poder retornar ao seu estado original, a verificação do resul-

tado gerado para uma dada mensagem, é facilmente obtido ao se aplicar a tal mensagem

na função hash. Este conceito será utilizado na criação e verificação das assinaturas ci-

tadas anteriormente, além de ser a estratégia para se autenticar as senhas de acesso e

chaves privadas dos eleitores, salvando no banco de dados apenas seus hashs, realizando

uma perfeita verificação sem ter acesso à informação original.

Page 26: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

25

2.4 Docker

Docker (DOCKER, 2019) é uma ferramenta utilizada para tornar os processos de cons-

trução, execução e implantação de aplicações, mais simplificados, através da criação de

uma imagem desta aplicação.

As imagens do Docker são pacotes que contém todas as dependências necessárias

para se construir à aplicação nas quais foram baseadas. Caso ainda esteja complicado de

entender, pense nos executáveis utilizados para se instalar um programa no computador,

a operação realizada é similar.

Diferentemente dos executáveis, essas imagens podem ser usadas em diversos sistemas

operacionais, a fim de recriarem a aplicação original. Isso acontece graças aos Containers

do Docker.

A finalidade dos containers é isolar a aplicação empacotada, do resto do sistema, a

fim de torná-la reusável em qualquer outro computador que possua o Docker instalado.

Além disso, mais de um container pode ser utilizado para rodar uma mesma imagem,

podendo com isso serem entendidos como instâncias da aplicação.

2.4.1 Docker Compose

Em determinadas situações, é necessário isolar um conjunto de aplicações conecta-

das, ao invés de apenas uma aplicação e com esse intuito foi criado o Docker Compose

(TUNGKA, 2018).

Esta ferramenta é responsável por rodar ambientes com múltiplos containers integra-

dos, sendo capaz de replicar uma infraestrutura de serviços inteira.

No corrente trabalho, a ferramenta foi fundamental na simulação de uma votação real,

criando uma rede conectada por diversos serviços.

Page 27: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

26

3 Desenvolvimento

3.1 Estrutura da Votechain

O primeiro passo para se construir a Votechain é definir sua estrutura. Como foi dito

no capítulo 2, uma blockchain possui dois tipos de usuários, nós e clientes, no caso da

Votechain não será diferente. Por este motivo, ela possuirá duas aplicações complementa-

res, uma que deve ser usada pelos eleitores, a votechainClient, e outra que deve ser usada

pelos nós da rede, a votechainNode. A Figura 10 ilustra essa estrutura.

Figura 10: Estrutura da Votechain

Fonte: Autoria Própria

3.1.1 Definição do escopo das aplicações

Cada aplicação possuirá uma série de funcionalidades distintas, que visam compreen-

der as necessidades de seus usuários. Vejamos as que estão relacionadas à votechainClient :

• Permitir registro dos eleitores na aplicação e gerar seu par de chaves;

• Permitir que o eleitor vote em um dado cargo, caso ele ainda não o tenha feito;

• Validar a identidade do eleitor e seu voto. Caso tudo esteja válido, gerar uma

assinatura digital para o voto;

• Enviar voto, o número do titulo do eleitor e a assinatura gerada para o primeiro

nó conhecido que esteja disponível;

• Guardar apenas os dados da votechain relacionados ao eleitor;

Page 28: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

27

Buscando atender as necessidades citadas, foi decidido que uma aplicação Web seria

utilizada.

Por outro lado, a votechainNode terá uma perspectiva mais voltada aos nós da rede,

por isso, terá às seguintes tarefas:

• Estar disponível à aplicação dos eleitores, a fim de receber, validar e guardar os

votos;

• Reenviar os votos válidos para todos os nós conhecidos;

• Minerar blocos de votos de maneira periódica;

• Tornar sua blockchain disponível, em formato acessível, aos outros nós;

• Criar novos blocos com os votos que ainda não estão na blockchain;

• Verificar se algum nó conhecido possui uma blockchain mais atualizada que a

sua, em caso positivo, agir de acordo com as seguintes possibilidades:

– Caso I) A blockchain do nó conhecido é válida e possui um bloco a mais

que a sua. Nesse caso, deve-se incorporar este último bloco à sua cópia da

blockchain.

– Caso II) A blockchain do nó conhecido é válida e possui mais de um bloco

a mais que a sua. Nesse caso, deve-se substituir a sua cópia da blockchain

pela do nó conhecido.

• Guardar uma cópia completa da melhor blockchain da rede;

Diferentemente da aplicação cliente, a votechainNode terá uma alta taxa de troca

de informações, graças aos diversos clientes conectados, e à conexão feita com os outros

nós conhecidos. Por causa disso, é fundamental utilizar uma maneira rápida e fácil de se

compartilhar dados. Ao analisar essas informações, foi decidido que uma API REST seria

a forma mais recomendada para a aplicação dos nós.

O Python possui uma biblioteca para se conectar com APIs e manipular arquivos

JSON, a Requests Library(RONQUILLO, 2019). Esta foi utilizada durante o desenvolvi-

mento da Votechain. Após essa estruturação e definição do escopo da Votechain, vejamos

como ficou o Diagrama de Implantação UML de cada uma das aplicações na Figura 11.

Page 29: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

28

Figura 11: Diagrama de Implantação UML das aplicações

Fonte: Autoria Própria

3.1.2 Modelagem do Banco de Dados

Assim foi definida a necessidade de uma aplicação para os eleitores e outra para os

nós, haverá também um banco de dados distinto para cada aplicação.

O Diagrama Entidade-Relacionamento mostrado na Figura 12, dá a ideia de como

será o banco de dados da votechainClient.

Figura 12: Diagrama Entidade-Relacionamento da votechainClient

Fonte: Autoria Própria

Page 30: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

29

A aplicação dos eleitores conterá três entidades principais: Nós, Votos e Usuários.

Vejamos uma breve explicação de cada uma delas.

A entidade Nó é constituída, além de seu id, de apenas três atributos, o IP e a porta

do nó conhecido, e uma chave estrangeira para a tabela Usuario, simbolizando a conexão

do dado eleitor com o nó.

Já a entidade Voto possui apenas informações relacionadas ao candidato que foi vo-

tado, ao usuário que realizou o voto e à assinatura digital gerada pela aplicação.

Por fim, a entidade Usuario contém somente informações do próprio eleitor. Por outro

lado, dois de seus atributos merecem uma atenção especial, a senha e a chave privada.

Ambas, não poderiam ser salvas no banco em texto limpo, pois isso seria caracterizado

como uma grave falha de segurança.

Para resolver o problema encontrado, ao invés de salvar a senha e a chave privada

no banco, apenas o resultado da função hash SHA-256 (BELLET, 2018) aplicada à cada

um dos atributos mencionados foi salvo no banco. Dessa forma, quando o usuário for se

autenticar no sistema, a aplicação usará a senha inserida no login como entrada dessa

mesma função hash e comparará com o resultado salvo no banco, caso os valores sejam

iguais, o usuário terá acesso ao sistema. Processo semelhante será realizado com a chave

privada.

Após definir o modelo da aplicação cliente, o próximo passo é analisar o DER da

votechainNode.

Figura 13: Diagrama Entidade-Relacionamento da votechainNode

Fonte: Autoria Própria

Page 31: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

30

O diagrama da Figura 13 possui diversas semelhanças com o da Figura 12 . A primeira

delas é que as entidades Nó e Voto posuem exatamente os mesmos atributos, além da

ausência do atributo idUsuario, dado que esta aplicação não necessitará de autenticação,

o sistema foi construído de maneira à automatizar as tarefas mais cruciais, explicadas

posteriormente, garantindo com isso sua segurança.

Apesar da ausência citada na tabela Voto, um novo atributo se fez presente, o idBloco.

Para um eleitor, não faz diferença em qual bloco o voto dele estará na blockchain, entre-

tanto, para os nós, definir isso é fundamental e motiva a inclusão deste relacionamento.

3.1.2.1 Blocos

A única entidade que ainda necessita de análise é Bloco. Esta possui os mesmos

atributos definidos na primeira seção do capítulo 2, mas algumas considerações extras

devem ser realizadas. Em primeiro lugar, explicaremos a função usada para calcular a

dificuldade.

Esse cálculo se baseará na quantidade de tempo gasto nas minerações dos últimos

blocos, considerando que o tempo médio ideal para se minerar um bloco, seja de 3 minutos.

Apesar de grande parte do trabalho ter se baseado na blockchain do Bitcoin, essa definição

de tempo foi completamente arbitrária.

Vejamos como foi implementada a função para então a explicarmos.

# Funcao para re tornar a d i f i c u l d a d e a t ua l i z a da do b l oco a t ua l

def r e to rneDi f i cu ldadeB locoAtua l ( ) :

# A cada n="tamanhoBlocosPorRodada " , a t u a l i z a r a d i f i c u l d a d e

tamanhoBlocosPorRodada = 5

# Di f i cu l dade i n i c i a l da b l o c k cha in

se ( quant idadeBlocosBlockchain = 0 ) :

r e t o rne 4

senao :

# No caso de ser uma nova rodada

# A d i f i c u l d a d e dos b l o co s des ta nova rodada deve ser a jus tada

Page 32: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

31

se ( blocoAtualPertenceNovaRodada ) :

# Diferenca de tempo entre o u l t imo e o

# primeiro b l oco da rodada an t e r i o r

diferencaTempo = horaUltBlocoRodAnt − horaPriBlocoRodAnt

# Caso demore menos de 3 minutos por b l oco

se ( diferencaTempo < 3 minutos por b loco ) :

r e t o rne ( d i f i c u l dadeB l o coAnt e r i o r + 1)

# Caso demore menos de 3 minutos por b l oco

senao se ( diferencaTempo > 5 minutos por b loco ) :

r e t o rne ( d i f i c u l dadeB l o coAnt e r i o r − 1)

# Caso nenhum caso an t e r i o r tenha s ido atendido

r e t o rne d i f i c u l dadeB l o coAnt e r i o r

Como o pseudocódigo anterior demonstra, existe uma verificação da necessidade de

atualização dos blocos na aplicação. Caso o bloco atual seja múltiplo de 5, verifique:

1. Caso o tempo gasto entre o primeiro bloco da última rodada e o último bloco da

mesma rodada, seja inferior à 3 minutos por bloco, quer dizer que está muito fácil

minerar, então aumente a dificuldade em 1.

2. Caso o tempo gasto no mesmo período, seja superior à 5 minutos por bloco, quer

dizer que está muito difícil minerar, então diminua a dificuldade em 1.

3. Caso o tempo gasto no mesmo período, esteja entre 3 e 5 minutos por bloco, quer

dizer que a dificuldade está boa, então use a anterior.

Outro atributo interessante da entidade Bloco é o hashBlocoAtual. Ele é baseado em

todos os outros atributos dessa entidade, exceto o Id, ou seja, se o valor de qualquer

atributo mudar, o hash atual também mudará. Além disso, ele precisa ter os N primeiros

caracteres iguais à zero, onde N é igual à dificuldade do bloco.

A função utilizada para definir esse hash atual é bem simples, mas bastante custosa.

Vejamos um pseudocódigo para explicar seu cálculo.

Page 33: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

32

# Atr i bu to s com va l o r e s d e f i n i d o s antes da cr iacao do b l oco

i n d i c e = ind i c e do bloco an t e r i o r + 1

votes = l i s t a dos votos em JSON

hashBlocoAnter ior = Hash atua l do b loco an t e r i o r

hashBlocoAtual = 11111111111111111111

# Atr i bu to s d e f i n i d o s antes da i t e r a cao

nonce = 0

d i f i c u l d ad e = funcao de d i f i c u l d ad e

hashBlocoAtual = hashBlocoAtual

# N i gu a l a d i f i c u l d a d e

enquanto ( pr ime i rosNCaracte re sDi f e rentesDeZero ( hashBlocoAtual ) ) :

nonce = nonce + 1

timestamp = hora e data a tua i s

# Lis ta com os a t r i b u t o s do b l o co

l i s t aA t r i b u t o s = [

ind i c e ,

dateToStr ing ( timestamp ) ,

votes ,

nonce ,

d i f i c u l dade ,

hashBlocoAnter ior

]

hashBlocoAtual = encryptSha256 ( concatenate ( l i s t aA t r i b u t o s ) )

Como pudemos ver, o nonce é basicamente um incrementador que só para de crescer

quando os primeiros N caracteres do hash atual do bloco são iguais à zero. Essa tarefa

pode parecer simples, mas com o crescimento da dificuldade, o tempo necessário para

tal operação pode crescer exponencialmente. Para fins de curiosidade, em alguns dos

testes realizados durante à construção da aplicação, uma dificuldade igual à 4 era feita de

maneira praticamente instantânea, entretanto quando à crescia para 6, o tempo decorrido

Page 34: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

33

geralmente passava de meia hora. A operação que acabou de ser explicada é conhecida

como Proof of Work, ou Prova de Trabalho e é um dos algoritmos de consenso mais

utilizados atualmente.

Agora que finalmente passamos por todas essas definições de modelos de entidades e

seus atributos, podemos seguir para a próxima etapa.

3.1.3 Implementação do escopo da votechainClient

Relembrando o escopo da aplicação cliente, vemos que uma de suas primeiras neces-

sidades é permitir que os eleitores se cadastrem e recebam um par de chaves.

Como foi dito na subseção 2.2 que fala sobre o Django, este framework oferece diversas

funcionalidades pré-implementadas por padrão, algumas estão diretamente relacionadas

aos usuários, como cadastro e login.

Dada a especificidade da aplicação desenvolvida, algumas modificações tiveram que

ser realizadas como a criação do par de chaves e o tratamento especial à chave privada.

Assim como a senha de acesso do eleitor, sua chave privada não fica salva no banco

de dados, mas seu hash sim. Por outro lado, diferentemente da senha, o usuário -salvo

algumas exceções- não tem como lembrar de uma sequência tão grande de caracteres. Um

exemplo da chave pode ser visto na Figura 14.

Para contornar este problema, a estratégia adotada foi gerar um arquivo contendo a

chave privada em seu formato original e disponibilizá-lo offline na máquina do cliente.

Dessa maneira, toda vez que o eleitor precisar inserir a chave privada, na geração da

assinatura digital do voto, este poderá fazer uso do arquivo, utilizado pela aplicação

apenas para leitura, sem comprometer seus dados por mantê-los disponíveis apenas em

seu computador.

Page 35: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

34

Figura 14: Exemplo de chave privada

Fonte: Autoria Própria

A segunda funcionalidade definida no escopo da aplicação cliente é fundamental para

o propósito da votação, o voto único. No início do projeto houveram muitas dúvidas com

relação à criação ou não de uma entidade para os candidatos, mas baseando-se no modelo

atual, foi considerado que os candidatos seriam escolhidos por seus partidos e teriam seus

números divulgados na mídia.

Com isso, definimos que a funcionalidade consistirá de uma busca na própria base

de dados, a fim de verificar se o eleitor conectado já realizou algum voto no cargo em

questão. Em caso negativo, as outras verificações são iniciadas.

Como já foi mencionado no 4o parágrafo desta seção, o usuário precisa entrar com

sua chave privada no momento do voto. No caso de duas pessoas utilizarem o mesmo

computador, há a possibilidade de alguém querer se aproveitar dessa situação e tentar

votar pela outra pessoa, utilizando tua chave privada. Infelizmente para esta pessoa, a

aplicação valida o hash da chave inserida, comparando-o com o hash salvo no banco e

impedindo assim a realização do voto.

Page 36: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

35

Após essa validação de identidade ter sido concluída, caso o usuário esteja realmente

usando a própria chave privada e não tenha votado no cargo em questão ainda, o sistema

deve gerar uma assinatura digital e anexá-la ao voto. Com base na introdução de assina-

tura apresentada no capítulo anterior, vejamos como é realizada sua geração na aplicação.

A biblioteca cryptography (CRYPTOGRAPHY, 2019) foi utilizada como base.

Para gerar a assinatura, são necessários a chave privada do eleitor, a mensagem (os

dados do voto) e um algoritmo para gerar uma função hash. Mais uma vez o algoritmo esco-

lhido para tal tarefa foi o SHA-256. A função disponibilizada pela biblioteca cryptography,

ainda permite a utilização de uma variável chamada salt. Essa variável serve como uma

espécie de identidade da assinatura, por gerar duas assinaturas diferentes mesmo quando

se utiliza os mesmos dados de entrada, por causa dos salts diferentes.

Com a geração da assinatura digital, o voto foi validado com sucesso e já está pronto

para ser enviado à algum nó conhecido, com a intenção de ser minerado e integrado à

Votechain. Como se pôde ver no DER ilustrado na Figura 12, uma entidade para represen-

tar os nós conhecidos pela aplicação do eleitor se faz presente. Esses nós serão utilizados

apenas no momento de finalização dos votos, sendo responsáveis por recebê-los e tratá-los.

A estratégia utilizada para a comunicação entre as aplicações é baseada na utiliza-

ção da biblioteca Requests do Python e na lista de nós conhecidos. O processo é iniciado

quando a aplicação cliente tenta enviar o voto recém-finalizado para algum dos nós co-

nectados, caso haja indisponibilidade por parte deste nó, a aplicação tentará outro, até

que receba uma confirmação de sucesso ou tenha percorrido todos os nós.

Para concluir o escopo da votechainClient, a aplicação deve guardar apenas as infor-

mações relacionadas ao próprio eleitor. Entretanto, esse requisito já é contemplado em

sua modelagem, graças à existência do relacionamento entre usuários e votos.

3.1.4 Implementação do escopo da votechainNode

Agora que os eleitores já podem votar, é necessário preparar a aplicação que será utili-

zada pelos nós da rede. Além da estrutura da votechainNode facilitar o compartilhamento

de dados, como foi dito anteriormente, uma interface simples e intuitiva foi utilizada,

buscando facilitar seu entendimento.

Buscando manter a aplicação sempre disponível aos eleitores e aos outros nós, o Celery

foi utilizado como gerenciador de tarefas programadas e/ou demoradas em segundo plano,

tal como a mineração dos blocos ou o broadcast dos votos para os nós conhecidos.

Page 37: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

36

Além disso, se o servidor do nó ficar temporariamente indisponível, mas o RabbitMQ

atrelado à ele estiver funcionando, as mensagens recebidas serão guardadas pelo broker e

reenviadas ao nó quando este voltar ao normal. Por outro lado, a votechainNode só usu-

fruirá da plenitude de suas funcionalidades, caso Celery e RabbitMQ estejam “rodando”.

Considerando que a aplicação dos nós possui todos os serviços executando, ela está

apta a receber os votos dos eleitores. Apesar de algumas verificações serem feitas no lado

da aplicação cliente, nâo se pode garantir que as mensagens chegarão do mesmo jeito que

foram enviadas, logo, as mesmas validações devem ser feitas no outro lado da conexão.

A primeira verificação realizada na votechainNode, é se a cópia da sua blockchain já

possui algum voto do dado eleitor, no mesmo cargo do atual voto. Caso já exista algum

voto, o que foi recebido por último é removido. A outra verificação que deve ser feita é

relacionada à assinatura digital. Esta se baseia na chave pública do eleitor, na mensagem

recebida e na própria assinatura digital, essas informações estão contidas no voto recebido.

A verificação da assinatura é baseada na comparação entre:

• O resultado da função hash utilizada para se gerar a assinatura, no caso SHA-256,

na mensagem recebida;

• O resultado da decriptação da assinatura digital usando a chave pública do eleitor.

Figura 15: Verificação da assinatura digital

Fonte: https://medium.com/@meruja/digital-signature-generation-75cc63b7e1b4

Page 38: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

37

A assinatura só será considerada válida, caso os hashs gerados sejam iguais, como

mostra a Figura 15. Após a etapa de validação ter sido completamente finalizada, começa

o processo de broadcast dos votos para os nós conhecidos. Este será constituído unicamente

pelo envio do voto validado, para cada um dos nós conhecidos.

3.1.4.1 Mineração dos Blocos

A etapa de mineração dos blocos pode ser interpretada como a função mais complexa

de ambas as aplicações e portanto, merece uma atenção especial.

A primeira particularidade dessa função está relacionada à sua execução. A mine-

ração dos blocos será iniciada à cada 5 minutos, de maneira automática e em segundo

plano, graças ao agendador de tarefas do Celery, o Celery Beat. Com apenas algumas

configurações no projeto da aplicação, esse serviço pode executar qualquer função criada,

periodicamente.

Como a mineração é iniciada automaticamente, é importante executá-la apenas quando

não estiver acontecendo outra mineração, evitando assim qualquer inconsistência, logo,

uma verificação como esta é executada assim que a função é iniciada. Outra verificação

que acontece no início da mineração, é relacionada à qual o nó conhecido que possui a

melhor blockchain. Para tanto, uma requisição até a página de informações básicas desse

nó é realizada, retornando dentre várias coisas, a quantidade de blocos do nó.

Existem três possibilidades distintas à partir daqui.

1. As blockchains de todos os nós conhecidos possuem no máximo a mesma quantidade

de blocos que a sua.

2. A melhor blockchain dos nós conhecidos possui um bloco à mais que a sua.

3. A melhor blockchain dos nós conhecidos possui mais de um bloco que a sua, ou, sua

cópia da blockchain está inválida.

A opção 1 é a mais trivial e não precisa de nenhuma ação extra.

A opção 2 representa o caso em que a sua cópia da blockchain está um pouco desatu-

alizada e portanto, necessita de sincronização. Este problema é resolvido requisitando-se

ao nó de melhor blockchain, o seu último bloco, e incorporando-o ao final de sua cadeia

de blocos.

Page 39: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

38

A opção 3 representa o caso em que sua cadeia de blocos está completamente desatu-

alizada, ou pior, possui alguma inconsistência. Quando se está nessa situação, o melhor a

fazer é desconsiderar toda sua cadeia e requisitar a melhor de todas, ao nó que a possui,

adotando esta.

Independente de qual tenha sido o caso, ao final das alterações ocorridas (ou não), a

cópia de sua blockchain será a melhor (ou uma das melhores) dentre todos os seus nós

conhecidos. O passo seguinte da aplicação é minerar um novo bloco.

Essa mineração é iniciada por uma sequência de revalidações, passo necessário para

se garantir a redundância de verificações, uma das principais características de um sis-

tema baseado na segurança. As verificações buscam por votos que possuam assinaturas

inválidas ou votos múltiplos de um mesmo eleitor em um dado cargo, removendo todas

as inconsistências encontradas.

Após essa série de revalidações, a aplicação verifica se restam votos sem nenhum bloco

atrelado à eles. Caso existam, os cinco mais antigos(no máximo), são escolhidos para serem

incluídos no novo bloco e a Prova de Trabalho se inicia. Ao ser concluída, mais votos terão

sido incluídos na blockchain e ela estará ainda mais atualizada.

Page 40: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

39

4 Resultados

Para se realizar uma análise dos resultados, um processo eleitoral foi simulado. Esta

simulação foi baseada na utilização de duas aplicações clientes, além de quatro aplicações

para os nós. A estratégia de execução das aplicações foi a seguinte:

• O computador rodou uma aplicação cliente na porta 9000 e uma aplicação para os

nós na porta 8000; A aplicação dos nós necessitava de serviços auxiliares represen-

tados por uma instância do Celery, uma do Celery Beat e outra do RabbitMQ, cada

uma delas em um container dedicado;

• Uma segunda máquina para a aplicação dos clientes foi executada em um container

dedicado, e mapeada para a porta 9001 da máquina local;

• Três máquinas distintas para a aplicação dos nós foram executadas em containers

dedicados e diferentes. Cada um deles foi mapeado para as portas 8001, 8002 e 8003,

respectivamente, da máquina local. Além disso, o Docker Compose foi necessário

para fazer com que os serviços auxiliares fossem integrados aos nós citados.

A figura 16 ilustra a estrutura da rede criada para a simulação.

Figura 16: Estrutura da rede criada

Fonte: Autoria Própria

Page 41: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

40

O primeiro passo para a realização da simulação é o cadastramento de um eleitor na

aplicação cliente. Um exemplo deste passo pode ser visto na Figura 17.

Figura 17: Tela de cadastro de um eleitor na aplicação ‘Cliente 1’

Fonte: Autoria Própria

Em seguida, uma urna (nome dado na aplicação aos nós) deve estar disponível para

receber os votos. A aplicação dos nós pode ser vista na Figura 18.

Figura 18: Tela do ‘Nó 1’ informando que sua cadeia de blocos está vazia

Fonte: Autoria Própria

Page 42: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

41

Essa configuração inicial é suficiente para a realização de um voto. Na Figura 19

podemos ver quais informações precisam ser inseridas pelo eleitor no ato do voto. O título

de eleitor e a assinatura digital, gerada pela aplicação, também serão enviados ao nó.

Figura 19: Tela do ‘Cliente 1’ mostrando a criação de um voto

Fonte: Autoria Própria

O resultado da operação anterior pode ser visto na Figura 20.

Figura 20: Tela do ‘Cliente 1’ após o voto, mostrando a lista de votos já realizados

Fonte: Autoria Própria

Page 43: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

42

Supondo que mais eleitores houvessem utilizado a mesma máquina para cadastrarem-

se, o que teria acontecido caso algum eleitor tentasse utilizar a chave privada de outro

para votar? A Figura 21 mostra o resultado dessa operação.

Figura 21: Tela do ‘Cliente 1’ impedindo o eleitor de votar com dados de outra pessoa

Fonte: Autoria Própria

Uma funcionalidade desenvolvida para tornar a votechainClient robusta e indepen-

dente da disponibilidade de apenas um nó, foi “Adicionar Urna”, oferecendo a possibilidade

de conectar a aplicação à quaisquer nós. A lista de nós conectados é vista na Figura 22.

Figura 22: Tela do ‘Cliente 2’ mostrando sua lista de nós conhecidos

Fonte: Autoria Própria

Page 44: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

43

Para se adicionar um nó à uma aplicação cliente, esta verifica se o ip e a porta inseridos,

realmente representam um nó. Caso representem, ainda deve ser conferido se este nó é

válido. Essas informações podem ser acessadas na tela demonstrada na Figura 23.

Figura 23: Tela do ’Nó 2’ mostrando suas informações básicas

Fonte: Autoria Própria

As conexões do nó podem ser visualizadas na aba Connected Nodes, como mostra a

Figura 24, executada à partir do “Nó 1”.

Figura 24: Tela que mostra as conexões do ‘Nó 1’ com o ‘Nó 2’ e o ‘Nó 3’

Fonte: Autoria Própria

Page 45: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

44

Supondo que o ‘Cliente 1’ realize votos numa frequência bem maior que o ‘Cliente 2’,

o ‘Nó 4’ inevitavelmente se tornará desatualizado em algum momento e precisará portanto

sincronizar sua cadeia de blocos com seus conhecidos, no caso o ‘Nó 1’.

Como foi dito na Seção 3.1.1, o envio dos dados é feito através de uma resposta no

formato JSON. Um exemplo do arquivo enviado quando se solicita a blockchain de um

nó, pode ser visto na Figura 25.

Figura 25: Resposta dada pelo ’Nó 1’ ao ’Nó 4’ da requisição de sua blockchain, em JSON

Fonte: Autoria Própria

Após isso, o ‘Nó 4’ terá a melhor blockchain de sua rede, porém, esta pode não ser

necessariamente a melhor existente, o que aumenta a necessidade de uma rede com o

maior número possível de conexões.

Page 46: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

45

Durante qualquer momento do processo eleitoral, é possível visualizar o resultado

parcial, baseando-se nos votos realizados, validados e já minerados. Esses votos estarão

disponíveis dentro da lista de blocos do nó e estão acessíveis à partir da aba Block List.

A Figura 26 mostra o resultado da operação descrita.

Figura 26: Tela do ‘Nó 4’ mostrando a lista com todos os seus blocos de votos

Fonte: Autoria Própria

Page 47: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

46

5 Conclusão

Em suma, o presente trabalho propôs a criação de uma aplicação baseada em block-

chain, para ser utilizada como um modelo alternativo de votação, através do uso de

ferramentas baseadas em criptografia e no gerenciamento de tarefas concorrentes.

Dois tipos de aplicações complementares foram implementadas através da linguagem

Python e do framework de desenvolvimento Web Django. A primeira delas foi focada nos

eleitores e funciona como um site comum, já a segunda aplicação, foi voltada para os nós

da rede e é caracterizada como uma API REST, podendo ainda ser acessada como um site

comum, mas oferecendo diversas melhorias no processo de envio e recebimento de dados.

Vários níveis de verificações e validações foram implementadas em ambas as aplica-

ções, a fim de aumentar a segurança do sistema completo, além de diversas técnicas para

melhorar o processamento dos dados e garantir maior disponibilidade à rede.

Ao se analisar os resultados obtidos após diversas execuções de validação, o trabalho

foi considerado satisfatório, por ter cumprido todas as metas traçadas e explicadas durante

o seu desenvolvimento. Além disso, o sistema construído se mostra robusto o suficiente

para ser usado como base de projetos maiores relacionados ao tema.

5.1 Trabalhos Futuros

Algumas funcionalidades importantes à uma votação, como a contagem de votos para

cada candidato e a validação do título eleitoral por ambas as aplicações, são listadas

como fundamentais numa próxima versão do sistema. Entretanto, a maior prioridade será

a criação de métodos que garantam a manutenção de votos contidos apenas localmente,

ao se desprezar o próprio conjunto de votos e blocos e adotar a melhor blockchain da

rede. Esse problema pode ser considerado como praticamente inexistente em redes com

múltiplas conexões entre nós.

Page 48: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

47

Referências

ALVES, F. Tarefas demoradas de forma assíncrona com Django e Celery. Jul 2015.Disponível em: <https://fernandofreitasalves.com/tarefas-assincronas-com-django-e-celery/>. Acesso em 16 de jun. de 2019.

ARANHA, D. F. Voto impresso pode tornar eleições mais seguras e transparentes.2018. Disponível em: <https://blogs.oglobo.globo.com/ciencia-matematica/post/voto-impresso-pode-tornar-eleicoes-mais-seguras-e-transparentes.html>. Acesso em 20 de jun.de 2019.

BARTOSZ. How to schedule ‘the Boring Stuff’ with Django and Celery Beat. 2018.Disponível em: <https://www.merixstudio.com/blog/django-celery-beat/>. Acesso em18 de jun. de 2019.

BASSOTTO, L. P2P ou “peer-to-peer”: Como funciona uma rede sem intermediários?Aug 2018. Disponível em: <https://cointimes.com.br/p2p-ou-peer-to-peer-como-funciona/>. Acesso em 20 de jun. de 2019.

BEEDHAM, M. Japan is experimenting with a blockchain-powered voting system.Sep 2018. Disponível em: <https://thenextweb.com/hardfork/2018/09/03/japan-city-blockchain-voting/>. Acesso em 20 de jun. de 2019.

BELLET, C. Part 5: Hashing with SHA-256. Jan 2018. Disponível em:<https://medium.com/biffures/part-5-hashing-with-sha-256-4c2afc191c40>. Acesso em17 de jun. de 2019.

BITCOIN, P. do. Há um ano atrás o Bitcoin atingia o maior preço da história. Dec2018. Disponível em: <https://portaldobitcoin.com/ha-um-ano-atras-o-bitcoin-atingia-o-maior-preco-da-historia/>. Acesso em 20 de jun. de 2019.

BITCOIN.ORG. Blockchain Guide. Jun 2019. Disponível em:<https://bitcoin.org/en/blockchain-guide#proof-of-work>. Acesso em 20 de jun.de 2019.

CELERY. Using RabbitMQ. 2019. Disponível em:<https://docs.celeryproject.org/en/latest/getting-started/brokers/rabbitmq.html>.Acesso em 16 de jun. de 2019.

CRYPTOGRAPHY. Welcome to pyca/cryptography. 2019. Disponível em:<https://cryptography.io/en/latest/>. Acesso em 18 de jun. de 2019.

DEXTER, S. Longest Chain – How Are Blockchain Forks Resolved? Jun 2018. Disponívelem: <https://www.mangoresearch.co/blockchain-forks-explained/>. Acesso em 20 dejun. de 2019.

Page 49: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

48

DJANGO. Django makes it easier to build better Web apps more quickly and with lesscode. Jun 2019. Disponível em: <https://www.djangoproject.com/>. Acesso em 16 dejun. de 2019.

DOCKER. Get Started with Docker. 2019. Disponível em: <https://www.docker.com/get-started>. Acesso em 18 de jun. de 2019.

GOYAL, S. The History of Blockchain Technology: Must Know Timeline. 2018. Disponívelem: <https://101blockchains.com/history-of-blockchain-timeline/>. Acessoem 10 de jun. de 2019.

HAMIDEH, J. OriginalMy na Mídia: Blockchain e o futuro das eleições. Mar 2019.Disponível em: <https://blog.originalmy.com/blockchain-e-o-futuro-das-eleicoes/>.Acesso em 20 de jun. de 2019.

KESSLER, G. C. An Overview of Cryptography. May 2019. Disponível em:<https://www.garykessler.net/library/crypto.html#types>. Acesso em 10 dejun. de 2019.

LISK. Peer to Peer Network. 2019. Disponível em: <https://lisk.io/academy/blockchain-basics/how-does-blockchain-work/what-is-a-peer-to-peer-network>. Acesso em 20 de jun.de 2019.

MARR, B. 35 Amazing Real World Examples Of How Blockchain Is Changing Our World.2018. Disponível em: <https://www.forbes.com/sites/bernardmarr/2018/01/22/35-amazing-real-world-examples-of-how-blockchain-is-changing-our-world/#2f2d69b943b5>. Acesso em 20 de jun. de 2019.

MONTE, R. Urna eletrônica é vulnerável e pode ser fraudada, diz especialista.2018. Disponível em: <https://portalcorreio.com.br/eleicao-de-2018-esta-sob-risco-diz-especialista-em-seguranca-computacional/>. Acesso em 20 de jun. de 2019.

NAKAMOTO, S. Bitcoin: A Peer-to-Peer Electronic Cash System. 2008. Disponível em:<https://bitcoin.org/bitcoin.pdf>. Acesso em 12 de jun. de 2019.

RONQUILLO, A. Python’s Requests Library (Guide). Jan 2019. Disponível em:<https://realpython.com/python-requests/>. Acesso em 17 de jun. de 2019.

S., J. Blockchain: how a 51% attack works (double spend attack). May 2018. Disponívelem: <https://medium.com/coinmonks/what-is-a-51-attack-or-double-spend-attack-aa108db63474>. Acesso em 20 de jun. de 2019.

SARDAN, T. What is a light client and why you should care? Jul 2018. Disponível em:<https://www.parity.io/what-is-a-light-client/>. Acesso em 20 de jun. de 2019.

SILVA, V. H. Pesquisa mostra desconfiança em urnas eletrônicas usadas no Brasil. 2018.Disponível em: <https://tecnoblog.net/256951/desconfianca-urnas-eletronicas/>. Acessoem 20 de jun. de 2019.

STALLINGS, W. Criptografia e Segurança de Redes: Princípios e Práticas. 6th. ed. [S.l.]:Pearson, 2014.

Page 50: Votechain, uma solução mais segura, acessível e inovadora ...€¦ · Agradeço primeiramente à Deus por toda a capacidade que me foi dada, mas mais ... 1 Introdução Oprotocoloentituladode“Bitcoin:APeer-to-PeerElectronicCashSystem”

49

TAPSCOTT, D.; TAPSCOTT, A. Blockchain revolution: como a tecnologia por trás dobitcoin está mudando o dinheiro, os negócios e o mundo. São Paulo: Senai-SP, 2016.

TAR, A. Prova de trabalho (PoW), Explicado. Jan 2018. Disponível em:<https://br.cointelegraph.com/explained/proof-of-work-explained>. Acesso em20 de jun. de 2019.

TUNGKA, D. P. Using Docker Compose to Run Your Applications. 2018. Disponível em:<https://medium.com/rate-engineering/using-docker-containers-to-run-a-distributed-application-locally-eeabd360bca3>. Acesso em 18 de jun. de 2019.

VINCENT, W. Official Django REST Framework Tutorial - A Beginners Guide. Nov2018. Disponível em: <https://wsvincent.com/official-django-rest-framework-tutorial-beginners-guide/>. Acesso em 16 de jun. de 2019.

VU, Q. H.; LUPU, M.; OOI, B. C. Peer-to-peer computing: Principles and applications.[S.l.]: Springer Science & Business Media, 2009.