Voto transparente
Contents
- 1 Vídeo de apresentação
- 2 Introdução
- 3 Proposta da solução de auditoria pública de voto
- 4 Diagrama do projeto e pontos importantes
- 5 Viabilidades para implantação
- 6 Partes do projeto de auditoria eleitoral transparente
- 7 Recibo de voto
- 8 Formato de entrega do recibo de voto
- 9 Integração com a urna eletrônica
- 10 Uso das chaves na auditoria do voto
- 11 Contabilização eleitoral
- 12 Fraudes combatidas pelo voto transparente
- 13 Nível de proteção do sigilo eleitoral fornecido pelo recibo de votação
- 14 Vazamento de dados
- 15 Software Voto Transparente na Web
- 16 Software Voto Transparente para PC
- 17 Campos do banco eleitoral
- 18 Embaralhamento da coluna de número de título de eleitor
- 19 Relatório de Testes
- 20 Anexos
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:
- Quanto à confidencialidade, ter a garantia de que o voto continue secreto, assim SOMENTE o eleitor saberá em quem votou.
- 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.
- 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:
- O número de seu título de eleitor;
- 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:
- Sigilo do voto do eleitor;
- 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);
- Não duplicidade de voto pelo mesmo título de eleitor;
- Registro de todos os números de títulos de eleitor relacionados aos eleitores participantes da eleição;
- 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:
- Os registros deste banco eleitoral possui integridade?
- O título eleitoral de número 123456789012 participou da eleição?
- Qual o resultado final da apuração eleitoral?
- Quantos eleitores participaram desta eleição?
- 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?
- Houve algum número de título eleitoral que votou mais de uma vez nesta eleição?
- 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:
- 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.
- 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:
- Recibo de voto;
- Número do título do eleitor;
- 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:
- 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.
- 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:
- 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.
- 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.
Contabilização eleitoral
O conteúdo do banco eleitoral em formato .CSV, permite a contabilização de todos os votos de uma eleição.
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:
- Posse do recibo de voto;
- Posse do banco eleitoral e
- 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.
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/
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
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.
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
Obs.:
- 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:
- Chave segura aleatória gerada na urna eletrônica.
- Número do título de eleitor
- 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.:
- O valor da chave aleatória segura DEVERÁ ser alfanumérica e case-sensitive (com uso de maiúsculas e minúsculas).
- SHA512 representa o algoritmo de mão única aplicado à concatenação das chaves.
- 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.:
- Nomes e números de candidatos utilizados neste exemplo são fictícios, qualquer semelhança com outro nome é mera coincidência.
- 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
- KEY_VOTE_ID
- TOKEN_VOTE
- COD_STATE
- 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.:
- SHA256 representa o algoritmo de mão única aplicado à concatenação das chaves.
- O valor de HASH_VOTE é UPPERCASE (somente maiúsculo).
- 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.:
- Retira-se os zeros a esquerda para calculo da chain ( 0000100000 —> 100000 )
- 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.
- 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.
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.:
- 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.