| Kriptópolis alojado en |
| Zilos-Veloxia Network |
| Tu mejor defensa: |
| Bufet Almeida |
E-VOTO amateur
Estoy terminando una pequeña plataforma de e-voto y me gustaría compartir su funcionamiento con vosotros, con la esperanza de que me indiquéis qué agujeros o errores le véis, ya que soy una sola persona y la cosa se complica bastante; seguro que encontráis detalles en los que yo no he reparado.
La plataforma es web; existe un servidor en el que se ejecuta y los usuarios entran con su navegador realizando conexiones seguras SSL/TLS (se puede forzar a 128 bits o a sólo TLS, etc). El usuario se autentica en el servidor con certificado, pero no tiene que firmar nada en local, es decir, que no se le instala ningún ActiveX, Applet, ni nada, para garantizar la compatibilidad con navegadores, sistemas operativos, etc. La comprobación de que tiene la clave privada asociada al certificado la hace el SSL/TLS en el Handshake con encadenamiento y firma de dos hash en el caso de TLS. En resumen, que sólo es necesario saber que el que vota es quien dice ser, no hace falta que firme nada...
La plataforma nos permite diseñar la consulta como queramos, pero para no liarlo mucho voy a explicar la configuración tipo de un referéndum, es decir, que los resultados parciales son secretos, que los resultados finales son públicos, y que el acceso de los votantes es “moderado”, o sea que tienes que entrar primero para comprobar que estás censado y después para votar (ya que yo no tengo acceso a la bbdd del censo).
Cada referéndum tiene una tabla de Timestamp; esto significa que todos los votos realizados tendrán su correspondencia en dicha tabla pública mediante encadenamientos de hash, para garantizar la no inserción de votos. En dicha tabla hay una relación entre el hash del Timestamp y la clave pública del votante, pero NO con la intención de voto.
El autor del referéndum tiene que identificarse con un certificado a la hora de crearlo, ya que el servidor necesita su clave pública para cifrar datos y para garantizar que sólo él tiene acceso al panel de control de su referéndum. Todos los datos que se almacenan en bbdd son cifrados, unos con la clave pública del certificado del autor, otros con la pública del certificado del votante, y otros con la pública del certificado del servidor (ya veremos más adelante cuáles con una y cuáles con otra). Una vez creado el referéndum, el autor tiene acceso a su panel de control, en el que puede hacer modificaciones hasta el momento en que se abra la urna electrónica. Llegado este momento los votantes tienen acceso a la urna y éste es el proceso que se sigue:
El usuario se identifica con su certificado estableciendo una conexión segura (cifrada) con el servidor, el cual guarda en bbdd una copia del certificado (sin clave privada claro) cifrándola con el certificado del servidor (para garantizar la protección de datos, etc). En este momento es cuando en el panel de control del autor se le van mostrando al moderador los usuarios que solicitan permiso para votar y es cuando se debería cotejar el censo (también se puede discriminar por campos del certificado, CA’s, por claves, etc). Por supuesto el moderador se ha tenido que identificar con su certificado y el servidor está descifrando y mostrando la información en tiempo real. Una vez concedido el permiso, el usuario tiene acceso a la votación. Se le muestran las opciones que tiene (aquí se me ha olvidado meter el voto en blanco pero estoy en ello) y, una vez seleccionada pulsa en “Votar”. El server genera una clave aleatoria de 128 bits, y al final de dicha clave, suma la intención de voto. Esto lo hago para que no se pueda deducir la intención de voto por consulta a tablas de hash, es decir que si yo guardo sólo la intención de voto, PP, por ejemplo, sólo con comparar el hash de la bbdd con el hash de las opciones, sabría quién ha votado a quién, además todos los votos a la misma opción tendrían el mismo hash. Después el server saca el hash de la papeleta, el hash del Timestamp y hace dos cifrados de la papeleta, uno con el certificado del votante y otro con el certificado del autor del referéndum. El hash del Timestamp, la clave pública del certificado del votante, y la papeleta cifrada con el certificado del votante lo encadena y guarda en la tabla de Timestamp, y el hash de la papeleta y la papeleta cifrada con el certificado del autor del referéndum la guarda en la tabla “votos” que tiene un ID aleatorio para que no se puedan relacionar entradas en las dos tablas por ningún orden.
Una vez finalizado el plazo de votación, la urna se cierra y le aparece al autor del referéndum la opción de “recuento” en su panel de control. En este proceso, el servidor le manda las papeletas cifradas con su clave pública a su navegador (aquí sí que he tenido que exigir IE; si alguien conoce alguna función Javascript tipo crypto.signText pero para descifrar en otros navegadores, que me lo comunique por favor) y, el autor del referéndum las descifra con su certificado, mostrándole el resultado en local (Jscript). Si lo desea puede pedir comprobación de "No manipulación" al server, en cuyo caso se mandan las papeletas descifradas al servidor (recordar que seguimos bajo SSL/TLS) para generar sus hash y cotejarlos con los hash de la tabla “Votos”, pero esto es opcional. Después se guarda el total computado en el server para mostrar gráficos de resultados finales, etc.
Durante, y una vez finalizada la votación, cualquier votante puede auditar su voto identificándose en el server con su certificado, y descifrando su papeleta (la copia cifrada con su pública de la tabla “Timestamp”) así como comprobando el encadenamiento del mismo.
Cada script tiene una rutina que genera un par de hash del propio archivo que se esté ejecutando. Este script también se puede ejecutar en otros servidores que auditen en tiempo real la no modificación del código durante la votación. Lógicamente, si se trata de algo serio se tendría que hacer una primera auditoría del código para asegurar que no se guardan la papeletas sin cifrar, etc. Además el servidor sólo tiene abierto el puerto 443 (https) y dos usuarios, el invitado para la web (con sus permisos paupérrimos) y el Administrador al que se le exige inicio de sesión con tarjeta criptográfica (certificado).
Bueno, más o menos sería así. Nótese que, en el caso aquí explicado (ya comenté que la plataforma es configurable), el server no puede descifrar las papeletas, el autor puede descifrarlas pero no puede saber a quién pertenecen (ya que en la tabla de Timestamp no hay hash de la papeleta, no hay relación entre tablas) y el votante sólo puede descifrar su papeleta a la hora de auditar el proceso, autentificándose con su certificado que le llevará a su Timestamp, y descifrando su papeleta en local con su clave privada. Además, ni siquiera el robo de los discos duros del server implicarían el robo de datos, ya que todo se encuentra cifrado con las claves públicas de los usuarios (cuyas claves privadas están en sus equipos) y la pública del server (que se encuentra en un dispositivo criptográfico externo). De ahí un poco la independencia del sistema operativo que use en el server; otra cosa son los ataques por denegación de servicio, etc, pero mis recursos son limitados. Además la modificación del código una vez pasada la primera auditoría haría cambiar el hash de los archivos (esto no quiere decir que no se puedan hacer cambios, sólo que no se pueden hacer injustificados).
No seáis muy duros conmigo, que ya os he comentado que sólo soy yo para montar todo el tinglado (y de forma altruista), y me he tirado casi un mes partiéndome los cuernos con el proyectito.
Un cordial saludo,
Enriquez
PD: Cuando me refiero a hash, estoy hablando siempre de encadenamiento de distintos algoritmos hash por el tema de las colisiones.



