Skip to content

Latest commit

 

History

167 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

secure-voting-system

Este projeto é um sistema de votação desenvolvido na linguagem Java, visando criar eleições com garantia de segurança, integridade e sigilo dos votos pela aplicação técnicas de criptografia avançadas.

Objetivos

  • Votação segura e simples
  • Proteção criptográfica completa dos votos e senha dos usuários
  • Simulação de urna eletrônica com funcionalidades parecidas
  • Auditabilidade e transparência no processo eleitoral

Tecnologias

Backend & Core

Tecnologia Versão Propósito
Java 21 Linguagem principal
Spring Boot 3.x Backend e injeção de dependência
Lombok Latest Redução de boilerplate (código repetitivo) code

Banco de Dados

Tecnologia Propósito
MySQL Armazenamento de dados

Interface Gráfica

Tecnologia Versão Propósito
JavaFX 21.0.2 Interface desktop nativa
JPA/Hibernate Latest ORM (Object-Relational Mapping)

Segurança & Criptografia

Algoritmo/Biblioteca Aplicação
AES-256 (GCM) Criptografia da Contagem de Votos
HMAC-SHA256 Integridade do Registro de Voto
BCrypt Hash de Senhas

Ferramentas de Desenvolvimento

Ferramenta Propósito
Maven Gerenciamento de dependências
Git Controle de versão
JUnit 5 Testes unitários

Funcionalidades previstas

  • Cadastro de candidatos
  • Identificação do eleitor/admin
  • Registro, armazenamento seguro de senhas e criptografia dos votos
  • Apuração automática com verificação de integridade

Estratégia de Segurança

Camadas de Proteção:

  1. Confidencialidade da Apuração (AES-256): Protege o sigilo dos resultados parciais, criptografando a contagem de votos de cada candidato/opção diretamente no banco de dados.
  2. Integridade e Autenticidade do Voto (HMAC-SHA256): Garante que cada registro de voto é autêntico e não foi modificado, através de um selo criptográfico único.
  3. Hash Seguro de Senhas (BCrypt): Protege as credenciais de acesso dos usuários contra acesso não autorizado.

Fluxo de Votação Segura:

Eleitor → Autenticação → Registro do Voto com Selo HMAC → Atualização Criptografada da Contagem → Banco de Dados

  1. Autenticação: O usuário (eleitor/admin) insere suas credenciais. A senha fornecida é transformada em um hash com BCrypt e comparada com o hash seguro armazenado no banco de dados para validar o acesso.
  2. Registro do Voto: Ao registrar um voto, o sistema cria um registro (VotoModel) contendo os detalhes da votação. Imediatamente, ele gera um "selo" de integridade para esse registro usando HMAC-SHA256. Esse selo é um hash que combina os dados do voto (IDs de usuário, votação, opção e o timestamp) com uma chave secreta do servidor.
  3. Armazenamento do Voto: O registro do voto, junto com seu selo HMAC, é salvo na tabela tb_voto. O selo permite verificar posteriormente se algum dado daquele registro foi alterado.
  4. Atualização da Contagem: Simultaneamente, o sistema incrementa a contagem de votos da OpcaoVoto escolhida. Antes de salvar essa nova contagem no banco de dados, o valor é criptografado usando AES-256. Isso impede que alguém com acesso ao banco de dados possa ver a contagem de votos em tempo real ou alterá-la facilmente.

Passo-a-Passo para execução

  1. Carregar o projeto para a IDE
  2. Gerar chaves usando a classe KeyGenerator presente no package Util
  3. Copiar chaves para seus respectivos campos em application.properties
  4. Configurar o MySQL (veja em SETUP.MD)
  5. Configurar JavaFX (veja em SETUP.MD)
  6. Executar classe SistemaVotacaoApplication
  • Obs: ⚠️ JDK 21 LTS é necessário. Qualquer substituição por outra versão pode gerar erro fatal de execução
  • Obs: Para configurações de segurança, veja SETUP.MD

Autores:

About

Sistema de votação digital com criptografia ponta a ponta para eleições/votações seguras

Resources

Stars

6 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages