Sistemas Electrónicos de Votación

Transcripción

Sistemas Electrónicos de Votación
Universidad Técnica Federico Santa Marı́a
Departamento de Informática
Sistemas Electrónicos de Votación
Helios Voting Server
Integrantes
Rodrigo Fernández Gaete
Tel: +56 9 8419 3413
[email protected]
En éste trabajo se detallará la implementación del sistema de votación Helios en el
departamento de informática de la UTFSM.
3 de junio de 2011
Seminario de Sistemas Distribuidos
1.
1.1.
Sistemas Electrónicos de Votación
Descripción del sistema
Proceso de votación de Helios
1. Creación de la votación
El creador queda como administrador de la votación.
El sistema (Helios) mantiene una llave el-gammal privada y el administrador se queda
con el par público de la misma.
El administrador puede elegir dejar la votación identificando cada voto con su votante
o dejarla anónima.
2. Registro de los votantes
Se utiliza el nombre y correo para inscribir a cada votante.
A cada votante se le genera una contraseña de 10 caracteres aleatorios y se les envı́a
al correo de cada uno.
3. Término de Inscripción de votantes
Se congela la inscripción de votantes y se abre la posibilidad de votación a todos los
inscritos en el paso anterior.
4. Votación
a) El servidor envı́a su llave pública junto a las preguntas de la votación al votante.
b) El usuario selecciona sus preferencias sin que éstas se envı́en al servidor (no requiere
de conexión en éste paso, puede seleccionar todo estando offline).
c) El votante puede “sellar” su voto, encriptando su selección con SHA1.
d ) Antes enviar el voto ya sellado, puede elegir corroborar la información del mismo (ver
auditorı́a).
e) Una vez que decide que es momento de enviar su voto, se le pide autenticarse con su
mail y contraseña dada.
f ) Esto lo puede hacer cuantas veces quiera.
5. Auditorı́a
Una vez teniendo el voto sellado, el usuario puede elegir descargar toda la información
encriptada en conjunto con su llave privada para corroborar la información contenida
en él. Al hacer esto el voto deja de estar sellado y debe encriptarse nuevamente.
Una vez ya realizado el voto, al finalizar la votación uno puede comprobar que éste
se encuentre dentro de los votos realizados en el sistema con la información que el
sistema le envı́a una vez realizado el voto.
Es crucial para el sistema, ya que es la principal forma de asegurar la integridad de
la votación. Es importante destacar que todo votante puede comprobar su voto.
6. Finalización de la votación
Se cierran las votaciones y se procede a realizar el algoritmo mixnet a los votos.
Los votos quedan públicos, dejando abierto a que cualquier votante audite el sistema.
1
Seminario de Sistemas Distribuidos
1.2.
Sistemas Electrónicos de Votación
Caracterı́sticas
1. Integridad del sistema de votación.
Su principal fortaleza es que pone la integridad de la votación por sobre todo. Cualquier
votante puede comprobar su voto antes y después de votar, por lo que aunque se vean
comprometidos los sistemas, basta con que una parte de los involucrados revise sus votos
para comprobar la integridad del mismo.
2. Resistencia a la coerción.
No considera defensas en contra de la coerción. De hecho, considera que intentar combatir
contra ella es una pelea perdida. Incluye un botón “coarce me” para que la gente tome
conciencia del asunto (y que permite enviarle el comprobante del voto al correo de otra
persona).
3. Escalabilidad de la solución.
Está pensado para votaciones de pequeña escala, en donde se considera que la coerción que
puedan sufrir las personas es despreciable (organizaciones pequeñas, centros de alumnos,
universidades, etc.).
El mayor costo computacional está al mezclar los votos y realizar una auditorı́a completa de
la votación, ya que los algoritmos que se utilizan para éstas etapas son de orden cuadrático.
Aún ası́, al igual que en Civitas, este tipo de algoritmos es altamente paralelizable y puede
escalar de ésta forma sin muchos problemas.
4. Costos de implementación.
El sistema de votación es completamente por internet, y basta con tener un servidor web
para su implementación.
5. Proyección en el tiempo.
Hasta el dı́a de hoy es mantenido por un grupo de desarrolladores[2] y ha sido usado en
diferentes universidades.
2.
Requerimientos
Se ha determinado que para la realización del proyecto se deberá contar con los siguientes
recursos:
Servidor: Se necesitará un computador que actúe de proveedor del servicio. El sistema
operativo del servidor debe ser GNU Linux.
Computador de Escritorio: Se requerirá de un computador que actúe de cliente del
servicio en donde realizar las pruebas del sistema de votación. No requiere más que de una
conexión segura con el servidor.
Conectividad entre los dispositivos: Los sistemas de votación electrónica requieren
de una red segura para interconectar cada componente del sistema. Es por ello que serı́a
ideal contar con la posibilidad de crear redes virtuales para las pruebas entre el cliente y
servidor.
2
Seminario de Sistemas Distribuidos
Sistemas Electrónicos de Votación
Vale la pena mencionar que éstos recursos ya están disponibles en el departamento de Informática de la UTFSM, por lo que sólo quedarı́a coordinar su uso con los administradores de
sistemas del departamento.
2.1.
Hardware utilizado
1. Máquina virtual con 1024 MB RAM y 2 procesadores virtuales de 2GH.
2.2.
Dependencias de Software
1. PostgreSQL 8.3+
2. Python 2.5+
3. Django 1.1+
4. RabbitMQ 1.8+
5. Celery 2.0.2+
6. Django-Celery 2.0.2+
2.3.
Software usado
Ubuntu Server x86 64 kernel 2.6.38-8-server
python 2.7.1-0ubuntu5
python-django 1.2.5-1ubuntu1
postgresql 8.4.8-0ubuntu0.11.04
python-psycopg2 2.2.1-1ubuntu2
rabbitmq-server 2.3.1-1ubuntu1
celery-2.2.6
django celery-2.2.4
South-0.7.3
postfix 2.8.2-1ubuntu2.1
3.
Instalación
Los pasos siguientes son los llevados a cabo en un sistema Ubuntu Server.
3.1.
$
$
$
$
Instalación de dependencias
apt-get
apt-get
apt-get
apt-get
install
install
install
install
postgresql
python-psycopg2
python-django
rabbitmq-server
3
Seminario de Sistemas Distribuidos
3.1.1.
Sistemas Electrónicos de Votación
Python setup tools
Instalamos Python setup tools, luego celery y django celery[3].
$ apt-get install python-setuptools
$ easy_install celery
$ easy_install django-celery
Para celery necesitamos installar django-openid-auth y south.
$ aptitude install python-django-openid-auth
$ easy install south
3.2.
Configuración de la base de datos
Crear un usuario y la base de datos de helios.
$ su - postgres
$ createuser --superuser helios
$ createdb -O helios heliosdb
Debes recordar contraseña del usuario creado.
En caso que se te olvide, puedes cambiar la contraseña después haciendo:
$ psql
# ALTER USER helios WITH PASSWORD ’heliospass’;
3.3.
Instalación y configuración de servicio de correo
Helios utiliza un servicio de correo a través de celeryd. A continuación se utilizará postfix
como servidor de correo, utilizando el puerto que trae configurado por defecto (25).[8]
$ apt-get install postfix
// se habre una pantalla de configuración del servicio.
// se pide el tipo de servidor (Internet Site)
// y el dominio del servidor (votacion.inf.utfsm.cl)
3.4.
3.4.1.
Instalación de Helios (master branch, 30 Mayo 2011)
Instalación de helios-server
$ git clone git://github.com/benadida/helios-server.git
$ cd helios-server
3.4.2.
Instalación de los submódulos
Helios-server requiere de los proyectos jscrypto, helios-booth y helios-verifier. Para ello, hay
que modificar .git/config y .gitmodules dentro del directorio base de helios-server, cambiando la
siguiente linea:
url = [email protected]:benadida/jscrypto
por:
url =
git://github.com/benadida/jscrypto.git
Y pasar a iniciar y actualizar los proyectos:
4
Seminario de Sistemas Distribuidos
Sistemas Electrónicos de Votación
$ git submodule init
$ git submodule update
Por último, hay que hacer un procedimiento similar para el subproyecto helios-booth:
$ cd heliosbooth
// modificar la url de jscrypto.git en .git/config y .gitmodules
$ git submodule init
$ git submodule update
3.4.3.
Configuración de Helios
1. Para comenzar, copiar settings.py.sample a settings.py:
$ cp settings.py.sample settings.py
2. Actualizar los parámetros de settings.py:
DATABASE_NAME = ’heliosdb’
DATABASE_USER = ’helios’
DATABASE_PASSWORD = ’heliospass’
DATABASE_HOST = ’127.0.0.1’
DATABASE_PORT = ’5432’
DEFAULT_FROM_EMAIL = ’Ben Adida for Helios <[email protected]>’
URL_HOST = "http://votacion.inf.utfsm.cl:80"
SECURE_URL_HOST = "https://votacion.inf.utfsm.cl:443"
SOCIALBUTTONS_URL_HOST = "http://votacion.inf.utfsm.cl:80"
SITE_TITLE = ’Helios Server’
# FOOTER links
FOOTER_LINKS = [{’url’:’http://usg.princeton.edu/elections’, ’text’:’USG
Elections Center’}]
WELCOME_MESSAGE = "welcome"
# email server
EMAIL_HOST = ’localhost’
EMAIL_PORT = 25
EMAIL_HOST_USER = ’’
EMAIL_HOST_PASSWORD = ’’
EMAIL_USE_TLS = False
3. Actualizar reset.sh e indicar la base de datos y usuario utilizado:
#!/bin/bash
dropdb heliosdb -U helios -W
createdb heliosdb -U helios -W
python manage.py syncdb
python manage.py migrate
echo "from auth.models import User; User.update_or_create(user_type=’password’,user_id=’be
5
Seminario de Sistemas Distribuidos
Sistemas Electrónicos de Votación
4. Ponemos un logo por defecto y listo:
$ cd server_ui/media/
$ cp logo.gif.sample logo.gif
$ cp footer-logo.gif.sample footer-logo.gif
3.4.4.
Iniciar el servidor Helios
Inicializamos la base de datos y cargamos los modelos:
sh ./reset.sh
Por último, se inicia el servidor RabbitMQ utilizando celeryd y corremos a modo de prueba
el servidor de desarrollo (Nota: Ambos servicios requieren de permisos de acceso de los puertos
de red que utilizan):
$ python manage.py celeryd
$ python manage.py runserver 0.0.0.0:80
Para poder dejar a ambos corriendo en consola, se puede utilizar el programa screen:
$ apt-get install screen
$ screen
$ python manage.py celeryd
[presionar ctrl + a, d]
$ screen
$ python manage.py runserver 0.0.0.0:80
[preseionar ctrl + a, d]
Luego, para volver a una de las consolas, simplemente se utiliza el comando screen -r.
Helios puede funcionar de forma autónoma utilizando el comando runserver del framework
de django, lo cual es muy útil para el desarrollo de la aplicación. Ahora, lo recomendable es
utilizar un servidor web como apache[1] una vez que el periodo de testing y desarrollo halla
finalizado. A continuación se explica como dejar andando el servicio utilizando apache:
1. Instalar apache y el módulo para cargar el proyecto de django[5][6][7]:
$ apt-get install libapache2-mod-wsgi
2. Crear un certificado ssl para apache[9]:
$ sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem
3. Configurar apache para que utilize ssl:
sudo a2enmod ssl
4. Modificar el path al certificado de apache creado en el paso anterior en el archivo /etc/apache2/sitesenabled/default-ssl
SSLCertificateFile
/etc/apache2/ssl/apache.pem
5. Modificar el archivo django.wsgi del proyecto helios-server[4]:
sys.path.append(’/home/votamelo/helios-server’)
6
Seminario de Sistemas Distribuidos
Sistemas Electrónicos de Votación
6. Agregar la dirección del proyecto al archivo /etc/apache2/httpd.conf :
SGIScriptAlias / /home/votamelo/helios-server/django.wsgi
7. Darle permisos de acceso a apache de helios-server:
$ chown www-data.www-data -R helios-server
8. Reiniciar apache:
sudo /etc/init.d/apache2 force-reload
7
Seminario de Sistemas Distribuidos
Sistemas Electrónicos de Votación
Referencias
[1] Apache web server configuration.
httpd.html.
https://help.ubuntu.com/10.04/serverguide/C/
[2] Equipo de desarrollo de helios. http://heliosvoting.org/about-us/.
[3] Helios install documentation. http://documentation.heliosvoting.org/install.
[4] How to use django with apache and mod wsgi. https://docs.djangoproject.com/en/1.
2/howto/deployment/modwsgi/.
[5] libapache2-mod-wsgi
info.
libapache2-mod-wsgi.
http://packages.debian.org/unstable/python/
[6] Modwsgi
django
integration.
IntegrationWithDjango.
http://code.google.com/p/modwsgi/wiki/
[7] Modwsgi
quick
install.
QuickInstallationGuide.
http://code.google.com/p/modwsgi/wiki/
[8] Postfix installation. https://help.ubuntu.com/community/Postfix.
[9] Ssl install method in apache.
apache2/SSL.
https://help.ubuntu.com/community/forum/server/
8

Documentos relacionados