Post Mórtem

Análisis de las primarias pirata

Ya se han publicado los resultados de las primarias en la Confederación Pirata para las elecciones europeas, esta votación ha dejado muchos elementos para el análisis; se han implementado nuevas funciones y se ha producido también algún fallo importante a tener en cuenta.

En esta votación se ponían a prueba las autoridades de votación, las autoridades actúan como testigos y guardianes de la votación: mientras una autoridad no esté comprometida, no se podrá descifrar el voto ni manipular el resultado. En este caso se utilizaron dos autoridades independientes, una en Pirates de Catalunya y otra en Piratas de Madrid.  Esta función aumenta la seguridad de la votación, pero se produjo un imprevisto en los archivos de texto que generan.

Eduardo estuvo pendiente de la votación y nos relató detalladamente las incidencias (texto integro).

El primer problema que nos encontramos fue alarmante: de 191 votos, el sistema de recuento de las autoridades parece que sólo había reconocido 37 y los demás los había dado por inválidos.

 

Cero a la izquierda

Un clásico en programación, al transformar los votos, no se identificaban correctamente los ceros a la izquierda.

Al principio entramos en modo pánico. No obstante, nos pusimos a mirar los votos uno por uno y nos dimos cuenta de que el problema era claro: el sistema de recuento de las autoridades no había tenido en cuenta que los votos cifrados donde la primera opción sea de una sola cifra, el voto no aparece como “0122” sino “122”.

[…]

Y fueron los ceros de la izquierda la razón principal por la que la inmensa mayoría de los votos habían sido invalidados en el recuento. Hemos también de indicar que el fallo era en el recuento de las autoridades (software election-orchestra) únicamente: en el servidor web de ágora (agora-ciudadana) se hace el recuento con una copia del mismo software que SÍ que había tenido en cuenta que faltaban los ceros a la izquierda y donde el recuento no iba a generar este problema. No obstante, como el servidor de ágora había recibido el recuento pero no lo había publicado (se acordó publicarlo al ída siguiente), este detalle tardamos un tiempo en recordarlo.

Este fallo se pudo solucionar satisfactoriamente, pero quedaron algunos intentos de voto fallidos. La situación fue preocupante en su momento y tuvimos que analizar con mayor profundidad la razón de ser de 3 votos que no se pudieron identificar y otros 2 votos perdidos por un fallo del programa.

Los 5 votos nulos

En el recuento de la votación, 3 votos emitieron un identificador no válido, en un principio no pudimos descubrir si se trataba de intentos maliciosos de sabotear la votación o de incompatibilidad con algún navegador.

No, no tengo aun respuesta para saber qué significan esos votos. Además debemos decir que como los votos los recibimos cifrados, no podemos bloquear aquellos votos que no sean válidos. Pero eso a nosotros no nos importa: el voto inválido, como meter un chorizo en el sobre, es legítimo. El problema es que te llegas a preguntar si es un error de nuestro software o si a lo mejor ha sido alguien que quiere jugar con nosotros y ha modificado su cabina de votación en su navegador para generar votos inválidos para él, su padre y su hermana a mano, por ejemplo. Es algo que no podemos verificar.

La única otra opción que barajamos que sea posible es que simplemente haya algún tipo de error que afecte a cómo se codifica el voto de esa curiosa manera en algún navegador. Nosotros hemos probado a votar en múltiples navegadores incluso tablets y móviles IOS/Android, pero no en todos (¿de veras crees que lo hemos probado en Internet Explorer 7.5 para Mac OS 10.2.3? lo siento pero no).

Más adelante David resolvió el misterio de los tres votos, se debió a una incompatibilidad con Internet Explorer 6 ó 7. Este descubrimiento ha permitido descifrar los votos, que no afectan a los resultados de las elecciones.

Recordad que una de las funciones que comenté que usábamos para codificar el voto era parseInt(). Resulta que no le especificamos la base (10), y que aunque en el standard [1] ECMAscript 3 se desaconseja y en ECMAscript 5 se prohibe, algunos navegadores si especificas un cero a la izquierda del número a parsear interpreta que la base es 8, correspondiente a numeros octales. Concretamente en IE6, IE7, IE8, o IE9 puede pasar esto.

