Voto transparente

From TotsTag Wiki
Jump to: navigation, search


Vídeo de apresentação

Introdução

Um dos principais processos da democracia é o direito de eleger os seus representantes, estes virão a compor um tecido social colorido com os diversos grupos que representam uma sociedade. Esses representantes têm o dever de trazer a ordem do dia, os anseios e desejos de seus representados.

O voto é um exercício de cidadania de todo o cidadão e umas das principais ferramenta para a correção da rota de um país e garantir as liberdades pautadas pela democracia. Mesmo diante de suas imperfeições, a democracia em sua plenitude ainda é a forma de governo que traz mais poder aos integrantes de uma nação.

O sufrágio universal, que é o direito de todos os cidadãos adultos de votarem e seres votados, é a maior expressão de uma democracia, pois ele traz a esperança de um povo investida em seus representantes legais e é dever do estado fornecer aos seus cidadãos, garantias, que atestem a integridade de todo o processo eleitoral, desde o exercício secreto do voto para garantir ao cidadão a liberdade de escolha até o ato administrativo de contabilização de todos votos direcionados aos seus representantes.

O afastamento destas premissas, causa o incremento contínuo de atritos e choques entre governantes e governados, pois qualquer obscuridade no processo de escolha dos governantes de uma nação, dá margem a incertezas que minam gradativamente a confiança dos cidadãos no seu estado e um povo que se sente contrariado em seus desejos e esperança perde o brilho e deixa de ser tão bom quanto poderia ser.

O voto eletrônico traz agilidade, precisão e combate a um conjunto de fraudes sujeitas a um processo eleitoral tradicional, contudo um ponto crítico de qualquer sistema informatizado é a disponibilidade de uma auditoria com processos que atendam a publicidade e transparência.

A eficiência da auditoria de um sistema eletrônico de votação esta atrelada a rastreabilidade e auditoria voto a voto, bem como a publicidade e transparência dos processos envolvidos, pois a falta de materialidade física do voto (cédula física de votação) requer um substituto eletrônico de peso semelhante, cuja falta coloca o eleitor diante de uma "caixa preta". Pessoas tendem a reduzir a confiança diante de situações que não conseguem medir e compreender.

No uso de criptomoedas, tal como o Bitcoin, a confiança de todo o processo está atrelada ao registro de cada bloco de transação, isso significa que todas os registros de transferência de valores entre contas de clientes do Bitcoin estão registradas e vinculadas registro a registro em um gigantesco e público livro razão, contudo todos os usuários da moeda são anônimos, preservando assim as suas identidades. Principio semelhante é aplicado neste sistema.

Um sistema eletrônico torna transações mais eficientes e hoje muitos brasileiros não se vêem diante de filas bancárias para realizar processos rotineiros juntos a instituições bancárias. Fato é que no sistema financeiro funciona, contudo o principal pilar que torna um sistema financeiro viável são processos de transparência e auditoria e em qualquer um destes processos há uma materialidade física mensurável e compreensível - o extrato bancário.

Imagina você impedido por uma instituição bancária, de consultar seu saldo bancário, extrato de movimentação financeira ou mesmo obter o valor atual do seu patrimônio inserido em um investimento financeiro, pois é, isto não seria concebível, este simples processo é uma auditoria realizada pelo cliente junto a instituição financeira, assim auditoria traz transparência e transparência protege a confiança.

Quando se trata de um sistema sistema eleitoral, o nível de sensibilidade é ainda maior pois diferente de uma entidade financeira em que o cliente que esteja descontente pode escolher outra entidade financeira para lidar com suas economias, o sistema eleitoral é único, um serviço público de monopólio do estado e isso torna questões auditoria, transparência e publicidade ainda mais expressivas.

Outro ponto de fundamental importância em todo o processo eleitoral é o sigilo eleitoral. Seria inconcebível imaginar que agentes públicos tivessem acesso ao conteúdo do voto de seus cidadãos a partir do número de CPF por exemplo.

Cidadãos poderiam sentir-se inseguros diante de possíveis retaliações por quem chegasse ao poder, ou ainda pior, que seu voto fosse publicado em sua cidade. Tais motivos, dentre outros, norteiam as razões para fornecer garantias de sigilo do voto, tornando-o assim secreto, pois o exercício secreto do voto visa garantir a liberdade de escolha do cidadão.

Hoje em dia, os jornais noticiam um sem número de invasões a sistemas, algumas dessas vítimas são inclusive empresas cuja natureza é tecnologia e outras ainda investem uma enorme parcela de suas receitas no sentido de aumentar a segurança de seus sistemas, tais como entidades financeiras que investem considerável parcela de suas receitas em segurança da informação.

Sistemas computacionais não são totalmente seguros e assim há a necessidade de utilizar abordagens e metodologias de segurança para fornecer garantias ao principal cliente, no sistema eleitoral, o eleitor.

Uma metodologia muito utilizada na área de segurança de tecnologia de informação é análoga a uma cebola. Uma cebola é constituída de muitas camadas, uma consecutiva a outra, de modo que para se acessar ao cerne de uma cebola, há a necessidade de ultrapassar cada uma das camadas justapostas.

Este conjunto de camadas de segurança, busca garantir que a cada uma barreira que for ultrapassada (burlada por um atacante), o atacante se depare com outra e outra e outra… De modo que se uma única barreira não for superada o atacante não consegue atingir o seu objetivo. Assim estas camadas de segurança buscam atender a 3 garantias:

  • Confidencialidade, zela para que somente as pessoas certas possuam acesso à informação protegida.
  • Integridade, zela para não permitir a modificação não autorizada da informação protegida.
  • Disponibilidade, dá garantias para que a pessoa certa tenha acesso a informação protegida.

Ao aplicar estes 3 princípios no sistema eleitoral precisa-se ter em vista os seguintes objetivos:



  1. Quanto à confidencialidade, ter a garantia de que o voto continue secreto, assim SOMENTE o eleitor saberá em quem votou.
  2. Quanto à integridade, ter garantia de que o voto do eleitor não foi alterado em nenhum processo entre o ato de votação e a contabilização dos votos.
  3. Quanto a disponibilidade, ter a garantia que o próprio eleitor tenha acesso às informações de seu voto, assim ele pode fazer a auditoria de seu voto e confirmar a compatibilidade do conteúdo de seu voto.

A quebra de qualquer um destes princípios coloca "por terra" a credibilidade no processo eleitoral.

O principal apelo do sistema proposto nesta documentação é a utilização de uma tecnologia chamada blockchain, no mercado a sua versão mais popular é conhecida como Bitcoin.

Um dos principais benefícios da blockchain é ela que permite o registro imutável de dados em um ambiente que garante a replicação da informação em outros bancos de dados de mesma natureza, assim diferentes cópias de uma mesma blockchain estariam sobre a custódia de atores distintos e ainda poderia ser publicada na internet para acesso público. Esta característica atende a critérios de publicidade e transparência do processo administrativo de contabilização eleitoral.

Outro ponto importante é que todos os votos emitidos pelos eleitores são ANONIMIZADOS ainda quando estão localizados na urna eletrônica, ou seja, todos os registros dos votos são anônimos de modo que permitir o acesso público a uma blockchain contendo o registro de cada um dos votos registrados em uma eleição sem quebra do sigilo de voto do eleitor. Isso e obtido a partir de um conjunto de algoritmos de criptografia ja consagrados no mercado, cuja orquestração permite que SOMENTE o eleitor tenha acesso a auditoria de seu voto.

O projeto deste sistema está sendo desenvolvido com objetivo de dar publicidade da contabilização de uma eleição voto a voto, o alvo da auditoria é o fato jurídico, o conteúdo do voto tendo em vista fornecer a cada cidadão a capacidade de auditar e fiscalizar tanto o seu voto individual como voto a voto toda uma eleição.

Um dos principais componentes sociais desta solução é que ao conceder plena capacidade para o eleitor auditar o seu voto individual e auditar voto a voto uma eleição. Assim eleitores, partidos, instituições e etc. podem fazer uso destes recursos para certificar a integridade de uma eleição.

Como veremos mais adiante nesta documentação, a principal peça que dá embasamento a todo o sistema é o RECIBO DE VOTO, um recibo anônimo entregue ao eleitor e que vincula cada eleitor ao conteúdo de seu voto de forma inequívoca e irrefutável quando este recibo for acompanhado de duas chaves de conhecimento do eleitor:

  1. O número de seu título de eleitor;
  2. A sua senha cadastrada no momento do voto (somente o eleitor conhece esta chave, ela não será armazenado em nenhum local do sistema).

Assim o RECIBO DE VOTO funciona como um agente fiscalizador de todo o processo eleitoral, pois será expedido voto a voto e a qualquer tempo pode ser confrontado com as informações disponibilizadas no banco eleitoral e na blockchain. Em caso de constatação de irregularidade, qualquer um dos eleitores pode fazer uso das chaves inseridas no recibo de voto para comprovação.

Vale observar que o sistema proposto é passivo, ou seja, não possui capacidade de alterar o resultado de uma eleição, visto que ele somente recebe informações, diretamente da urna eletrônica e processa o registro das informações recebidas e previamente anonimizadas na urna eletrônica. Esta característica facilita a implementação de um sistema desta natureza, porque ele é aditivo ao sistema eletrônico de votação atual e não tem em vista a sua substituição, de tal modo que ele poderia ser adicionado ao sistema atual mesmo se houver aprovação da impressão física do voto.

Proposta da solução de auditoria pública de voto

Esta solução, projetada em conceitos blockchain, dá garantias de sigilo eleitoral ao eleitor, bem como permite o acesso a auditoria de seu voto após a conclusão do processo de apuração eleitoral. Mais precisamente, dá ainda garantias, ao eleitor, de que o seu voto foi contabilizado corretamente e que o conteúdo de seu voto se manteve inalterado durante todo o processo eleitoral. Assim esta tecnologia traz sigilo do voto individual e publicidade voto a voto de toda a eleição fortalecendo a lisura do processo eleitoral.

