"¿Cómo sé que la gente no vota dos veces?" Es la primera pregunta que recibimos en cualquier demo. La respuesta corta: la base de datos no se lo permite, y lo hace de una forma distinta según cómo se vote. La larga te la contamos aquí, sin lenguaje técnico innecesario.
El problema básico
En una votación presencial el problema está resuelto desde hace siglos: vas a la mesa, te tachan del censo y te dan una papeleta. No puedes volver a por otra. El sistema funciona porque hay una marca física en el censo y una papeleta limitada.
En online tenemos que reproducir esas dos cosas con bits. Si simplemente envías un link "vota aquí" a todo el mundo, cualquiera puede recargar la página y votar de nuevo. Si confías en cookies o IP, las cookies se borran y las IP cambian.
Los dos canales de voto
Al crear una votación, el administrador elige por dónde se vota: solo plataforma, solo enlace o ambos. Cada canal reproduce a su manera la marca en el censo, y los dos acaban en el mismo cerrojo.
- Voto desde la plataforma: el votante entra con sus credenciales. No hay token: quien hace de "marca en el censo" es un registro con su identificador de usuario y el de la votación.
- Voto por enlace: el votante recibe por correo un enlace personalizado y vota sin necesidad de registrarse ni iniciar sesión. Aquí la marca es el token, que se gasta al usarlo.
Debajo de ambos hay la misma protección, y es la que de verdad hace el trabajo: la base de datos tiene una restricción de unicidad sobre el par (votante, votación). Da igual por qué canal llegue el intento — un segundo voto de la misma persona choca contra esa restricción y no entra.
Qué es un token de un solo uso
Un token es una cadena larga, aleatoria y única, parecida a esto:
7f3a1c9e04b8d25a6e1f80c3b7d94a2e5c08f6b1d3a97e42c85b0f1a6d3e9b7c
Cada votante de tu censo recibe el suyo, distinto, cuando se le envía la convocatoria. El token cumple tres condiciones:
- Único: uno por cada par (votante, votación). Si participas en 5 votaciones, recibes 5 tokens distintos.
- Aleatorio criptográficamente: no es predecible. No puedes "adivinar" tokens de otros usuarios.
- De un solo uso: en el momento que se usa para emitir un voto, queda marcado como gastado.
Cómo se reparte y se gasta
El flujo completo, paso a paso:
- El administrador importa el censo (CSV con email o teléfono).
- Al abrir la votación, Demokratian genera un token único por cada votante y se lo envía con un link personalizado:
https://tuorganizacion.demokratian.org/es/VotarToken/selec/7f3a1c9e04b8… - El votante abre el link, ve la papeleta y emite su voto.
- En el instante de emitir, el sistema hace tres cosas en una sola transacción atómica: marca el token como gastado, registra el voto en una tabla separada y guarda su sello de integridad.
- Si el votante recarga el link, ve "ya has votado". El token ya no sirve.
Por qué no se puede votar dos veces
Tres barreras independientes:
- Token gastado: el más obvio. Una vez usado, no vale. Aplica al voto por enlace.
- Índice único como cerrojo: la base de datos tiene una restricción de unicidad sobre el par (votante, votación). Aunque envíes 50 peticiones simultáneas, la segunda choca contra esa restricción, la transacción se aborta y el voto nunca llega a la urna. Aplica a los dos canales.
- Árbol de sellos: cada voto deja una huella criptográfica que forma parte de una raíz común. Si alguien intentase inyectar un voto manualmente en la BBDD, la raíz dejaría de cuadrar y los interventores lo verían.
Y aún así, sigues siendo anónimo
La pregunta natural: "si el token me identifica a mí y se asocia a mi voto, ¿cómo es secreto?". La respuesta está en cómo se almacenan los datos.
El token tiene dos roles en el sistema, y viven en tablas distintas:
- Tabla A — Anti-doble-voto: guarda quién ha votado ya —el token gastado o el identificador del votante, según el canal—. No guarda el contenido del voto.
- Tabla B — Votos: guarda el contenido del voto y un identificador interno aleatorio. No guarda el token ni quién votó.
Las dos tablas no comparten clave foránea. Una vez emitido el voto, ni nosotros podemos reconstruir qué votó cada token.
Casos límite que cubrimos
- Email perdido: el administrador puede regenerar un token (se invalida el anterior, se envía uno nuevo, queda registrado en el log).
- Cambio de censo a mitad de votación: bloqueado por defecto. Si se autoriza, queda en el log y los interventores reciben aviso.
- Voto presencial mixto: un interventor puede gastar el token de un votante presente físicamente, dejando constancia.
Resumen en una frase
Votes desde la plataforma o por enlace, tu papeleta es una papeleta digital: única, intransferible y agotada en cuanto la usas. La diferencia con la papeleta de papel es que la nuestra queda sellada criptográficamente junto a todas las demás, así que ni el administrador puede colar una sin que se note.