Grupo de Cabina de votación (2014-15)
Contenido
Definición
Un subsistema de AGORA@US para mostrar las opciones de la votación donde el votante pueda realizar la votación. El voto tiene que cifrarse en cliente, nunca debe llegar al servidor el voto en claro. A la cabina sólo podrán llegar usuarios autenticados que aún no hayan votado. El voto se enviará cifrado al almacenamiento de votos
Miembros
- Francisco Javier Aguadero García: Gestor de la configuración
- Alfonso Alcántara López: Gestor de la configuración
- José Ignacio Algarín Rodríguez: Gestor de la configuración
- Carlos Borja García-Baquero: Gestor de la configuración
- José Javier Delgado Cuder: Gestor de la configuración
- David Jiménez Vargas: Gestor de la configuración
- Juan Elias Maireles Osuna: Jefe de proyecto
- David Miñon Saborido: Gestor de la configuración
- Lara Rodríguez Ternero: Gestor de la configuración
Iteraciones
- Taller de creación de grupos (29/09/14)
- Taller de arquitectura de la aplicación (01/10/14)
- Taller de gestión de código (1) (06/10/14)
- Taller de gestión de código (2) (08/10/14)
- Taller de herramientas de análisis (15/10/2014)
- Taller de gestión del código (3) (27/10/2014)
Subsistemas relacionados
Para que el subsistema de Almacenamiento de votos, pueda obtener dicho voto, le mandaremos un JSON con la siguiente estructura:
{ "age": "24", "answers": [ { "question":"Pregunta 1", "answer_question":"SI" }, { "question":"Pregunta 2", "answer_question":"SI" } ], "id": 1, "autonomous_community": "Andalucia", "genre": "Masculino", "id_poll": 32778 }
Para que el subsistema de Creación/Administración de Censos puedan comunicarse con nuestro subsistema, la URI que debe poner en el botón o enlace para que salga la cabina de votación es la siguiente:
http://localhost:8000/cabinaus/id_votacion/
Donde id_votacion siempre debe ser un número, por ejemplo:
http://localhost:8000/cabinaus/15/
ACLARACIONES RSA
Como ya se ha avisado, el cifrado-descifrado de RSA tanto en Python como en Java ya funcionan y el voto es guardado cifrado. El formato que tiene al guardarse en la base de dato de almacenamiento es:
{"votes":["J9mbVwCRkeIGewJTPyZ7ZYxDJ7GsFO.........vERJUZlc0v3eF02M0WtKxEypWA==\n"],"msg":1} (Ejemplo real, [1])
¡Advertencias!
- 1. La cadena esta codificada en BASE64
- 2. La cadena puede contener "\n" y en java puede dar problemas. Esos caracteres SÍ son necesarios.
- 3. La cadena(en un 95% de las veces) puede finalizar en "\n". Eso no pertenece al cifrado y se debe obviar. (No se porque aparece en la base de datos de ellos)
Descifrado con JAVA
BASE64Decoder decoder = new BASE64Decoder(); String textoCon64 = "textoDeLaBD"; byte[] bytesDecode = decoder.decodeBuffer(textoCon64); String textoNormal = auth.decrypt(bytesDecode, keyPrivate); System.out.println("descifrado es: " + textoNormal);
(No tomarselo al pie de la letra el código pues esta basado en muchas modificaciones del .jar de verificación que he ido realizando, pero FUNCIONA) (Este código no contempla los puntos 2 y 3 mencionados anteriormente)
Instalación del subsistema
Probado en Windows 7 SP1 x64 (imagen de DreamSpark disponible en la web de la escuela). Para otros sistemas el procedimiento es el mismo.
Probado en Windows 8 (x64 y x32) y 8.1 (x64 y x32)
- 1. Instalar Python 2.7.7 (link)
- 2. Instalar Setuptools (link) teniendo en cuenta python 2.7.7 y 64 o 32 bits
- 3. Ir a la ruta de instalación de scripts python (por defecto: C:\Python27\Scripts) desde el cmd y ejecutar:
easy_install pip pip install Django==1.4.7 pip install djangorestframework==2.4.3 pip install rsa==3.1.4 pip install django-cors-headers==0.13 pip install requests==2.5.0 pip install pycrypto==2.6.1
- 4. Ir a la carpeta donde esté el proyecto por cmd y ejecutar: manage.py runserver
- 5. Abrir el navegador en 127.0.0.1:8000
Instalación del subsistema en Ubuntu
1.- Crear carpeta llamada cabina-integracion
mkdir cabina-integracion
2.- Descargar los scripts para Linux:
3.- Mover los scripts descargados a la carpeta cabina-integracion, creada en el punto 1
4.- Dar permisos de ejecución a los scripts:
chmod +x *.sh
5.- Copiamos dentro de la carpeta cabina-integracion la última versión de cabina cabina-agora-us. La estructura que va a tener la carpeta cabina-integracion es la siguiente:
cabina-integracion | |- cabina-agora-us |- install.sh |- run.sh
6.- Ejecutar scripts:
./install.sh
./run.sh
El primer script (install.sh) instala y arranca el proyecto. El segundo (run.sh) solo lo arranca. Por tanto la primera vez que ejecutéis el proyecto después de descargarlo ejecutad el script install.sh, y el resto de las veces el run.sh
NOTA: Tras la ejecución de cada script, saldrá el siguiente mensaje: ================= OK ===================. Cuando ejecutamos el primer script para pararlo tecleamos CTRL+C, pero no paramos el segundo.