A aplicação desta tecnologia fornece as seguintes garantias:

  1. Sigilo do voto do eleitor;
  2. Auditoria da integridade do voto SOMENTE pelo próprio eleitor a partir do recibo de voto e as duas chaves de conhecimento do eleitor (número de título de eleitor e senha cadastrada);
  3. Não duplicidade de voto pelo mesmo título de eleitor;
  4. Registro de todos os números de títulos de eleitor relacionados aos eleitores participantes da eleição;
  5. Disponibilização PÚBLICA, para auditoria por qualquer cidadão, do banco eleitoral que é um arquivo no formato CSV contendo os registros voto a voto de uma eleição.

Este arquivo CSV (arquivo com parâmetros separado por vírgula) que chamaremos de banco eleitoral em formato CSV, lista voto a voto o registro de todos dos votos de uma eleição, assim o conteúdo deste arquivo vincula o voto representado em cada uma das suas linhas de registro ao conteúdo do voto na linha imediatamente anterior, semelhante aos elos de uma corrente, de forma semelhante ao realizado em uma blockchain. Qualquer adulteração no conteúdo do voto armazenado em qualquer uma das linhas de registros, bem como a inserção de novos registros ou retirada de registro qualquer, provocará a quebra de integridade de todo o arquivo, ou seja, ou o arquivo está íntegro ou está corrompido, não haveria um meio termo.

O banco eleitoral em formato CSV, permite que qualquer empresa privada, instituição, cidadão ou grupos representantes da sociedade, possam fazer uso do software Voto Transparente para PC para realizar a auditoria do processo eleitoral. Inclusive pode-se ainda exportar este banco eleitoral em formato CSV para um banco de dados (SGDB) e disponibilizar um conjunto de serviços de auditoria e relatórios a partir de um servidor WEB.

Com o uso do software software Voto Transparente para PC pode-se fazer uma auditoria sobre o banco eleitoral de modo a responder as seguintes perguntas:

  1. Os registros deste banco eleitoral possui integridade?
  2. O título eleitoral de número 123456789012 participou da eleição?
  3. Qual o resultado final da apuração eleitoral?
  4. Quantos eleitores participaram desta eleição?
  5. Tendo em mãos o recibo de votação, o número de título de eleitor e a senha cadastrada pelo eleitor no momento da votação, qual o conteúdo do voto compatível com este recibo de votação?
  6. Houve algum número de título eleitoral que votou mais de uma vez nesta eleição?
  7. A assinatura hash SHA512 deste banco eleitoral é a mesma publicada pelo órgão eleitoral responsável pela apuração eleitoral?

Diagrama do projeto e pontos importantes

Nestes diagramas você visualizará as estruturas utilizadas para a implementação do projeto.



  • Voto ANONIMIZADO a partir da urna eletrônica

No momento que o eleitor conclui o seu voto junto a urna eletrônica, os dados de seu voto são anonimizados com o uso de técnicas de HASH, assim as informações de voto do eleitor estarão vinculados a 2 de chaves, sendo a primeira aleatória e alfanumérica e a segunda no formato de HASH que não permite desconstrução. A primeira chave fará parte do RECIBO DE VOTO enviado por SMS para o eleitor que informou o seu número de telefone celular no momento do voto e a outra chave (HASH) será armazenada no banco de dados na mesma linha de registro que constam as informações de voto do eleitor.

A chave que vincula o voto do leitor, SOMENTE poderá ser reconstruída pelo eleitor que tem conhecimento do número de título de eleitor e da senha cadastrada no momento do voto.


Chave enviada por SMS para o eleitor, compondo o recibo de voto

ELZHo3nXCroQZpPz92dKb53gqeYM5u48
JkbVumaqdr8NMuzwCE3h4CCdszTOPap7
SWgTOUYnYcAZhe3Ch57QGfZsKnU5wlyt
uYVOkvWCO6S4sG2foG1QY8JRYwDWNXQN


Chave que vincula o voto do eleitor na blockchain e banco eleitoral

B1314DD0E0873B7330D56F0F8901E866
2E40939427FAE1F553888B532D23DC56
A6E38EA6A4C2E02BC775EA9A0C6DBAC5
76B95D7651832ADC869079BCF6AE6142


Processo de reconstrução da chave



HASH_SHA512 ( chave segura (QR code, SMS) + título de eleitor + senha numérica cadastrada ) = chave de acesso ao voto




HASH_SHA512 ( ELZHo... (128 caracteres) ...WNXQN + 840726997999 + 347875 ) = B1314... (128 caracteres) ...E6142




HASH_SHA512 (

ELZHo3nXCroQZpPz92dKb53gqeYM5u48
JkbVumaqdr8NMuzwCE3h4CCdszTOPap7
SWgTOUYnYcAZhe3Ch57QGfZsKnU5wlyt
uYVOkvWCO6S4sG2foG1QY8JRYwDWNXQN

+ 840726997999

+ 347875 )

=

B1314DD0E0873B7330D56F0F8901E866
2E40939427FAE1F553888B532D23DC56
A6E38EA6A4C2E02BC775EA9A0C6DBAC5
76B95D7651832ADC869079BCF6AE6142


  • Uso temporário do número de telefone do eleitor

Outro ponto importante é que o número de telefone fornecido pelo eleitor para envio do RECIBO DE VOTO ficará disponível no sistema somente pelo período de tempo necessário para envio do SMS contendo o RECIBO DE VOTO, sendo apagado no momento que o respectivo SMS for enviado, assim este número de telefone não ficará armazenado em nenhum local do sistema.


  • Empresa contratada para envio de SMS

Mesmo que uma empresa contratada para a prestação de serviço de envio de mensagem por SMS armazenasse os logs de envio das respectivas mensagens, esta também não poderia quebrar o sigilo do voto do eleitor sem conhecimento da número do título e a senha cadastrada pelo eleitor que seriam necessárias para a reconstrução da chave que vinculam ao conteúdo do voto do eleitor no banco eleitoral.


  • Independência entre processamento de recibo de voto e conteúdo de voto anonimizado.

Na urna eletrônica serão separados o conteúdo que representa o voto do eleitor em formato ANONIMIZADO e o conteúdo que irá compor o recibo de voto enviado para o eleitor por SMS. Estes itens serão sincronizados com o servidor do Voto Transparente e processados de forma independente.


Modelo de recibo de voto recebido pelo eleitor por SMS


-- RECIBO DE VOTO --
CLIQUE NO LINK ABAIXO PARA AUDITAR O SEU VOTO
https://www.totstag.com/service.html#votoauditado-rcp:sec=ELZHo3nXCroQZpPz92dKb53gqeYM5u48JkbVumaqdr8NMuzwCE3h4CCdszTOPap7SWgTOUYnYcAZhe3Ch57QGfZsKnU5wlytuYVOkvWCO6S4sG2foG1QY8JRYwDWNXQN
ASSINATURA DIGITAL
CFA9878116AD596C6F4F2975072C9B21B265A630BF52808394400142EFB801ED


Exemplo de registro de voto anonimizado no banco eleitoral


0000100000,
8CAEFD046C23084FE7AAE0409449EB1D467E0779EBE7E0CCB35110B79021ED4A91B9E6D967B16061F21951B633FE09DA24CE7D371C3FB2D39B0DAFC0C5D4403E,
22,
2200103,
CFA9878116AD596C6F4F2975072C9B21B265A630BF52808394400142EFB801ED,
1609862499553,
4760FB8532A8F61959CD5D26E341EC3C5D6B876F53770E310FC344CC39DCBF63,
316609424536,
PRESIDENTE:Isaac Rodrigues Ramos:41;SENADOR:Maria Clara Pires:721;DEPUTADOFEDERAL:Leonardo Guimaraes Medeiros:6043

Viabilidades para implantação

  • Uso de tecnologia "Open Souce", todo o projeto é desenvolvido com tecnologia "open source", assim a sua implementação reduziria o impacto em custos destinados a licenças e royalties.
  • Segurança e nuvem, todo o projeto é desenvolvido em nuvem e faz uso de tecnologias robustas desenvolvidas e implementadas por grandes empresas reconhecidas no setor de tecnologia.
  • Projetado para lidar com escala, a tecnologia utilizada neste projeto suporta escala, ou seja, é desenvolvida para atender, por exemplo, ao número de aproximadamente 150 milhões de eleitores cadastrados no Brasil.
  • Implantação mediante arquitetura "Plug In", a implantação deste sistema possui mínimo impacto de implementação no sistema eletrônico de votação atual, assim não substitui o sistema atual e sim acrescenta um módulo de auditoria pública ao sistema atual. Esta arquitetura de sistema é pouco invasiva, isso reduz custos e agiliza a implantação.
  • Comportamento semelhante a um livro razão, este sistema, em nenhum momento solicita ou altera informações do sistema de voto eletrônico atual, ele se comporta de maneira passiva, ou seja, somente recebe informações. Uma analogia seria como se o sistema de voto eletrônico atual fosse a caneta e o sistema Voto Transparente fosse um caderno. Eles se complementam, porém o caderno não possui autonomia em relação a caneta.

Partes do projeto de auditoria eleitoral transparente

