5 Auditores
Cualquier persona que conozca la URL de la elección puede ejercer como auditor. La URL de una elección tiene la forma https://votar.unc.edu.ar/elections/UUID/, donde UUID es una secuencia de al menos 14 caracteres, por ejemplo 8GVH85AoSyweXG.
Un auditor se asegurará en particular de que:
- los datos de la elección (claves públicas, credenciales públicas, etc.) sean consistentes y no cambien con el tiempo;
- la urna, que contiene los votos cifrados, evolucione de manera consistente: que ninguna boleta sea eliminada a menos que sea reemplazada por una boleta con la misma credencial (esto corresponde a una nueva votación);
- la urna solo contenga boletas bien formadas (con pruebas de conocimiento cero válidas y credenciales válidas);
- se preserve la integridad de los archivos activos (HTML, Javascript, etc.) utilizados por los votantes, los custodios de claves y la autoridad de credenciales;
- el resultado de la elección se corresponda con las boletas cifradas, gracias a las pruebas de conocimiento cero de descifrado correcto producidas por los fedatarios (custodios de las claves de descifrado).
La seguridad de Belenios se basa en que las verificaciones descritas a continuación sean realizadas por al menos una persona honesta.
Nota: estas verificaciones también son ejecutadas automáticamente por el servidor, el cual está configurado con un nivel máximo de seguridad (autoridad de credenciales externa y al menos dos custodios de claves externos).
Configuración. Para realizar estas pruebas, debe utilizarse cierto software. Aquí se describe cómo ejecutar las verificaciones utilizando belenios-tool, cuyas fuentes están disponibles en Gitlab Inria y que puede instalarse como paquete en Linux Debian/Ubuntu. Para detalles sobre la instalación y utilización de belenios-tool, ver Apéndice A.
Además, debe utilizarse el script monitor_elections.py, disponible tanto el Gitlab Inria como en el repositorio de la UNC https://gitlab.unc.edu.ar/belenios-unc/tools.
A continuación, debe crearse un directorio workdir donde se almacenará la información de auditoría de la elección a medida que se descargue, en forma de repositorio git.
Para verificar que los códigos HTML/Javascript utilizados por los votantes, los custodios de claves de descifrado y las autoridades de credenciales no sean modificados por un servidor corrupto, es necesario determinar el código “correcto” para cada uno de estos programas. Luego, debe asegurarse que el servidor entregue estos archivos sin corromper. Primero, debe prepararse una plantilla que puede bajarse del repositorio de la UNC https://gitlab.unc.edu.ar/belenios-unc/tools/-/blob/master/reference_template.json, y debe copiarse en el directorio workdir con el nombre hashref.
cp reference_template.json workdir/hashrefExisten varias soluciones para asegurar que los archivos servidos por el servidor sean válidos, mientras se monitoriza la elección identificada por UUID:
o bien simplemente se confía en los archivos descargados la primera vez y se verifica que no varíen con el tiempo (principio TOFU - Trust On First Use). Entonces, el comando de monitorización es el siguiente:
./monitor_elections.py --url https://votar.unc.edu.ar --wdir workdir \ --checkhash yes --hashref workdir/hashref --outputref workdir/hashref \ --uuid UUIDCada vez que los archivos cambien (incluso en la primera ejecución), se imprimirá un mensaje de advertencia.
o bien se obtienen las fuentes, se recompila el código, se inicia un servidor local, se utiliza el comando anterior para rellenar el archivo
workdir/hashrefcon valores de confianza y se copia para usarlo como referencia para monitorizar la elección real que se ejecuta en un servidor externo. El comando es entonces el mismo que el anterior.
En todos los casos, se ejecutará regularmente un comando de monitorización denominado monitor_elections. Es posible redirigir los mensajes con la opción --logfile. Entonces, solo los comportamientos anómalos son reportados en stdout/stderr, lo que permite ejecutar el comando desde un crontab y ser advertido en caso de problema.
Fase de votación. Durante la elección, se espera que:
- en caso de tener acceso a la lista de votantes
voters.txt(solicitada al comité encargado de la elección), se verifique que el número de votantes mostrado en la página principal de la elección se corresponde con la lista de votantes y que la huella digital (fingerprint) de la lista de votantes se corresponda con la huella digital guardada previamente, por ejemplo, utilizando uno de los comandos sugeridos en el Apéndice B; - si no se tiene acceso a la lista de votantes, se verifique que el número de votantes y el peso total de la elección mostrados en la página principal de la elección se correspondan con los datos oficiales;
- se ejecute frecuentemente
monitor_elections. Idealmente, esto debería hacerse en momentos no predecibles, desde diversas direcciones IP que reflejen la diversidad de votantes y custodios de claves. El objetivo es que un servidor corrupto no pueda adivinar cuándo la solicitud proviene de un auditor o de un votante / custodio de claves genuino. A continuación, se presentan algunas pautas para parecer un usuario genuino:- como ya se ha dicho, las solicitudes al servidor deben realizarse con frecuencia, pero no a un ritmo regular y predecible;
- no solo deben usarse diversas direcciones IP, sino también información variada de configuración del dispositivo (tipo y versión del navegador, sistema operativo, plugins activos, zona horaria, idioma, resolución de pantalla, etc.) de un amplio conjunto de configuraciones típicas de dispositivos utilizadas en la realidad por humanos;
- las direcciones IP deben reflejar las diversas ubicaciones y proveedores de servicios de la población de votantes;
- el orden en que se solicitan los archivos al servidor debe seguir el orden de las visitas típicas de votantes y custodios de claves, con retrasos plausibles (no predecibles) entre cada solicitud de archivo.
Nótese que el script proporcionado en belenios-tool no ofrece soporte para esto.
Después del escrutinio. Tras la elección, se espera que:
- se ejecute nuevamente
monitor_elections. La página de la elección ahora contiene un archivoresult.jsony este comando verificará las pruebas criptográficas asociadas al resultado de la elección; - se verifique que el resultado mencionado en el archivo
result.jsonse corresponde con el resultado publicado en la página de la elección. Esta verificación debe realizarse manualmente.
Nota: Si se utiliza la herramienta de línea de comandos belenios-tool, la confianza en las verificaciones de auditoría depende en parte de la confianza en esta herramienta. Es posible escribir software de verificación independiente siguiendo la especificación de Belenios disponible aquí.
