Skip to content

SmartPoll usa un QR único y firmado para habilitar el acceso al voto. Al validarlo, se emite un token anónimo que permite votar una sola vez sin vincular identidad y elección. El voto se registra en una blockchain permisionada, garantizando auditoría y conteo verificable.

License

Notifications You must be signed in to change notification settings

tpII/2025-G3-SmartPoll

Repository files navigation

SmartPoll Logo

Proyecto G3: SmartPoll – Sistema de votación segura y transparente con Blockchain

Descripción del proyecto

SmartPoll es un sistema de votación electrónica diseñado con fines educativos que integra blockchain permisionada, códigos QR firmados digitalmente y Tokens Anónimos de Voto (TAV) para garantizar seguridad, transparencia y trazabilidad, preservando al mismo tiempo la privacidad del votante.

El sistema implementa un flujo de votación con pase de acceso, donde cada votante recibe un QR-Pase único firmado que valida su ingreso al proceso electoral. Una vez autenticado, se emite un Token Anónimo de Voto (TAV) que permite sufragar sin vincular identidad con preferencia, evitando el doble voto y asegurando un conteo verificable mediante blockchain.

Características del proyecto
  1. Acceso controlado mediante QR firmado
  2. Cada votante recibe un QR-Pase único, aleatorio y firmado digitalmente que valida su derecho a ingresar al sistema de votación.

  3. Separación identidad–voto
  4. El sistema desacopla completamente la identidad del votante de su elección mediante el uso de Tokens Anónimos de Voto (TAV).

  5. Prevención de doble voto
  6. Los QRs y TAVs son marcados como utilizados una única vez, impidiendo reutilizaciones y garantizando la unicidad del voto.

  7. Registro inmutable en blockchain
  8. Cada voto se registra como una transacción en una blockchain permisionada, permitiendo auditoría y verificación posterior.

  9. Auditoría y trazabilidad
  10. Se pueden auditar los hashes de los TAVs consumidos y verificar que coincidan con la cantidad de votos emitidos.

Beneficios
  1. Transparencia electoral
  2. Permite verificar el proceso completo de votación sin comprometer la privacidad del votante.

  3. Confianza en el sistema
  4. La inmutabilidad de blockchain y la firma digital de los tokens fortalecen la confianza en los resultados.

  5. Privacidad garantizada
  6. No existe vinculación directa entre el votante y su elección.

  7. Escalabilidad educativa
  8. El sistema puede adaptarse a distintos escenarios de votación académicos o experimentales.

Tecnologías utilizadas
  1. Hardware
    • Raspberry Pi 3 Model B: utilizadas en la mesa de ingreso y en el cuarto oscuro
    • Cámara USB Logitech C170: lectura del QR-Pase
    • Pantalla LCD 16x2 con módulo I2C: notificación del estado del escaneo
    • Pantalla táctil HDMI + USB: interfaz de votación
  2. Frontend
    • React con TypeScript
    • Vite + SWC para bundling y compilación
    • TailwindCSS para estilos
    • Radix UI y shadcn/ui para componentes accesibles
    • Server-Sent Events (SSE) para comunicación en tiempo real
    • pnpm como gestor de dependencias
  3. Backend
    • Spring Boot 3 sobre Java 21 LTS (gestión de usuarios y emisión de QR-Pase)
    • Node.js + Express (servidor central de votación y gestión de TAVs)
    • Python + Flask (servicio de escaneo de QR en Raspberry Pi)
    • Redis para almacenamiento temporal de TAVs con TTL
    • APIs HTTP/REST
    • Server-Sent Events (SSE) para sincronización entre servicios
  4. Blockchain
    • Hyperledger Fabric (blockchain permisionada)
    • Smart Contracts desarrollados en TypeScript
    • Canales independientes por elección
    • Certificados X.509 para autenticación de organizaciones
    • Hyperledger Explorer para visualización y auditoría
  5. Infraestructura y despliegue
    • Docker y Docker Compose
    • Amazon Web Services (AWS)
    • Amazon ECS y ECR
    • Amazon S3 y CloudFront
    • Amazon RDS
    • Elastic Load Balancer (ELB)
    • Virtual Private Cloud (VPC)
    • Terraform para Infraestructura como Código (IaC)
    • GitHub Actions para CI/CD

Arquitectura del sistema

SmartPoll se compone de dos estaciones físicas principales conectadas a una red local y a una blockchain permisionada:

  • Mesa de ingreso: validación del QR-Pase y generación del Token Anónimo de Voto (TAV)
  • Cuarto oscuro: validación del TAV y emisión del voto

Materiales

Componente Cantidad Uso
Raspberry Pi 3 Model B 2 Mesa de ingreso y cuarto oscuro
Pantalla LCD 16x2 con módulo I2C 1 Mesa de ingreso
Cámara USB 1 Lectura de QR
Pantalla táctil 1 Interfaz de votación

Estructura del proyecto

El repositorio de SmartPoll se organiza de forma modular, separando claramente las responsabilidades del sistema de votación electrónica (frontend, backend, blockchain, infraestructura y auditoría). Esta estructura facilita el mantenimiento, la escalabilidad y el despliegue independiente de cada componente.