Aquí se pueden consultar las aclaraciones más detalladas. Los tres votos son nulos por la incompatibilidad.

Esos 3 votos los sigo considerando inválidos porque no sabemos qué ocurrió, puede que alguien malicioso los escribiese a mano (poco probable) o probablemente fue con un Internet Explorer haciendo clic, en cualquier caso como digo no afectan al resultado.

Otros dos votos no se pudieron contar como votos en blanco, debido a que la opción de voto en blanco coincidía con una combinación de voto. Este error es propio de la herramienta, afortunadamente es de fácil solución.

Como error sí que hemos detectado que los votos en blanco se codificaban como “2424”. Que si lo traduces, le restamos uno y se queda en “2423” que significa “opción 24, opción 23”

En definitiva, estos cinco votos, dieron tema de debate para la aprobación de los resultados, cuando se analizaron detalladamente se pudo establecer que no afectaban a los resultados y que su origen era fácilmente identificable y verificable, gracias a las autoridades.

Pecata Minuta

Hubo más problemas en la votación, por un lado, algunos votantes no recibieron email de confirmación de su voto. Esta incidencia no afecta a la seguridad de la votación, ya que el votante siempre puede comprobar si su voto ha sido registrado. Sin embargo está ya en la lista de asuntos pendientes.

También he de decir que esta vez hemos tenido un número de incidencias muy bajo durante la votación: la puesta a punto que supusieron las dos experiencias de congresotransparente lo dejaron bastante fino en ese sentido. Sólo ha habido algún problema puntual de envío de emails notificando que el voto ha sido recibido correctamente.

También hubo problemas con la configuración de idioma de algunos navegadores, que impedía acceder correctamente según el idioma de algunos navegadores. Otro error con solución relativamente fácil.

Medidas para el futuro

Dado que nuestra colaboración con los piratas fue desinteresada y de los pocos recursos con que contamos, hicimos pruebas pero no se detectaron errores en las pruebas. En futuras ocasiones intentaremos que las pruebas sean más amplias, con más gente votando.

Además, dado que ha habido algún fallo de codificación previo al cifrado, vamos a implementar tests automáticos de comprobación de codificación y descodificación del voto en la propia cabina de votación para detectar si hay algún problema en el navegador al codificar el voto, y notificar el problema en tal caso.

– implementaremos también en javascript decodificación del voto, y comprobaremos antes de votar que si codificas y decodificas tu voto, sale lo mismo que tenías al principio. Es difícil que si hay algún fallo ese fallo sea exactamente inverso en la decodificación por lo que es un test interesante.

– implementaremos varios tests unitarios aleatorios que se ejecutarán también automáticamente en la cabina de votación antes de votar, donde se generarán votos aleatorios y se les pasará por el proceso de codificación y el de descodificación.

– implementaremos varios tests unitarios con ejemplos de codificación que podría fallar, donde comprobaremos que el resultado de la codificación es el esperado.

Veredicto: Los piratas ya tienen sus 3 primeros candidatos

El resultado de las votaciones fue aprobado unánimemente (8 votos a favor y 1 abstención) por la confederación pirata y ya han notificado los resultados, que enlazamos nuevamente aquí. La experiencia ha sido muy positiva, se han presentado problemas que han sido corregidos por la seguridad del sistema, sin embargo, es también un recordatorio de que el software nunca se acaba y que nadie es perfecto :)

Mi conclusión es que es cierto que ha sido un poco arriesgado usar esta versión “beta” para las primarias, pero que por otra parte el sistema incluye una serie de medidas de seguridad como es la distribución de confianza en autoridades que lo hacen medianamente robusto. Sin quererlo, hemos demostrado la utilidad del sistema de autoridades para que no se tenga que confiar sólo en nosotros. Además el secreto del voto se ha preservado, y el recuento es verificable.

¡Gracias!

Gracias a todos los que han ayudado a sacar este proyecto adelante, quedan muchos retos por delante, no solo técnicos, la participación por ejemplo es un desafío constante. Pero como diría Gimli: “Muerte segura, victoria incierta… ¿¡A qué esperamos?!”.

 

 

One thought on “Post Mórtem”

Comments are closed.