O projeto compreende as nas seguintes partes:


  • Banco eleitoral no servidor WEB, onde serão armazenados todos os votos de uma eleição em um formato seguro e anônimo. Este banco de dados estará aos cuidados do órgão responsável pela apuração eleitoral e trabalha em paralelo com o banco de dados atual do sistema eleitoral, assim a cada voto inserido no banco de dados do sistema atual do órgão responsável pela apuração eleitoral, este mesmo voto será customizado de acordo com as diretivas técnicas deste manual e inserido também no banco eleitoral na proporção de 1 para 1. Deste modo o banco eleitoral será preenchido em paralelo com o banco de dados atual de apuração atual, desta forma ambos terão a conclusão de armazenamento de seus registros simultaneamente.
  • Banco eleitoral em formato CSV, este representa uma cópia fidedigna exportada do bando eleitoral no servidor WEB para uma formato de arquivo CSV. Este arquivo será assinado digitalmente pelo presidente do órgão responsável pela apuração do processo eleitoral e então será disponibilizado para acesso público a qualquer cidadão, para realização de posterior auditoria.
  • Software de auditoria local para PC, este software permite a realização de todo o processo de auditoria do arquivo CSV disponibilizado pela autoridade eleitoral. Ele terá seu código aberto e estará disponível para download a qualquer cidadão brasileiro.
  • Marcos de auditoria eleitoral, são marcações do andamento do processo de preenchimento dos registros do bando eleitoral, que serão armazenados em estruturas de mensagens imutáveis tal como e-mail. Este recurso tem o objetivo de fornecer indícios que aprimorem o processo de auditoria e também DEVEM estar disponíveis para auditoria pública. Mais adiante, em informações técnicas, encontraremos mais detalhes sobre este processo.
  • Recibo de voto, recibo de votação entregue ao eleitor e que permite a auditoria individual do voto.


Observações:

  1. O banco eleitoral em formato CSV, disponibiliza a relação de todos os votos realizados em uma eleição, contudo impossibilita o vínculo entre o eleitor e o seu voto, preservando assim o sigilo eleitoral.
  2. A verificação da integridade do banco eleitoral em formato CSV será realizada pelo software desenvolvido neste projeto ou por software desenvolvido em atendimento às diretrizes apresentadas na documentação deste projeto.

Recibo de voto

No momento que o eleitor concluir o seu voto, a urna eletrônica, solicitará uma senha para processamento do RECIBO DE VOTO. Somente de posse do recibo de voto, do número de título de eleitor e da senha cadastrada será possível fazer a auditoria do voto.

Com o uso do recibo de voto, o eleitor pode realizar uma auditoria visual do conteúdo de seu voto para checar se segue em conformidade, algo semelhante a checar o seu saldo em uma agência bancária.

O recibo de voto vincula o número de título do eleitor, a chave segura, a senha cadastrada pelo eleitor no momento da votação e a assinatura digital do voto do eleitor.

Desta forma o recibo de voto é um prova inequívoca e irrefutável do processamento do conteúdo do voto do eleitor, pois o próprio recibo fornece prova de sua validade e vínculo de propriedade, em outras palavras, o recibo de voto amarra todos os elementos de comprovação do conteúdo do voto e sua autoria, porém não se pode apontar a autoria do recibo de voto sem juntar as 3 partes:

  1. Recibo de voto;
  2. Número do título do eleitor;
  3. Senha do eleitor cadastrado no momento da votação.

Caso o eleitor destrua o recibo de voto ou perca a sua senha, não mais será possível realizar a auditoria de seu voto e fica impossibilitado qualquer vínculo entre o eleitor e o conteúdo de seu voto.

Com o recibo de voto, cada eleitor age semelhante a um fiscal do processo eleitoral, pois o recibo de voto fornece garantias de auditoria e conteúdo do voto contabilizado na apuração eleitoral.

No recibo de voto temos os seguintes campos:




  • Recibo de voto.
  • Entrada de número de titulo de eleitor e senha para auditoria do voto.
  • Auditoria a partir do recibo de voto.


  • QR CODE, contém uma chave segura que juntamente com a senha cadastrada no momento do voto, permite ao eleitor obter o acesso às informações de seu voto junto ao banco eleitoral.
  • ASSINATURA DIGITAL, contém a assinatura digital do voto do eleitor, assim se houver qualquer alteração no conteúdo do voto do eleitor, haverá quebra da integridade desta assinatura.

Ao finalizar a eleição, os votos contidos nas urnas eletrônicas serão sincronizados com o servidor e então o banco eleitoral será criado e “populado” a medida que segue o andamento da apuração. Ao final da apuração todos os votos estarão presentes no banco eleitoral e assim o eleitor pode realizar a leitura do seu recibo de voto e auditar o seu voto computado pelo sistema.

No momento de auditoria do voto serão visualizado dois campos extras:



  • DATA E HORA (PROCESSAMENTO), data e hora do momento que o seu voto foi processado pelo banco eleitoral.
  • SEU VOTO, informação em formato de texto livre sobre o conteúdo de seu voto.


Formato de entrega do recibo de voto

A entrega do recibo de voto ao eleitor é primordial para o funcionamento do sistema Voto Transparente e até o momento foram encontradas 4 maneiras de fazer isso, cada uma com os seus prós e contras, são elas:


  • 1) - Impressão do recibo de voto mediante o uso de impressora: Para isso seria necessária que cada urna eletrônica tivesse anexada a ela uma impressora para a realização da impressão do recibo de voto do eleitor, esta opção traz a desvantagem do valor de investimento para aquisição de uma impressora para cada urna eletrônica somada a necessidade de mão de obra especializada para em caso de problemas com a impressora no momento da impressão do recibo de voto.


  • 2) - Impressão do recibo de voto na tela da urna eletrônica: Esta opção leva em conta que hoje a população fácil acesso a aparelhos celular que tiram foto, e assim o eleitor poderia tirar uma foto do comprovante impresso na tela da urna eletrônica após a conclusão de seu voto, contudo esta opção entraria em desacordo com a legislação atual.
  • Recibo de voto.


  • 3) - Envio do recibo de voto por SMS após a conclusão da apuração eleitoral: Esta opção solicitaria ao eleitor para inserir o número de seu celular para que ao final da eleição lhe fosse encaminhado o recibo de voto em formado de SMS para o seu celular, com o uso da tecnologia aplicada ao Voto Transparente, esta opção não impactaria na quebra do sigilo do voto do eleitor, contudo levando em conta o número de eleitores que participaram da última eleição que foi superior a 100 milhões, o custo final SOMENTE para envio das mensagens de SMS poderiam passar facilmente de 3.5 milhões de reais.


Modelo de recibo de voto em formato de mensagem SMS

-- RECIBO DE VOTO DA ELEICAO 1/2021 --
CLIQUE NO LINK ABAIXO PARA AUDITAR O SEU VOTO
https://www.totstag.com/service.html#votoauditado-rcp:sec=ELZHo3nXCroQZpPz92dKb53gqeYM5u48JkbVumaqdr8NMuzwCE3h4CCdszTOPap7SWgTOUYnYcAZhe3Ch57QGfZsKnU5wl...
ASSINATURA DIGITAL
CFA9878116AD596C6F4F2975072C9B21B265A630BF52808394400142EFB801ED


  • 4) - Acesso ao recibo de voto diretamente no servidor: Nesta opção o eleitor receberá um número de protocolo no momento que concluir o seu voto, algo semelhante a este SDR-5KJ-569-GBM. Com este protocolo em mãos, o eleitor acessa o sistema Voto Transparente e obtém o seu RECIBO DE VOTO. Este opção de entrega de recibo de voto ao eleitor, reduz custos sem comprometer a segurança do sigilo eleitoral.


O formato número 4 apresenta a melhor relação custo benefício mantendo ainda um alto nível de segurança para o sigilo do voto do eleitor.

Integração com a urna eletrônica

O sistema de voto eletrônico atual no Brasil é composto de 2 partes:

  1. A urna eletrônica: Nela o eleitor deposita o seu voto que será posteriormente sincronizado com o servidor central do órgão responsável pelo processo de contagem eleitoral.
  2. O servidor central de apuração eleitoral: Nele serão armazenados e computados os votos ao final do período eleitoral de modo entregar o publicação do resultado da eleição.

A integração entre os sistema Voto Transparente e a urna eletrônica seria realizado no formato de “plugin”, ou seja, o processo novo é adicionado ao atual de modo que pode ser retirado a qualquer momento, assim o novo processo não interfere no atual, reduzindo custos e fornecendo agilidade de implantação.

O ponto de acesso do Voto Transparente será na urna eletrônica, de onde o conteúdo do voto do eleitor, após um processo de anonimização dos dados, são enviados a partir da urna eletrônica para o sistema Voto Transparente que então efetua o seu processamento de acordo com o diagrama de projeto já detalhado nesta documentação.

Importante observar que o sistema Voto Transparente não acessa as informações na urna eletrônica, e sim estas informações após processamento de anonimização pela urna eletrônica serão enviadas para o sistema Voto Transparente, vale reforçar este ponto para evidenciar que o sistema Voto Transparente trabalha de maneira passiva, sem a possibilidade de alterar os dados processados pelo sistema de apuração eleitoral vigente.


Uso das chaves na auditoria do voto

No banco eleitoral a chave de acesso ao voto será deduzida a partir da chave segura (QR code, SMS) do recibo de voto do eleitor adicionada da senha numérica cadastrada no momento do voto.

O eleitor possui está chave segura (QR code, SMS) armazenada no QR code do recibo de voto, ou mesmo em um link enviado via SMS. Com a leitura deste QR code, ou acesso ao link enviado por SMS, o eleitor será direcionado ao site do órgão responsável pelo processo eleitoral, onde será solicitado a entrada de seu número de título de eleitor e sua senha numérica cadastrada no momento do voto e assim será permitido o acesso a auditoria de seu voto.

A chave de acesso ao voto é obtida a partir de um algoritmo de mão única, conforme esquematização abaixo




HASH_SHA512 ( chave segura (QR code, SMS) + título de eleitor + senha numérica cadastrada ) = chave de acesso ao voto




HASH_SHA512 ( ELZHo... (128 caracteres) ...WNXQN + 840726997999 + 347875 ) = B1314... (128 caracteres) ...E6142




HASH_SHA512 (

ELZHo3nXCroQZpPz92dKb53gqeYM5u48
JkbVumaqdr8NMuzwCE3h4CCdszTOPap7
SWgTOUYnYcAZhe3Ch57QGfZsKnU5wlyt
uYVOkvWCO6S4sG2foG1QY8JRYwDWNXQN

+ 840726997999

+ 347875 )