SmartPoll/
│
├── .github/                     # Configuración de GitHub
│   └── workflows/               # Pipelines de CI/CD
│
├── audit-app/                   # Aplicación web de auditoría
├── backend/                     # Gestión de usuarios y QR-Pase
├── blockchain/                  # Red blockchain permisionada
│   ├── fabric-chain/            # Smart contracts (TAV y votos)
│   └── explorer/                # Visualización y auditoría
├── infra/                       # Infraestructura como Código (IaC)
├── qr-access-app/               # Frontend de acceso del votante
├── qr-scan/                     # Servicio de escaneo de QR (Raspberry Pi)
├── reports/                     # Informes del proyecto
├── votation-kiosk/              # Interfaz de votación (cuarto oscuro)
├── votation-server/             # Servidor central de votación
├── docker-compose.yml           # Orquestación local del sistema
├── docker-compose.stack.yml     # Despliegue distribuido
├── Makefile                     # Comandos de automatización
├── LICENSE                      # Licencia del proyecto
└── README.md                    # Documentación principal

Flujo de funcionamiento del sistema

En este video se muestra el funcionamiento completo del sistema SmartPoll, incluyendo la emisión de votos, validación y registro en blockchain.

Flujo completo del proceso de votación image10
  1. Registro del votante en la plataforma web
  2. Antes de iniciar el proceso, el votante debe registrarse en la plataforma web ingresando su correo electrónico, DNI y una contraseña, quedando identificado de manera única dentro del sistema.

  3. Generación del QR-Pase firmado
  4. Una vez validado el registro, el sistema genera un token aleatorio y lo asocia a un QR-Pase único y firmado digitalmente, vinculado al DNI del votante. El QR se muestra en la plataforma para su posterior presentación en la mesa de ingreso.

  5. Almacenamiento del token asociado al QR-Pase
  6. El token generado se almacena en la base de datos en la nube, quedando disponible para ser validado en el momento del sufragio.

  7. Presentación del QR-Pase por parte del votante
  8. El votante presenta el QR-Pase desde su dispositivo personal en la mesa de entrada para iniciar el proceso de verificación.

  9. Escaneo del QR-Pase
  10. Una Raspberry Pi equipada con una cámara USB escanea el QR-Pase presentado por el votante y envía la información al servidor para su validación.

  11. Validación y marcado del QR-Pase
  12. La Raspberry Pi consulta al servidor en la nube para verificar si el QR-Pase es válido y no ha sido utilizado previamente. Si es válido, el sistema lo marca como consumido; si no, se deniega el acceso al cuarto oscuro.

  13. Notificación del estado mediante SSE
  14. A través de una conexión Server-Sent Events (SSE), el servidor notifica al cliente que el QR-Pase fue consumido exitosamente. El dispositivo del votante indica que está habilitado para ingresar al cuarto oscuro y la conexión se cierra.

  15. Habilitación de la interfaz de votación
  16. Cuando la Raspberry Pi de la mesa de entrada autoriza el ingreso, la Raspberry Pi ubicada en el cuarto oscuro genera y firma un Token Anónimo de Votación (TAV), habilitando la interfaz de votación para el votante.

  17. Emisión y envío del voto
  18. El votante emite su voto, el cual se envía junto con el TAV firmado al servidor para su validación y posterior registro.

  19. Registro del TAV en la blockchain permisionada
  20. El Token Anónimo de Votación se registra como una transacción en la blockchain permisionada, garantizando inmutabilidad, trazabilidad y un conteo verificable de los votos.

  21. Habilitación de un nuevo escaneo
  22. Una vez finalizado el proceso de votación, la Raspberry Pi del cuarto oscuro se comunica con la Raspberry Pi de la mesa de entrada para habilitar un nuevo escaneo de QR-Pase.


Bitácora del proyecto

La bitácora documenta el proceso de diseño, implementación, pruebas e iteraciones del sistema SmartPoll, incluyendo decisiones técnicas, problemas encontrados y soluciones adoptadas a lo largo del desarrollo.


Capturas del sistema

Interfaz de escaneo de QR-Pase

Login SmartPoll QR-Pase generado QR-Pase validado

Login del votante, visualización del QR-Pase y validación exitosa


Interfaz de votación

Votación en espera Selección de candidato

Pantalla de espera y emisión del voto en el cuarto oscuro


Interfaz de auditoría

Auditoría de votos

Visualización de resultados y auditoría del proceso electoral


Visualización de la blockchain

Hyperledger Explorer

Hyperledger Explorer – bloques y transacciones registradas


Puesta en marcha del sistema

SmartPoll utiliza Docker Compose y un Makefile para simplificar la ejecución del entorno completo de desarrollo, incluyendo los servicios Webserver + Frontend + Blockchain + Explorer.

Para construir las imágenes y levantar tales servicios del sistema:

make

Este comando inicializa la red blockchain, levanta los contenedores necesarios y deja el sistema listo para su uso en un entorno local.

Para detener y eliminar todos los contenedores creados:

make down

Esto apaga el entorno de ejecución liberando los recursos utilizados.


Autores

  • Blasco, Gonzalo
  • Cabral, Ramiro Nicolás
  • Polanis, Iván Valentín

Coordinador

  • Gastón Marón
    Profesor – Taller de Proyecto II

About

SmartPoll usa un QR único y firmado para habilitar el acceso al voto. Al validarlo, se emite un token anónimo que permite votar una sola vez sin vincular identidad y elección. El voto se registra en una blockchain permisionada, garantizando auditoría y conteo verificable.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •