Loading

"¿Cómo sé que la gente no vota dos veces?" Es la primera pregunta que recibimos en cualquier demo. La respuesta corta: tokens de un solo uso. 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.

Qué es un token de un solo uso

Un token es una cadena larga, aleatoria y única, parecida a esto:

vt_8f3ka9pq72hd_xn94mz1bv0c6

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:

  1. El administrador importa el censo (CSV con email o teléfono).
  2. Al abrir la votación, demokratian genera un token único por cada votante y se lo envía con un link personalizado: https://tuespacio.demokratian.app/votar/vt_8f3ka9pq72hd_…
  3. El votante abre el link, ve la papeleta y emite su voto.
  4. 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, encadena el hash del voto al anterior.
  5. Si el votante recarga el link, ve "ya has votado". El token ya no sirve.
"Transacción atómica" significa: o las tres cosas pasan a la vez, o no pasa ninguna. Aunque dos votantes hagan clic en el mismo milisegundo, el sistema procesa uno cada vez y nunca se cuela un doble voto.

Por qué es imposible doblar el voto

Tres barreras independientes:

  • Token gastado: el más obvio. Una vez usado, no vale.
  • SELECT FOR UPDATE: el bloqueo de base de datos garantiza que aunque envíes 50 peticiones simultáneas, solo una entra al sistema.
  • Hash chain: cada voto encadena los 5 anteriores. Si alguien intentase inyectar un voto manualmente en la BBDD, la cadena se rompería 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 el token y un flag "gastado/no gastado". 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

Un token de un solo uso es una papeleta digital: única, intransferible y desaparece al usarla. La diferencia con la papeleta de papel es que la nuestra está encadenada criptográficamente a las anteriores, así que ni el administrador puede falsificar una sin que se note.