=

B1314DD0E0873B7330D56F0F8901E866
2E40939427FAE1F553888B532D23DC56
A6E38EA6A4C2E02BC775EA9A0C6DBAC5
76B95D7651832ADC869079BCF6AE6142


A chave de acesso ao voto permite ao eleitor localizar o seu voto dentro banco eleitoral e assim realizar a auditoria do voto ao mesmo tempo que protege a identidade do eleitor.


Banco eleitoral em formato CSV (parâmetros separados por vírgula).


Relatório de exportação de banco eleitoral em formato CSV.

Contabilização eleitoral

O conteúdo do banco eleitoral em formato .CSV, permite a contabilização de todos os votos de uma eleição.


Cabeçário do relatório de contabilização eleitoral.


Rodapé do relatório de contabilização eleitoral.



Fraudes combatidas pelo voto transparente

Alteração do conteúdo do voto do eleitor

Se houver alteração no conteúdo do voto do eleitor, este será detectado pela quebra de integridade do banco de dados e também pela auditoria do voto pelo eleitor.


Criação de votos fantasma

Na arquivo .CSV serão listados todos os números de título de eleitor dos eleitores que participaram da eleição, assim em tempo futuro pessoas podem verificar pelo número de título de eleitor registrado no arquivo .CSV, se algum deles correspondem ao voto de pessoas já falecidas ou mesmo se há ocorrência de número de título de eleitor não existente.


Retirada de votos válidos

Se houver retirada de votos, será detectado a quebra de integridade do banco de dados, e também será percebida pelo eleitor, pois não haverá correspondência para o seu RECIBO DE VOTO.


Inserção de votos inválidos

Se houver inserção de votos, será detectado a quebra de integridade do banco de dados.



Nível de proteção do sigilo eleitoral fornecido pelo recibo de votação

Para quebrar o sigilo de um recibo de votação há necessidade de três coisas:

  1. Posse do recibo de voto;
  2. Posse do banco eleitoral e
  3. Muito, muito e muito poder computacional nas mãos de um profissional de TI.


De posse do recibo eleitoral, o atacante teria ainda que descobrir qual é o número do título de eleitor correspondente àquele recibo de votação e ainda descobrir a senha utilizada pelo cliente.

Para fazer isso por força bruta, devemos levar em conta que o número do título de eleitor possui 12 dígitos e a senha utilizada pelo eleitor pode ter até 12 dígitos também.

12 dígitos correspondem a um número de combinações do tamanho de 1 trilhão.

Assim, o número de combinações possíveis estariam próximo ao número representado por 1 trilhão X 1 trilhão.

Para dificultar ainda mais, para cada uma combinação entre a chave segura do QR code, o número o título de eleitor e a senha do eleitor, ainda teria que ser aplicado um HASH SHA512 sobre esta chave para se obter a chave será utilizada para vasculhar o banco eleitoral a procura dos dados do voto do eleitor, algo assim.


Passo 1: Gerar a combinação teste




HASH_SHA512 ( chave segura (QR code, SMS) + título de eleitor + senha numérica cadastrada ) = chave de acesso ao voto




HASH_SHA512 ( ELZHo... (128 caracteres) ...WNXQN + 840726997999 + 347875 ) = B1314... (128 caracteres) ...E6142




HASH_SHA512 (

ELZHo3nXCroQZpPz92dKb53gqeYM5u48
JkbVumaqdr8NMuzwCE3h4CCdszTOPap7
SWgTOUYnYcAZhe3Ch57QGfZsKnU5wlyt
uYVOkvWCO6S4sG2foG1QY8JRYwDWNXQN

+ 840726997999

+ 347875 )

=

B1314DD0E0873B7330D56F0F8901E866
2E40939427FAE1F553888B532D23DC56
A6E38EA6A4C2E02BC775EA9A0C6DBAC5
76B95D7651832ADC869079BCF6AE6142


Passo 2: Efetuar a pesquisa no banco eleitoral com o HASH obtido no passo anterior


Contudo já no momento de gerar o HASH SHA512 o atacante vai se deparar com uma limitante computacional, pois esta rotina faz uso de um recurso computacional previsível e basta ela para fazer uma previsão por baixo, assim muito otimista, do tempo que o atacante levaria para quebrar o sigilo eleitoral de um recibo de votação.

O números envolvidos são muito grandes e para facilitar o cálculo, vamos imaginar que o atacante possui em seu computador a relação de todos os números de títulos eleitorais válidos para o Brasil, isto seriam aproximadamente 150 milhões como pode ser obtido em uma rápida pesquisa pela internet, isso já tornaria a tarefa dele menos penosa!


Assim:

150 milhões X 1 trilhão = 1,5 E20

Um computador como este aqui que estou usando possui um PODER COMPUTACIONAL de aproximadamente 200.000 HASH SHA512/segundo. Com estes valores podemos estimar o tempo de processamento mínimo em anos para quebrar o sigilo de um único recibo de votação.


Tempo de processamento em anos  = (1,5 E20 / (200000 X 86400 x 365 x 2))


Resumindo os cálculos, este computador levaria mais de 2 milhões de anos para quebrar o sigilo de um único recibo de votação.



Vazamento de dados

Uma séria preocupação de profissionais de TI e dos clientes de um sistema computacional em nuvem está relacionado a ataques de hackers que podem expor o conteúdo do banco de dados que armazenam as informações processadas por um sistema.

No sistema Voto Transparente, esta preocupação não encontra lastro, isto acontece porque no momento que as informações são processadas para envio, ainda na urna eletrônica, estas sofrem um processo de ANONIMIZAÇÃO em conjunto com a aplicação de outros processos criptográficos que tornam em qualquer dos cenários de tentativa de quebra de sigilo eleitoral, um desafio igual ou superior ao relatado no item anterior (Nível de proteção do sigilo eleitoral fornecido pelo recibo de votação) cujo o poder computacional de um PC atual levaria tempo estimado e superior a 2 milhões de anos para quebra do sigilo eleitoral de um eleitor.



Software Voto Transparente na Web

Para você ter uma experiência on-line de uso da tecnologia Voto Transparente acesso o link:




Software Voto Transparente para PC

O voto transparente para o seu PC é um software desenvolvido para que você mesmo possa auditar o banco eleitoral fornecido pela autoridade eleitoral.

Com este software você poderá criar um banco eleitoral simulado, efetuar testes de integridade, contabilização de votos, fazer conferência de recibo de voto, pesquisar por número do título de eleitor que participou do pleito eleitoral dentre outros recursos.


Downloads

Voto Transparente para PC
Disponível para Mac, Linux e Windows
Link Data Check Sum - SHA 256
Voto Transparente para PC - versão 2.0 12/02/2021 fdc60c0f3cee1e05e0b7e44c2d6c626a9f12498280816d281526865b74cd413e
Voto Transparente para PC - versão 1.0 12/01/2021 1811d8de0de78987b5f53c72837b016eeb954278c4b5f8eca2a337a120970679

Para utilizar o sistema basta fazer o download da versão atual, armazenar o aplicativo em um pasta de seu computador e então seguir os passos abaixo.

Passo a passo para uso

Passo 1 - Faça o download do arquivo


Faça o download do software no endereço eletrônico:



Então selecione a versão atual, baixe o arquivo e descompacte em uma pasta de seu computador.


Passo 2 - Acesse o terminal de comandos de se computador:



Se estiver utilizando o Windows acesse o prompt de comando de seu computador a partir da entrada do comando CMD na entrada de pesquisa do Windows.

Se estiver utilizando o Mac, acesse o aplicativo TERMINAL.


Aplicativo terminal do MAC para entrada de linhas de comando.


Passo 3 - Acesse a pasta onde você armazenou o arquivo


Via prompt de comando (Windows) ou linha de comando aplicada ao aplicativo terminal (mac), entre com o comando de acesso a pasta onde foi armazenado o arquivo voto_transparente.jar

Estou usando um MAC e armazenei o arquivo na pasta:


/Users/luizjlm/00dados/voto_transparente/voto_transparente.jar


Para acessar a pasta use o comando abaixo no terminal do Mac:

cd /Users/luizjlm/00dados/voto_transparente/


Acesso a pasta onde esta localizado o aplicativo voto_transparente.ja


Passo 4 - Execute os comandos apropriadamente.

Entre com os comandos conforme a listas de comandos disponíveis neste manual. Acesse o gabarito de testes para ganhar familiaridade com os comandos.

Comandos

Boas vindas

welcome


Mostra a mensagem de boas vindas
.:. welcome


Internacionalização

lang


Seleciona a linguagem do sistema com suporte a:
[pt-BR] - Português do Brasil
[en-US] - Ingles
.:. lang pt-BR
.:. lang en-US


Gestão de banco de dados CSV

election


Seleciona a linguagem do sistema com suporte a:
Roda todo o processo de criar, popular, verificar integridade do arquivo e contabilizar os votos de uma eleição. Usa os seguintes parâmetros:
- Número de votos, quantidade total do número de votos aleatórios inseridos no arquivo CSV
- Chunk, número que representa o tamanho dos blocos de votos enviados para processamento.
- Delay, atraso em milissegundos, entre o processamento de cada bloco de votos. Veja também CMD max-votes
.:. election 100000 1000 5000
.:. election 100000 1000
.:. election 100000
.:. election


populate


Utilizado para criar e "popular" um arquivo com votos aleatórios. Usa os seguintes parâmetros:
- Numero de votos, quantidade total do número de votos aleatórios inseridos no arquivo CSV
- Chunk, número que representa o tamanho dos blocos de votos enviados para processamento.
- Delay, atraso em milissegundos, entre o processamento de cada bloco de votos. Veja também CMD max-votes
.:. populate 100000 1000 5000
.:. populate 100000 1000
.:. populate 100000
.:. populate


check


Verifica a integridade de um arquivo CSV que representa o banco eleitoral. Usa os seguintes parâmetros:
- localização do arquivo, endereço físico do arquivo no sistema operacional.
Na falta deste argumento será utilizado a localização do último banco eleitoral criado pelo sistema.
.:. check /Users/luizjlm/.../out-files/20210102_14-04-21_ELECTION_100.csv (Mac)
.:. check C:\\Documents\\...\\out-files/20210102_14-04-21_ELECTION_100.csv (Windows)
.:. check


load


Carrega o banco eleitoral no sistema. Usa os seguintes parâmetros:
- localização do arquivo, endereço físico do arquivo no sistema operacional.
.:. load /Users/luizjlm/.../out-files/20210102_14-04-21_ELECTION_100.csv (Mac)
.:. load C:\\Documents\\...\\out-files/20210102_14-04-21_ELECTION_100.csv (Windows)


count-votes


Realiza a contabilidade dos votos armazenados em arquivo CSV que representa o banco eleitoral.
Usa os seguintes parâmetros:
- localização do arquivo, endereço físico do arquivo no sistema operacional.
Na falta deste argumento será utilizado a localização do último banco eleitoral criado pelo sistema.
.:. count-votes /Users/luizjlm/.../out-files/20210102_14-04-21_ELECTION_100.csv (Mac)
.:. count-votes C:\\Documents\\...\\out-files/20210102_14-04-21_ELECTION_100.csv (Windows)
.:. count-votes

Pesquisa

rcp


Utilizado para para fazer a auditoria de um recibo de voto, e assim confirmar o conteúdo do voto armazenado no banco eleitoral
- Chave de segurança, representa a chave de segurança fornecida no recibo de voto.
- Senha cadastrada, representa a senha cadastrada no momento do voto.
Obs.: Este comando será gerado automaticamente no log do sistema a medida que votos aleatórios forem populados no banco eleitoral.
.:. rcp sec=<Chave de segurança>:tn=<Titulo de eleitor>


loc-id


Verifica se o número do título do eleitor foi registrado no banco eleitoral.
Obs.: Este comando será gerado automaticamente no log do sistema a medida que votos aleatórios forem populados no banco eleitoral.
.:. loc-id 807078483480


loc-id-hash


Verifica se o número do título do eleitor foi registrado no banco eleitoral.
O termo hash inserido no comando indica que será aplicado o MD5 sobre o título de eleitor antes de processar a busca, assim MD5(807078483480) = 4653AF8520D24CF81398DC309EACB20F
.:. loc-id-hash 807078483480

Infraestrutura

help


Carrega informações de ajuda.
.:. help


system


Mostra as propriedades carregadas pelo sistema
.:. system


log


Ativa e inativa o processamento de logs pelo sistema
.:. log ON
.:. log OFF


max-votes


Limita o número de votos aleatórios processados. Você pode modificar para o valor que desejar e deve levar em conta o impacto no sistema utilizado.
Por exemplo para um comando de criação de 150 milhões de votos aleatórios, representaria a criação de um arquivo CSV de aproximadamente 63 GB e algumas horas de processamento em um computador pessoal.
.:. max.number.votes=150000000 - valor padrao


power


Realiza um teste de poder computacional de seu computador expresso pelo número de HASH SHA512 processados por segundo.
- Número de hash, número de HASH SHA512 gerados para se obter a média, quanto maior este número, maior precisão do resultado.
O valor mínimo é de 5000000.
Obs.: Para maior precisão na execução deste comando, recomenda-se antes de sua execução, finalizar o maior número de processos possíveis no computador.
.:. power
.:. power 10000000

Gabarito de teste

Nesta tabela possui uma lista de comandos do tipo copia e cola para você testar e se familiarizar com o software.


Lista de comandos para teste
Comando Descrição
java -jar vtpc.jar welcome Exibe mensagem de boas vindas.
java -jar vtpc.jar help Visualiza instruções de ajuda
java -jar vtpc.jar lang pt-BR Altera a linguagem do software para português do Brasil.
java -jar vtpc.jar lang en-US Altera a linguagem do software para inglês.
java -jar vtpc.jar log ON Ativa o processamento de logs pelo software.
java -jar vtpc.jar log OFF Destiva o processamento de logs pelo software.
java -jar vtpc.jar populate 10000 Cria e popula um banco eleitoral com 10000 votos aleatórios.
java -jar vtpc.jar election 10000 Cria, "popula", faz check de integridade e contabiliza a votação para 10000 votos criados aleatoriamente.
java -jar vtpc.jar system Mostra o conteúdo das variáveis carregadas no software.
java -jar vtpc.jar load /.../out-files/20210105_12-57-56_ELECTION_10000.csv Carrega o banco eleitoral do endereço de arquivo informado.
java -jar vtpc.jar count-votes Contabiliza a votação para o banco eleitoral carregado no software.
java -jar vtpc.jar check Realiza o check de integridade do banco eleitoral carregado no software.
java -jar vtpc.jar loc-id 224042581923 Confirma a existência do número de título de eleitor no banco eleitoral.
java -jar vtpc.jar loc-id-hash 224042581923 Confirma a existência do número de título de eleitor no banco eleitoral, levando em conta que o número do título eleitoral esteja protegido por HASH MD5 no banco eleitoral.
java -jar vtpc.jar max-votes 150000000 Atualiza o valor para o máximo número de votos criados aleatoriamente em um banco eleitoral.
java -jar vtpc.jar power Realiza um teste de poder computacional do computador.

Exemplo de aplicação

Entrada de linha de comando de teste.


Início da execução do comando.


Final da execução do comando.


Obs.: Substitua nas linhas de comando o termo voto_tranparente.jar por vtpc.jar.

Estrutura de pastas

No momento que você executar os comandos alguns arquivos e pastas serão criadas dentro da pasta de você armazenou o arquivo voto_transparente.jar, são elas:

  • a) config-files, que armazena os arquivos de configuração do software.
    • i) - config.properties, arquivo que armazena as propriedades de configuração do software.
  • b) log-files, que armazena os arquivos de log do software.
  • c) out-files, que armazena os arquivos CSV do bando eleitoral criado pelo software.
  • d) NOTICE.txt. arquivo que possui informações sobre licença do software e informações relacionadas.
  • e) welcome.txt, Armazena o texto de boas vindas do desenvolvedor do software.


Estrutura de pastas criadas pelo voto_transparente.jar

Campos do banco eleitoral

Neste item vamos tratar dos detalhes técnicos de implementação do sistema voto transparente, será fornecidos os detalhes e relacionamento de cada campo de dado, lembre-se de que o banco eleitoral em formato CSV é uma cópia fidedigna do banco eleitoral armazenada em um SGBD de tal modo que bancos de dados tais como PostGreSQL permitem a exportação direta deste arquivo CSV para popular uma tabela do banco de dados.


Estrutura do banco eleitoral

Sequência de campos tabulados no arquivo .CSV (campos separados por vírgula)


SEQUENTIAL
KEY_VOTE_ID
COD_STATE
COD_CITY
HASH_VOTE
MILISECONDS_IN_SERVER
CHAIN
VOTER_ID
TOKEN_VOTE


Para melhor leitura, cada campo de uma linha de registro será marcada com cores distintas e em linhas subsequentes, lembre que em um arquivo CSV, todas as informações deste bloco abaixo estarão localizadas em uma única linha do arquivo, assim cada linha do arquivo CSV representa o registro de um voto pelo eleitor e as vírgulas separam cada campo relativo ao voto.



0000100000,
8CAEFD046C23084FE7AAE0409449EB1D467E0779EBE7E0CCB35110B79021ED4A91B9E6D967B16061F21951B633FE09DA24CE7D371C3FB2D39B0DAFC0C5D4403E,
22,
2200103,
CFA9878116AD596C6F4F2975072C9B21B265A630BF52808394400142EFB801ED,
1609862499553,
4760FB8532A8F61959CD5D26E341EC3C5D6B876F53770E310FC344CC39DCBF63,
316609424536,
PRESIDENTE:Isaac Rodrigues Ramos:41;SENADOR:Maria Clara Pires:721;DEPUTADOFEDERAL:Leonardo Guimaraes Medeiros:6043


Banco eleitoral em formato CSV.


Obs.:

  1. A sequência dos campos tabulados no arquivo .CSV difere da sequência de campos armazenada no tabela do banco de dados, isto acontece porque a tabela de banco de dados leva em conta a interação entre os campos já o arquivo CSV leva em conta o alinhamento visual das informações, contudo isto é uma preferência pessoal.


Integridade dos votos armazenados no servidor

No servidor onde são computados os votos de uma eleição será criado um banco de dados contendo uma única tabela com 9 colunas, a cada voto sincronizado entre a urna eletrônica e o servidor, deverá ser processado em tempo real preenchendo as colunas desta tabela cujos campos serão detalhados abaixo.


Detalhamento de campos do arquivo CSV

Coluna: SEQUENTIAL


A coluna SEQUENTIAL representa a sequência de entrada de votos na tabela, o seu valor é BIGINT. É ESTRITAMENTE importante que a criação deste de cada linha da tabela seja sequencial e acrescida de 1 unidade para cada registro subsequente. .:. ( 1, 2, 3, 4, 5, 6, 7 … N ).

Exemplo (registro de arquivo .CSV):

0000100000,
8CAEFD046C23084FE7AAE0409449EB1D467E0779EBE7E0CCB35110B79021ED4A91B9E6D967B16061F21951B633FE09DA24CE7D371C3FB2D39B0DAFC0C5D4403E,
22,
2200103,
CFA9878116AD596C6F4F2975072C9B21B265A630BF52808394400142EFB801ED,
1609862499553,
4760FB8532A8F61959CD5D26E341EC3C5D6B876F53770E310FC344CC39DCBF63,
316609424536,
PRESIDENTE:Isaac Rodrigues Ramos:41;SENADOR:Maria Clara Pires:721;DEPUTADOFEDERAL:Leonardo Guimaraes Medeiros:6043