Asunto colateral: importancia esencial
Creo que el voto electronico puede ser un recurso util para determinadas consultas no vinculantes, que pueden ayudar a tomar decisiones mas ajustadas o medir con fiabilidad un estado o momento de opinion.
Sin embargo, creo que el sistema tradicional de voto para las elecciones no es un mero procedimiento tecnico, sino que incluye un ritual portador de contenidos y valores simbolicos y de substancia no desdeñables.
Pero lo que mas desconfianza me inspira del voto electronico es su facilidad, bajo coste y rapidez, lo cual puede propiciar una desvalorizacion aun mas acusada de la democracia en tanto que puede recurrirse a la consulta para evitar la responsabilidad por parte del consultante.
La habitual creencia de que la democracia cuanto mas directa mas democratica es, resulta un malentendido. En la Atenas clasica donde todos los ciudadanos podian votar (aunque notese que no eran ciudadanos todos los habitantes de la Polis) dado el mas bien limitado numero de agentes y el intenso y participativo debate que precedia a las votaciones, probablemente propiciaba un voto responsable, porque si se decidia, por ejemplo, entrar en guerra no serian unos terceros los que serian conducidos al campo de batalla. Se decidian cosas muy directas, directamente comprensibles y experimentables por cada cual en lo cotidiano.
Los asuntos de un Estado y sociedad modernos implican a una pluralidad muy grande de agentes y, aunque tan solo fuere por este rasgo, se caracterizan por una complejidad tal que solo cabe representarla o expresarla cara a la ciudadania mediante peligrosas simplificaciones y en tanto que tales alentadoras de sesgos demagogicos.
Es por ello que se instituye la democracia representativa cuyo objetivo fundamental es el poder caracterizar un sujeto responsable al que achacar exitos, fracasos e incluso delitos en el ejercicio del poder delegado. En una democracia representativa el pueblo figura como la fuente de la soberania nacional, es la autoridad maxima, pero que no detenta el poder directamente, es decir reina pero no gobierna. Si ademas de reinar gobernase seria imposible atribuirle aciertos ni errores, puesto que no cabe dirigirle reproche alguno, dado que no hay autoridad por encima suyo que pueda hacerle tal, o sea que le retire o module el poder en funcion del desempeño que hiciera del mismo.
La democracia por representacion, tampoco es la maravilla de las maravillas, mas precisamente por ello propicia la cautela del gobernante en ejercicio, asi como su sustitucion, permitiendo de tal modo una suerte de proceso de ensayo y error, y por que no decirlo, el recurso a un cabeza de turco o chivo expiatorio que deje la puerta abierta a un nuevo intento, a una nueva apuesta que mire hacia el futuro y renueve la esperanza de mejor acierto.
La democracia representativa supone pues una especia de pacto, en virtud del rito electoral, entre las elites y las masas que, hasta el presente, se ha revelado como el menos malo de los sistemas de gobierno.
El poder es un jugoso objeto del deseo para el politico y es por ello que anhela obtenerlo y conservarlo, lo cual sera mas probable conseguir si las decisiones que toma concitan la aprobacion popular y por lo tanto incrementan la probabilidad de obtener la confirmacion en el cargo. Cuando un gobernante se limita buscar la complicidad y complacencia de la opinion publica traiciona el mandato recibido y degrada el pacto asumido en las elecciones, en tanto que elude la asuncion de la responsabilidad que se le ha asignado. El politico debe tratar de llevar cabo el mandato popular, recogido en el programa en virtud del cual logro la victoria en las elecciones, mediante actos de decision suyos, para que de tal modo pueda ser alabado o denostado con propiedad. Ni que decir tiene que el voto electronico, dadas sus cualidades de agilidad y minimos costes de instrumentacion y convocatoria, facilita la tentacion de la consulta permanente y por lo tanto la total irresponsabilidad.
Finalmente, queda por glosar la aludida virtud ritual del voto al modo tradicional. Lo primero de todo el proceso es costoso y relativamente lento, asi que solo cabe invocarlo en casos excepcionales y justificados. Luego está el aspecto ritual que consiste en el hecho de que durante la jornada electoral el gobierno pasa a ser un gobierno en funciones, y en cierto modo su poder queda atomizado en multitud de colegios electorales en cuya composicion y desempeño está excluida la administracion, el brazo ejecutivo del gobierno, salvo en lo tocante a garantizar la plena libertad de funcionamiento de los colegios y cumplir las directrices y decisiones emanadas de las juntas electorales instituidas desde el poder judicial. Durante la jornada electoral el poder esta en manos de los interpretes de la ley y los ciudadanos que forman las mesas electorales, los cuales son los depositarios y contabilizadores del voto del resto de los ciudadanos.
Mucho me temo, el voto electronico deriva el control de la jornada electoral en tecnicos y funcionarios de diversa naturaleza, desapareciendo el anterior protagonismo directo de la ciudadania junto con el poder encargado del cuidado de la aplicacion de la ley.
Bien, ha sido largo el excurso y muy fuera del topico, pues para nada se hace alusion al aspecto tenico del voto electronico. Sin embago creo que no está de mas el apartar un momento la atencion y llamar a considerar el objetivo para el cual se estaría puliendo el mas perfecto sistema de voto electronico.
Opinar