Coluna: KEY_VOTE_ID


Este campo é criado a partir uso de uma chave SEGURA obtida a partir da urna eletrônica e sua criação é obtida da aplicação de HASH SHA512 a concatenação sem uso de espaços ou qualquer outro caracter entre as chaves:

  1. Chave segura aleatória gerada na urna eletrônica.
  2. Número do título de eleitor
  3. Senha cadastrada momento da voto pelo eleitor


Concatena a chave aleatória segura [1], número do título de eleitor [2], senha cadastrada no momento do voto [3] e então aplica o HASH SHA512 [4]


KEY_VOTE_ID = SHA512(<<CHAVE SEGURA>> <<TÍTULO DO ELEITOR>> <<SENHA DE ELEITOR>>)


SHA512(

x5mcZSztpib0UygLIpgUM5xKZtFH9iyR
QaaaBmbMgi7nQrkA5gqNwwvmH6J3VPVi
mb2ZH5AhXldhHmnA5pLhnkkfeelAAw3O
Qzd2X0EdF3S9PLcrD0sdIuVelmK8Z8Pg

+ 840726997999

+ 783451)

=

8CAEFD046C23084FE7AAE0409449EB1D
467E0779EBE7E0CCB35110B79021ED4A
91B9E6D967B16061F21951B633FE09DA
24CE7D371C3FB2D39B0DAFC0C5D4403E


Exemplo (registro de arquivo .CSV):

0000100000,
8CAEFD046C23084FE7AAE0409449EB1D467E0779EBE7E0CCB35110B79021ED4A91B9E6D967B16061F21951B633FE09DA24CE7D371C3FB2D39B0DAFC0C5D4403E,
22,
2200103,
CFA9878116AD596C6F4F2975072C9B21B265A630BF52808394400142EFB801ED,
1609862499553,
4760FB8532A8F61959CD5D26E341EC3C5D6B876F53770E310FC344CC39DCBF63,
316609424536,
PRESIDENTE:Isaac Rodrigues Ramos:41;SENADOR:Maria Clara Pires:721;DEPUTADOFEDERAL:Leonardo Guimaraes Medeiros:6043


Obs.:

  1. O valor da chave aleatória segura DEVERÁ ser alfanumérica e case-sensitive (com uso de maiúsculas e minúsculas).
  2. SHA512 representa o algoritmo de mão única aplicado à concatenação das chaves.
  3. O valor de KEY_VOTE_ID é UPPERCASE (somente maiúsculo).



Coluna: TOKEN_VOTE


Neste campo será armazenado uma String (texto) facilmente lido por humanos que contém o conteúdo do voto processado pelo eleitor, ou seja, este é o registro do voto do eleitor inserido na linha do arquivo. A descrição do voto do eleitor contém a sequência cargo e número do candidato separado por dois pontos “:” e ponto e vírgula “;” separando os candidatos.


Exemplo (registro de arquivo .CSV):

0000100000,
8CAEFD046C23084FE7AAE0409449EB1D467E0779EBE7E0CCB35110B79021ED4A91B9E6D967B16061F21951B633FE09DA24CE7D371C3FB2D39B0DAFC0C5D4403E,
22,
2200103,
CFA9878116AD596C6F4F2975072C9B21B265A630BF52808394400142EFB801ED,
1609862499553,
4760FB8532A8F61959CD5D26E341EC3C5D6B876F53770E310FC344CC39DCBF63,
316609424536,
PRESIDENTE:Isaac Rodrigues Ramos:41;SENADOR:Maria Clara Pires:721;DEPUTADOFEDERAL:Leonardo Guimaraes Medeiros:6043


Obs.:

  1. Nomes e números de candidatos utilizados neste exemplo são fictícios, qualquer semelhança com outro nome é mera coincidência.
  2. Devido a flexibilidade da apresentação do voto este formato pode ser utilizado para diferentes formatos de eleição.


Coluna: COD_STATE


Código IBGE que representa a unidade de federação de contagem do voto.

Exemplo: Distrito Federal: 53

Exemplo (registro de arquivo .CSV):

0000100000,
8CAEFD046C23084FE7AAE0409449EB1D467E0779EBE7E0CCB35110B79021ED4A91B9E6D967B16061F21951B633FE09DA24CE7D371C3FB2D39B0DAFC0C5D4403E,
22,
2200103,
CFA9878116AD596C6F4F2975072C9B21B265A630BF52808394400142EFB801ED,
1609862499553,
4760FB8532A8F61959CD5D26E341EC3C5D6B876F53770E310FC344CC39DCBF63,
316609424536,
PRESIDENTE:Isaac Rodrigues Ramos:41;SENADOR:Maria Clara Pires:721;DEPUTADOFEDERAL:Leonardo Guimaraes Medeiros:6043


Coluna: COD_CITY


Código IBGE que representa o município de contagem do voto.

Exemplo: Brasília: 5300108


Exemplo (registro de arquivo .CSV):

0000100000,
8CAEFD046C23084FE7AAE0409449EB1D467E0779EBE7E0CCB35110B79021ED4A91B9E6D967B16061F21951B633FE09DA24CE7D371C3FB2D39B0DAFC0C5D4403E,
22,
2200103,
CFA9878116AD596C6F4F2975072C9B21B265A630BF52808394400142EFB801ED,
1609862499553,
4760FB8532A8F61959CD5D26E341EC3C5D6B876F53770E310FC344CC39DCBF63,
316609424536,
PRESIDENTE:Isaac Rodrigues Ramos:41;SENADOR:Maria Clara Pires:721;DEPUTADOFEDERAL:Leonardo Guimaraes Medeiros:6043


Coluna: HASH_VOTE


Este campo armazena a assinatura do voto, assim faz-se uso de um algoritmo de MÃO ÚNICA (SHA256) para armazenar a assinatura do voto e garantir a sua INVIOLABILIDADE. Este hash será obtido a partir da concatenação dos campos

  1. KEY_VOTE_ID
  2. TOKEN_VOTE
  3. COD_STATE
  4. COD_CITY

Concatena a chave KEY_VOTE_ID, TOKEN_VOTE, COD_STATE, COD_CITY separadas por pifem “-” e então aplica o HASH SHA256

HASH_VOTE = HASH SHA256(KEY_VOTE_ID-TOKEN_VOTE-COD_STATE-COD_CITY)


SHA256( 8CAEFD046C23084FE7AAE0409449EB1D467E0779EBE7E0CCB35110B79021ED4A91B9E6D967B16061F21951B633FE09DA24CE7D371C3FB2D39B0DAFC0C5D4403E - PRESIDENTE:Isaac Rodrigues Ramos:41;SENADOR:Maria Clara Pires:721;DEPUTADOFEDERAL:Leonardo Guimaraes Medeiros:6043 - 22 - 2200103)


HASH_VOTE = CFA9878116AD596C6F4F2975072C9B21B265A630BF52808394400142EFB801ED


Exemplo (registro de arquivo .CSV):

0000100000,
8CAEFD046C23084FE7AAE0409449EB1D467E0779EBE7E0CCB35110B79021ED4A91B9E6D967B16061F21951B633FE09DA24CE7D371C3FB2D39B0DAFC0C5D4403E,
22,
2200103,
CFA9878116AD596C6F4F2975072C9B21B265A630BF52808394400142EFB801ED,
1609862499553,
4760FB8532A8F61959CD5D26E341EC3C5D6B876F53770E310FC344CC39DCBF63,
316609424536,
PRESIDENTE:Isaac Rodrigues Ramos:41;SENADOR:Maria Clara Pires:721;DEPUTADOFEDERAL:Leonardo Guimaraes Medeiros:6043


Obs.:

  1. SHA256 representa o algoritmo de mão única aplicado à concatenação das chaves.
  2. O valor de HASH_VOTE é UPPERCASE (somente maiúsculo).
  3. O valor do HASH_VOTE é também aplicado como assinatura na parte inferior do RECIBO DE VOTO. Assim este valor garante a auditoria do registro de voto do eleitor.


Coluna: MILISECONDS_IN_SERVER


Este campo de dados armazenará os milissegundos da respectiva data hora do exato momento em que o respectivo voto foi sincronizado na tabela votes_chain, assim poderá ser utilizado posteriormente como informação adicional para complementar a auditoria do processo eleitoral.

Este valor representa uma o número de milissegundos passados desde 1 de janeiro de 1970 (Unix Epoch). Este valor é de tipo LONG e pode ser obtido, em linguagem de programação Java, pelo método Date.getTime().

Exemplo (registro de arquivo .CSV):

0000100000,
8CAEFD046C23084FE7AAE0409449EB1D467E0779EBE7E0CCB35110B79021ED4A91B9E6D967B16061F21951B633FE09DA24CE7D371C3FB2D39B0DAFC0C5D4403E,
22,
2200103,
CFA9878116AD596C6F4F2975072C9B21B265A630BF52808394400142EFB801ED,
1609862499553,
4760FB8532A8F61959CD5D26E341EC3C5D6B876F53770E310FC344CC39DCBF63,
316609424536,
PRESIDENTE:Isaac Rodrigues Ramos:41;SENADOR:Maria Clara Pires:721;DEPUTADOFEDERAL:Leonardo Guimaraes Medeiros:6043


Coluna: CHAIN


Este campo representa o elo de uma corrente que une todos os votos da tabela, o seu valor é obtido a partir do valor da chain do registro imediatamente anterior concatenado com o valor da chain do registro atual.

Assim a chain garante a integridade de todos os votos do banco eleitoral, desta forma cada voto está vinculado ao voto do registro imediatamente anterior semelhante aos elos de um corrente, desta forma o sistema não permite a alteração, inserção ou retirada de registro que represente o voto do eleitor sem que o banco eleitoral perca a sua integridade.

Assim a chain segue a fórmula:

CHAIN[i](t) = SHA256 (<<SEQUENTIAL>><<HASH_VOTE>><<MILISECONDS_IN_SERVER>>)

CHAIN[i] = SHA256 (<< CHAIN[i](t)>><<CHAIN[i - 1]>>)

onde:

CHAIN[i](t) representa um valor temporário para a chain.
CHAIN[i - 1] representa um da chain da linha de registro imediatamente anterior.
CHAIN[i] representa um valor da chain para o registro atual.


e

i = registro atual i - 1 = registro imediatamente anterior. t = Valor temporário


Exemplo (registro de arquivo .CSV):

0000099999,
AC4A293F94F3DBEC6B174E6E48D725A865DC604509F2826549F232BD1D302C533C6513113F6C6225963491CB24BAD52B80878F3DAAF4C832C495147B66F44F2F,
25,
2503704,
93F1BA26BFFF298418337F63E4E7C5FF12890AFEB8E0C0913D0D41114EDD539A,
1609862499552,
54AD203E6FB6744F7E8DDE1602D2BB88E7341B01A1081D4BD5CD5BFAD66808A2,
270359970763,PRESIDENTE:Arthur Guimaraes Farias:31;SENADOR:Leonardo Moreira Henrique:321;DEPUTADOFEDERAL:Leonardo Guimaraes Medeiros:6043


0000100000,
8CAEFD046C23084FE7AAE0409449EB1D467E0779EBE7E0CCB35110B79021ED4A91B9E6D967B16061F21951B633FE09DA24CE7D371C3FB2D39B0DAFC0C5D4403E,
22,
2200103,
CFA9878116AD596C6F4F2975072C9B21B265A630BF52808394400142EFB801ED,
1609862499553,
4760FB8532A8F61959CD5D26E341EC3C5D6B876F53770E310FC344CC39DCBF63,
316609424536,
PRESIDENTE:Isaac Rodrigues Ramos:41;SENADOR:Maria Clara Pires:721;DEPUTADOFEDERAL:Leonardo Guimaraes Medeiros:6043


CHAIN[i](t) = SHA256 (<<SEQUENTIAL>><<HASH_VOTE>><<MILISECONDS_IN_SERVER>>)

CHAIN[i](t) = SHA256 (100000CFA9878116AD596C6F4F2975072C9B21B265A630BF52808394400142EFB801ED1609862499553)

CHAIN[i](t) = E6D10485E9416627AFE41A3D240512F2603182032793D56FD477082693A280D3


CHAIN[i] = SHA256 (<< CHAIN[i](t)>><<CHAIN[i - 1]>>)

CHAIN[i] = SHA256 (E6D10485E9416627AFE41A3D240512F2603182032793D56FD477082693A280D3 54AD203E6FB6744F7E8DDE1602D2BB88E7341B01A1081D4BD5CD5BFAD66808A2)

CHAIN[i] = 4760FB8532A8F61959CD5D26E341EC3C5D6B876F53770E310FC344CC39DCBF63


Obs.:

  1. Retira-se os zeros a esquerda para calculo da chain ( 0000100000 —> 100000 )
  2. O processamento das chain DEVEM ser realizados dinamicamente à medida que os votos são sincronizados pelas urnas eletrônicas. NUNCA deve isolar este procedimento para o final da eleição. O encadeamento dinâmico dos pacotes É ALTAMENTE IMPORTANTE para coibir a possibilidade de fraudes durante o processamento dos votos.
  3. No final do processo de contagem de votos, o valor da chain do último registro deverá ser publicado no RELATÓRIO DE EXPORTAÇÃO DE ARQUIVO DE AUDITORIA ELEITORAL, relacionado ao banco eleitoral em formato CSV e este será assinado digitalmente pela autoridade eleitoral. Sendo mais específico, a assinatura digital será realizada sobre este relatório que possui em seu conteúdo a assinatura de mão única SHA512 do arquivo que representa o banco eleitoral em formato CSV.


Relatório de exportação de banco eleitoral para arquivo CSV.


Coluna: VOTER_ID


Número do título de eleitor. Este campo garante que o mesmo eleitor não vote mais de uma vez, pois assim que o número do título de eleitor for utilizado para preencher o registro do voto não deverá permitir entrada de voto para o mesmo número, ou seja, garantirá um voto por eleitor.

Desta forma todos os números de título de eleitor pertencentes a cidadãos que participaram da eleição estarão listados nesta coluna e assim disponíveis para futuras auditorias.

IMPORTANTE observar que o número de título de eleitor não corresponde a mesma linha do voto, os números de títulos de eleitor serão permutados de forma aleatória entre as linhas de registro tornando impossível realizar o vínculo direto entre título de eleitor e o voto do eleitor, mantendo assim o sigilo do voto. Assim, o número do título de eleitor fornecerá unicamente a informação dos participantes do processo eleitoral.


Exemplo (registro de arquivo .CSV):

0000100000,
8CAEFD046C23084FE7AAE0409449EB1D467E0779EBE7E0CCB35110B79021ED4A91B9E6D967B16061F21951B633FE09DA24CE7D371C3FB2D39B0DAFC0C5D4403E,
22,
2200103,
CFA9878116AD596C6F4F2975072C9B21B265A630BF52808394400142EFB801ED,
1609862499553,
4760FB8532A8F61959CD5D26E341EC3C5D6B876F53770E310FC344CC39DCBF63,
316609424536,
PRESIDENTE:Isaac Rodrigues Ramos:41;SENADOR:Maria Clara Pires:721;DEPUTADOFEDERAL:Leonardo Guimaraes Medeiros:6043


Coluna: VOTER_DATA (facultativa)


Neste campo estará armazenado em formato de texto livre o conteúdo dos dados do eleitor, tal como nome, sobrenome, estado, município e data de nascimento. Estas informações serão armazenadas mediante o uso de forte criptografia e recuperadas SOMENTE pelo eleitor a partir do RECIBO DE VOTO.


Exemplo (registro de arquivo .CSV):

0000100000,
8CAEFD046C23084FE7AAE0409449EB1D467E0779EBE7E0CCB35110B79021ED4A91B9E6D967B16061F21951B633FE09DA24CE7D371C3FB2D39B0DAFC0C5D4403E,
22,
2200103,
CFA9878116AD596C6F4F2975072C9B21B265A630BF52808394400142EFB801ED,
1609862499553,
4760FB8532A8F61959CD5D26E341EC3C5D6B876F53770E310FC344CC39DCBF63,
316609424536,
PRESIDENTE:Isaac Rodrigues Ramos:41;SENADOR:Maria Clara Pires:721;DEPUTADOFEDERAL:Leonardo Guimaraes Medeiros:6043
ENC(
Pl0CLYsn6Cq0bxBEUrThjPJCI+vBtpYsIRZPWwMqlLbhH5IwmNLzSIYJ+/56TfSU0
ysz5oxvHsTQJtX0lJqhJb8kW/oYoQtXuANihw7SLhfDtQ76Gv/+4q2ezQCkbQSL1H
kHRErEUB6laguYMGKXF8PKDT+ycqLVeIYDNScLt2UxVykmAs8K5rJj4qWknBYBYm91h
yMAVKmfxD3pvX9EderZn1lisGD8Vp8Jb/3zMkaKDq+SaJc4Q0qmiuAMqRtV)


Exemplo de conteúdo decriptografado a partir do campo VOTER_DATA.


Nome: João Guimaraes
Título de eleitor: 194911881984
UF: São Paulo (IBGE: 35)
Município: Itu (IBGE: 3523909)
Nascimento: May 25, 1952


Obs.:

  • Para os exemplos deste material foi utilizado algoritmo de criptografia PBEWITHHMACSHA512ANDAES_256 do pacote jasypt que pode ser obtido pelo MAVEN pela seguinte entrada:


		<dependency>
		  <groupId>com.melloware</groupId>
		  <artifactId>jasypt</artifactId>
		  <version>1.9.4</version>
		</dependency>


  • No arquivo .CSV exportado, o uso do campo “SEQUENTIAL” estará envolvido por uma máscara de 10 dígitos que será completada com zeros a esquerda, já o campo “MILISECONDS_IN_SERVER” representará os milissegundos passados contados a partir de 01 de janeiro de 1970 (padrão da linguagem Java para classe Date). No momento que for realizada a validação da integridade dos dados para obtenção do valor do campo CHAIN pela uso da fórmula:


CHAIN[i](t) = SHA256 (SEQUENTIAL + <<HASH_VOTE>> + MILISECONDS_IN_SERVER (i))


Exemplo (registro de arquivo .CSV):


0000046503,
A133C3E9D99C84B0E720E44AEC2F85EF776C115A4298403ADCC981B36352F3F3DE2725E0ADA9008F231B5525F7DEFE8C11B08FFEBDC089F75C135FBDC1F97F40,
23,
2301406,
8BC1B8DC57963CF51A8BABA5C5F008B76BEFB712602827565F601CB19AEED853,
1606615353437,
2264C1927B159D3E59FA48B748970F17471B50531EDD2B5B972CB1523D8F406A,
316609424536,
PRESIDENTE:Arthur Guimaraes Farias:31;SENADOR:Leonardo Moreira Henrique:321;DEPUTADOFEDERAL:Ana Clara Henrique:4043


DEVE ser levado em conta que o campo “SEQUENTIAL” e “MILISECONDS_IN_SERVER” deverão ser convertido em Long, principalmente para retirada dos zeros a esquerda do campo SEQUENTIAL.




Embaralhamento da coluna de número de título de eleitor

O bloco formado pela colunas [<< VOTER_ID >><< VOTER_DATA >>] serão embaralhados de forma aleatória e verticalmente entre as linhas do bando eleitoral, isso se torna necessário para garantir que não haverá correspondência entre as informações de identificação do eleitor e a linha de registro que contém as informações de seu voto. Para uma técnica mais efetiva de embaralhamento recomendamos que no momento que se fizer uma entrada do registro na tabela votes_chain, que faça uma busca aleatória sobre as linhas de registro já inseridas na tabela e permute o valor do bloco atual com o valor do bloco da linha localizada aleatoriamente, algo semelhante ao exemplo abaixo.


Exemplo (registro de arquivo .CSV):

(Registro obtido de forma aleatória para efetuar a permutação do bloco [<< HASH_VOTER_ID >><< VOTER_DATA >>])


0000008637,
2FC29EB0C15A1E62B10F813F70CF02B4202DB05F27FEB9200D3E49F7297E97A53443600E11ED4A9C86FF78C14935F7BEBA2B2A3D242B977397459AFBC0ED67D0,
23,
2308104,
E151829CABF4185CFC805329BE049D1B3B21F7F242307689F0ACCB82D9E7CE34,
1609862423855,
8DEE7317A397E95B0C8BA3BB02010B33DE083D5388685C303476A7395DE879DE,
455530647129,
PRESIDENTE:Arthur Guimaraes Farias:31;SENADOR:João Miguel Henrique Dantas:221;DEPUTADOFEDERAL:Emanuelly Carneiro Sousa:1043,
ENC(
Pl0CLYsn6Cq0bxBEUrThjPJCI+vBtpYsIRZPWwMqlLbhH5IwmNLz
SIYJ+/56TfSU0ysz5oxvHsTQJtX0lJqhJb8kW/oYoQtXuANihw7SLhfDtQ76Gv/+4q2ezQCk
bQSL1HkHRErEUB6laguYMGKXF8PKDT+ycqLVeIYDNScLt2UxVykmAs8K5rJj4qWknBYBYm91h
yMAVKmfxD3pvX9EderZn1lisGD8Vp8Jb/3zMkaKDq+SaJc4Q0qmiuAMqRtV


(Persistencia de registro mais recente)


0000100000,
8CAEFD046C23084FE7AAE0409449EB1D467E0779EBE7E0CCB35110B79021ED4A91B9E6D967B16061F21951B633FE09DA24CE7D371C3FB2D39B0DAFC0C5D4403E,
22,
2200103,
CFA9878116AD596C6F4F2975072C9B21B265A630BF52808394400142EFB801ED,
1609862499553,
4760FB8532A8F61959CD5D26E341EC3C5D6B876F53770E310FC344CC39DCBF63,
316609424536,
PRESIDENTE:Isaac Rodrigues Ramos:41;SENADOR:Maria Clara Pires:721;DEPUTADOFEDERAL:Leonardo Guimaraes Medeiros:6043
ENC(
rNgWpHqeOlcmb7tdCW2NihidkDN8XmRyfcw2vAOPmwWreGn8qAw8mEe8mEm1iMJBI
6sr/akDUFG5tO7twFQ8Zg65HEnj9LE41NoMIw53ORjioSGa8IcluRK41dmGSNdgga
3/9cheHjmkr3OOIOoGf+oA8I3ZrqBkm8cvQn2Srzr+TYn1JAF1SS+X7JsV6Fw0Oyu1
E99PvF085Uo/HBnqiUqs4F0los7bqlx4GaJ+a+xTGj1AJ8Ot6FwlfoI1nwlk)
'


Obs.:

  1. Lembre-se que a coluna << VOTER_ID >> representa o número do título de eleitor e a coluna << VOTER_DATA >>, que é facultativa, representa as informações de identificação do eleitor criptografadas.



Relatório de Testes

Antes da distribuição, o software Voto Transparente para PC passou por uma série de testes de performance. No mais recente foi inserido o comando:

 java -jar voto_transparente.jar election 150000000

Este comando cria e "popula" um banco eleitoral em formato CSV, contendo 150 milhões de votos aleatórios, além de fazer o check de integridade de cada um dos registros do arquivo, gerar o HASH de assinatura e contabilizar a eleição para a obtenção do somatório de votos destinado a cada candidato.


MacBook Pro

Os teste foram realizados em um computador com as configurações abaixo com os resultados listados na tabela.


MacBook Pro
Processador 2,3 GHz Intel Core i7
Memória 8 GB 1600 MHz DDR3
Graphics Intel HD Graphics 4000 1536 MB
Poder computacional: 203107 HASH SHA512 por segundo.


Banco eleitoral contendo 150 mil de votos.
Tempo para criar e armazenar os votos aleatórios 19 segundos
Tempo para processamento de HASH SHA512 0,482 segundos
Tempo para check de integridade do arquivo CSV 3 segundos
Tempo para a contabilização do processo eleitoral 1 segundo
Tempo total 23 segundos
Dimensão do arquivo CSV 63.3 Megabytes
* Tempo médio de pesquisa 4 segundos


Banco eleitoral contendo 150 milhões de votos.
Tempo para criar e armazenar os votos aleatórios 16.284 segundos (04h, 31m e 24s)
Tempo para processamento de HASH SHA512 461 segundos (07m e 41s)
Tempo para check de integridade do arquivo CSV 2.587 segundos (43m e 07s)
Tempo para a contabilização do processo eleitoral 482 segundos (08m e 02s)
Tempo total 19.814 segundos (05h, 30m e 14s)
Dimensão do arquivo CSV 63.27 Gigabytes
* Tempo médio de pesquisa 4 minutos
* O tempo médio de pesquisa para este teste leva em conta a pesquisa em um arquivo de formato de texto contendo mais de 60GB e 150 milhões de registros que são vasculhados linha por linha, sem qualquer otimização como acontece em um SGBD. Para uma melhor performance durante as pesquisas, recomendamos que exporte o arquivo .CSV para um banco de dados de sua preferência.

Poder Computacional

Neste manual utilizamos como referência de poder computacional um número expresso em HASH SHA512 por segundo. Para atender ao escopo deste trabalho o Hash é calculado sobre uma chave de 152 posições alfanuméricas.

HASH = SHA512(<< ALFANUMÉRICO DE 152 CARACTERES >>)

Assim quando o valor de poder computacional for expresso como 100000 HASH SHA512 por segundo, significa que a unidade computacional analisada é capaz de processar 100000 HASH SHA512 sobre chaves de 152 posições alfanuméricas a cada segundo.

Para verificar o poder computacional de seu computador, nos termos deste manual, baixe o software Software Voto Transparente no PC e faça uso do comando power.



Anexos

Anexo 01 - Código SQL para criar o banco de dados votes_chain no PostGreSQL

Com este script cria-se uma tabela no banco de dados PostgreSQL com objetivo de facilitar a exportação do banco eleitoral em formato CSV para um banco de dados relacional.



-- Table: public.votes_chain

-- DROP TABLE public.votes_chain;

CREATE TABLE public.votes_chain
(
    id bigint NOT NULL,
    key_vote_id character varying(128) COLLATE pg_catalog."default" NOT NULL,
    sequential bigint NOT NULL,
    version timestamp without time zone NOT NULL,
    election_code character varying(15) COLLATE pg_catalog."default" NOT NULL,
    cod_state character varying(12) COLLATE pg_catalog."default" NOT NULL,
    cod_city character varying(12) COLLATE pg_catalog."default" NOT NULL,
    electoral_zone character varying(7) COLLATE pg_catalog."default" NOT NULL,
    electoral_session character varying(7) COLLATE pg_catalog."default" NOT NULL,
    ue_id character varying(32) COLLATE pg_catalog."default" NOT NULL,
    token_vote text COLLATE pg_catalog."default" NOT NULL,
    hash_vote character varying(64) COLLATE pg_catalog."default" NOT NULL,
    miliseconds_in_server bigint NOT NULL,
    chain character varying(64) COLLATE pg_catalog."default",
    voter_id character varying(32) COLLATE pg_catalog."default" NOT NULL,
    voter_data text COLLATE pg_catalog."default",
    CONSTRAINT votes_chain_pkey PRIMARY KEY (id)
)
WITH (
    OIDS = FALSE
)
TABLESPACE pg_default;

ALTER TABLE public.votes_chain
    OWNER to postgres;

GRANT ALL ON TABLE public.votes_chain TO postgres;



VERY IMPORTANT INFORMATION -- AUTOMATIC LANGUAGE TRANSLATION FOR ALL THIS WIKI --  Make use of the automatic translation feature of the entire content of this wiki from Google's automatic translation tool. For more information on how it works visit this link, CLICK HERE.
¡INFORMACIÓN MUY IMPORTANTE - TRADUCCIÓN AUTOMÁTICA DEL LENGUAJE PARA TODO ESTE WIKI - Utiliza la función de traducción automática de todo el contenido de este wiki de la herramienta de traducción automática de Google. Para obtener más información sobre cómo funciona, visite este enlace HAGA CLIC AQUÍ.
INFORMATIONS TRÈS IMPORTANTES - TRADUCTION AUTOMATIQUE DE LANGUE POUR TOUS CE WIKI - Utilisez la fonction de traduction automatique de tout le contenu de ce wiki à partir de l'outil de traduction automatique de Google. Pour plus d'informations sur son fonctionnement, visitez ce lien CLIQUEZ ICI.
SEHR WICHTIGE INFORMATIONEN - AUTOMATISCHE SPRACHÜBERSETZUNG FÜR ALLE DIESEN WIKI - Nutzen Sie die automatische Übersetzungsfunktion für den gesamten Inhalt dieses Wikis aus dem automatischen Übersetzungstool von Google. Weitere Informationen zur Funktionsweise finden Sie unter diesem Link KLICKEN SIE HIER.
INFORMAZIONI MOLTO IMPORTANTI - TRADUZIONE AUTOMATICA DELLE LINGUE PER TUTTA QUESTA WIKI - Utilizza la funzione di traduzione automatica dell'intero contenuto di questo wiki dallo strumento di traduzione automatica di Google. Per maggiori informazioni su come funziona, visita questo link,CLICCA QUI.