29 junio 2011

Ágora Ciudadana, el parlamento virtual

El proyecto Ágora Ciudadana trata de desarrollar un sistema criptográfico de votaciones que permita el voto seguro a través de Internet, soporte delegación de voto y escale masivamente. Ágora es software libre. Con esos ambiciosos requisitos cualquiera diría que este proyecto es una quimera. Y sin embargo eso es lo que perseguimos su equipo de desarrollo, del cual un servidor (Eduardo Robles, Ingeniero Informático) forma parte, y estamos razonablemente seguros de que es posible.

Los requisitos del proyecto son los mencionados anteriormente, son claros y vienen dados de la idea detrás del Partido de Internet (PDI), partido del cual nació el desarrollo de Ágora. El PDI es un partido político no partidista que no tienen ni jamás tendrá ideología política puesto que su único y radical propuesta es que sus parlamentarios electos votarán en las cámaras de representantes proporcionalmente a lo que la gente vote previamente por Internet mediante Ágora.

Esquema de Seguridad


El esquema de seguridad del sistema de votaciones de Ágora se basa en la autenticación y firmado de los votos mediante DNIe y un sistema criptográfico de votaciones basado en Mixnets, cifrando el voto mediante claves ElGamal y con la novedad del soporte de delegación del voto. En cuanto a criptografía, no se inventa nada nuevo sino que por lo contrario se utiliza estándares conocidos y aceptados por la comunidad criptográfica.

Poca gente conoce los esquemas de votaciones criptográficos, pero estos proveen varias características que un sistema de votaciones físicos no tienen, tal como que cualquiera pueda verificar matemáticamente las votaciones de forma universal. Además el secreto del voto reside en un conjunto de autoridades, de manera que mientras al menos una autoridad se mantenga honesta (o no haya sido comprometida), el voto seguirá siendo secreto.

Cómo funciona una votación

1. Generación de claves
En un sistema de votaciones basado en mixnets, lo primero que ocurre para crear una votación es que se establecen una serie de autoridades de las cuales dependerá el secreto del voto. Cada autoridad genera un par ElGamal de claves pública/privada y comparte la clave pública. Se reúnen todas las claves públicas y se combinan mediante un simple proceso matemático formando una clave pública conjunta de la votación. Con esta clave pública cifrarán los votantes los votos. Dicha clave pública aparecerá en el tablón público de la votación, lugar donde se publican todos los datos públicos que va generando dicha votación.

Además las autoridades deberán por su cuenta de forma independiente proveer su clave pública para que cualquier votante pueda cerciorarse de que la clave pública compartida es la correcta.

Cuanto más autoridades haya mejor, dará más seguridad al sistema, aunque por otra parte hará que la votación sea más costosa de procesar computacionalmente.

2. Recogida de los votos
En una votación, una vez se establece la clave pública de la votación, se establece el texto a votar y el periodo de votación. Cuando abre el periodo de votación, los votantes pueden empezar a emitir su voto mediante la web o la API pública del sistema de votaciones.

En un principio Ágora está concebido para que cualquier español mayor de 18 años pueda votar. Para evitar que personas no autorizadas voten y para evitar votos duplicados, se utiliza la autenticación del voto mediante DNIe. El votante mediante bien un programa que descarga para su ordenador o mediante un applet Java emite su voto, lo cifra, y una vez cifrado lo firma con el DNIe. Mediante la firma se puede autenticar los datos del votante (a modo de censo y como prueba de no repudio) y que el voto no es duplicado.

Los votos cifrados (y por tanto secretos) y firmados se publicarán en el tablón para cualquier pueda ver y certificar, incluido el propio votante, quien ha votado y quien no y comprobar que su voto cifrado se corresponde al que él emitió.


3. Recuento de votos
Una vez finaliza el periodo de votación, comienza el recuento de los votos. En sistema de votaciones con Mixnets, se hace en dos pasos: primero se anonimizan los votos de tal manera que no se pueda saber qué voto es de qué persona, y luego una vez anonimizados, se descifran y finalmente se recuentan los votos en claro. Todo este procesado lo llevan acabo las autoridades de la votación.

Se llama a este sistema "basado en mixnets" precisamente porque se utiliza una mixnet para anonimizar los votos: cada autoridad recifra y rebaraja los votos. Cada autoridad recifra los votos de tal manera que si por ejemplo un votante eligió "opción 1" y lo cifró como cifrado("opción 1", claveVotación) = A (siendo A un texto cifrado), el recifrado parcial que realiza la autoridad 1 sería cifradoParcial(A, claveAutoridad1) = A' = cifradoParcial(cifrado("opción 1", claveVotación), claveAutoridad1), de manera que A y A' son dos textos cifrados que no parecen en nada asociados pero contienen el mismo texto en claro. Este proceso lo hacen todas las autoridades, de tal manera que al final tenemos algo equivalente a cifrado(cifrado("opción 1", claveVotación), claveVotación) = A''.

Aunque parezca mentira, este proceso anonimiza el voto, puesto que una propiedad de ElGamal es que por muchas veces que cifres y recifres, el descifrado se hace en un sólo paso, es decir que descifrado(cifrado("opción 1")) = descifrado(cifrado(cifrado("opción 1")), y por tanto no se puede obtener mediante el descifrado que A = A' = A'', puesto que al descifrar no se obtienen los recifrados parciales sino el texto en claro inicial. Por supuesto para que no se pueda averiguar la equivalencia entre votos cifrados y recifrados y así conseguir la anonimización de los votos, también hay que rebarajar los votos recifrados.


Esquema de una mixnet (Wikipedia)Esquema de una mixnet (Wikipedia)


Una vez se han anonimizado los votos cifrados, las autoridades se ponen de acuerdo para descifrarlos, y una vez descifrados el recuento es trivial, y se publican los resultados en el tablón público de la votación. Como véis, los votos que emitieron los votantes realmente nunca son descifrados, por lo que son realmente secretos, ni siquiera las autoridades saben qué voto quién. Sólo si todas las autoridades se compinchasen podrían descifrar un voto de un votante concreto (o varios), de ahí que cuanto más autoridades y más heterogéneas mejor.

Como dije antes, las votaciones son universalmente verificables. Esto significa que incluso si todas las autoridades fuesen corruptas, se podría verificar si han amañado la votación. Esto es así porque para cada uno de los pasos que he mencionado del recuento (recifrado, barajado y descifrado), las autoridades deben aportar y subir al tablón público de la votación una prueba matemáticamente incontestable de que lo hicieron correctamente. Esto se hace mediante pruebas de cero conocimiento, que básicamente permiten verificar que algo es cierto sin revelar ninguna información adicional. Para saber más sobre cómo funcionan las pruebas de cero conocimiento recomiendo encarecidamente que leáis el ejemplo abstracto que se proporciona en la wikipedia, que a su vez sacaron del Paper "Cómo explicar las pruebas de cero conocimiento a tus hijos", pues es muy instructivo.

Esquema de voto delegado

Según los calculos que estuve haciendo, hay unas 6600 votaciones al año tan sólo en el congreso de los diputados, lo cual se acerca a una votación por hora de media. My poca gente podrá ejercer su derecho a voto en Ágora de forma informada votando con un torrente tan inmenso de votaciones, y ni que decir tiene que la mayoría de la votaciones son sobre temas de menor relevancia. De ahí que soportar el voto delegado sea un requisito indispensable para Ágora, de manera que los votantes puedan delegar su voto en alguien en quien confíen y que le pueda dedicar maś tiempo a esto, sin perjuicio de que pueda cambiar su delegación de voto en cualquier momento o pueda emitir un voto directo en votaciones concretas.

Cualquiera puede crear un delegado en Ágora, sólo tiene que registrarse como tal. Ejemplos de posibles delegados: "David Bravo", "Greenpeace", "Izquierda Unida", "Plataforma de pensionistas". El voto de los delegados es público, y siempre antes de que comience una votación se cierra el periodo que tienen los delegados para emitir su intención de voto para esa votación concreta: de esa manera se asegura que los delegados no puedan engañar a aquellos que vayan a delegar en ellos.

No obstante que el voto de los delegados sea público no impide que el voto de los votantes siga siendo secreto: si delegas tu voto en un delegado, nadie sabrá en quien hiciste tal delegación. De hecho si por ejemplo "David Bravo" el votante crea un delegado llamado "David Bravo" con el cual emite intenciones de voto, él como votante puede delegar su voto en su propio delegado, o delegar en otra persona, o incluso emitir un voto directo. Si delega su voto, nadie sabrá realmente si delegó o no en su propio delegado, puesto que el voto delegado es secreto.

Y ya me estoy adelantando un poco al hablar del voto delegado; El sistema para delegar el voto que hemos ideado (el mérito aquí sin duda es de David Ruescas, un Físico que ha estado desde el principio estudiando toda la morralla matemática y desarrollando el esquema de seguridad de Ágora) es utilizar una votación paralela y contínua para los votos delegados.

Como en cualquier otra votación hace falta tener una serie de autoridades, que crearán la clave pública de la votación y también procesarán los votos cuando sea necesario. Normalmente en las votaciones del congreso las opciones a responder son "SÍ", "NO", "ABSTENCIÓN". No obstante la votación de los delegados hay una opción por delegado.

En esta peculiar votación, denominada votación de delegados, se hacen múltiples recuentos, no se cierra nunca la votación y además las opciones de la votación (que equivalen a los delegados) cambian a lo largo del tiempo.

Por ejemplo pongamos que a día de hoy yo, Eduardo Robles delego mi voto en David Bravo. Lo que hago realmente es cifrar mi voto que pone como opción elegida "delego en David Bravo" con la clave de la votación de delegados, firmarlo con mi DNIe y enviarlo a Ágora que autenticará y recogerá mi voto.

En la siguiente votación que haya en el congreso, por ejemplo una reforma de la Ley de Propiedad Intelectual (LPI), el delegado David Bravo emitiría una intención de voto, por ejemplo "SÍ". Esto sería público, y cuando comience la votación en Ágora de los votos directos, David Bravo ya habrá tenido que fijar su intención de voto, de manera que si no estoy de acuerdo yo podría cambiar de delegado o votar directamente.

Una vez termina el periodo de votación, se hace un recuento de ambas votaciones: de la votación concreta sobre la reforma de la LPI, y de la votación de delegados. A lo mejor en la primera salen 100.000 SÍs, 30.000 NOs y 1.000 ABSTENCIÓN. Por otra parte, en la votación de delegados, podría resultar que la opción "David Bravo" obtiene 1.000.000 de votos delegados. Pues como David Bravo publicó que su intención de voto era "SÍ", ese millón de votos se sumaría a la opción "Sí", resultado en 1.100.000 votos a favor. si hubiese más delegados el proceso a seguir sería el mismo que con David Bravo: se contarían cuantos votos delegados tiene cada delegado y en el recuento final se sumarían dichos votos a la opción correspondiente a la intención de voto de dicho delegado.

Nótese que Ágora es el primer sistema criptográfico de votación que permite la delegación de voto, ahí sí que hemos innovado, y tenemos un paper pendiente de publicación donde describiremos en detalle sobre esta novedad.

Tecnología

El proyecto Ágora consta de dos partes a nivel de código: el backend y el frontend. El backend es Verificatum, una librería cuyo principal autor es el criptógrafo sueco Douglas Wikström y en la que estamos trabajando para que sea más rápida y escale masivamente, como hablaremos más adelante. Para la parte gráfica utilizaremos Ágora On Rails, desarrollado por miembros del PDI y que necesita ser reprogramado para introducirle todo el esquema de seguridad.

Voto Masivo

Como ya hemos dicho antes, , hay unas 6600 votaciones al año tan sólo en el congreso de los diputados, lo cual se acerca a una votación por hora de media. En las últimas elecciones generales había 35 millones de electores, por lo cual se sigue que de media debemos de poder llegar a procesar una tasa de hasta 35 millones de votos por hora para poder dar cabida a todos los posibles electores en Ágora; de lo contrario podríamos morir de éxito.

Un sistema criptográfico de votaciones donde hay que presentar pruebas de que el recuento de las votaciones se realizaron como es debido, donde hay que comprobar esas pruebas, y donde hay que comprobar que los votos son válidos tiene un coste computacional por voto relativamente alto. Por eso usamos verificatum que es una librería para administrar votaciones basadas en mixnets más rápida que tenemos conocimiento, y aun así estamos trabajando en adaptar verificatum para que pueda repartir la carga del procesado de los votos en múltiples máquinas mediante hadoop.

Las pruebas que hemos realizado con verificatum muestran que con 3 autoridades, claves de 2048 bits y cada autoridad utilizando una máquina potente pueden procesarse unos 300.000 votos por hora. No obstante estamos trabajando con los desarrolladores de verificatum en una versión más optimizada que permitirá un mayor rendimiento, además de la distribución del trabajo en varias máquinas, y tampoco descartamos en un futuro próximo procesar los votos con tarjetas gráficas OpenCL.

¿Votar por internet? ¡estás loco!

El voto por internet tiene peligros, eso no hay duda. Si el ordenador del votante está infectado, podría votar a la opción incorrecta sin saberlo, o no votar, o revelar el sentido de su voto. Si tiene un keylogger o un troyano, el secreto de su voto será más difícil de preservar. Con el fin de salvar en lo posible este problema, crearemos una distribución Linux LiveCD/LiveUSB para que los votantes pueda generar el voto en un entorno seguro y sin Internet, y luego emitir el voto una vez haya sido cifrado y firmado, desde dicho entorno seguro. Además se intentará hacer una campaña de información acerca del sistema, donde se explique como funciona el sistema, los posibles peligros, cómo funciona el DNIe y cómo ir a las oficinas de la policía para obtener el PIN, etc.

También por supuesto está el problema de la coacción: nada impide que tengas detrás a tu jefe mientras votas coaccionándote para que votes lo que él quiere. Aunque eso mismo ya ocurre con el voto por correo y no parece preocupar a la población.

A mí personalmente el voto por Internet no me entusiasma por los problemas de seguridad que pueden surgir, me gustaría poder tener una cabina de voto custodiada por un par de agentes con una máquina de voto certificada y revisada periódicamente por terceros en cada pueblo y cada ciudad, y no depender del policía como única autoridad certificadora de la validez de la firma y certificados del DNIe. No obstante creo que pese a las desventajas que pueda tener este sistema, el hecho de poder brindar a la ciudadanía la posibilidad de tener una democracia líquida mediante el Partido de Internet superan con creces las desventajas que pudieran surgir, y por tanto como mínimo vale la pena intentarlo.

Si realmente conseguimos tener tirón, podremos dedicarle muchos más recursos para fortalecer el sistema de votaciones con las medidas que he propuesto anteriormente, pero es algo costoso que no podemos permitirnos incialmente.

Ágora para todos y todos para Ágora

El proyecto nació como una necesidad del PDI, pero nos dimos cuenta que era una herramienta que podría ser útil a mucha más gente y por eso recientemente desligamos el proyecto del PDI, de manera que si bien es un proyecto que cumple nuestros objetivos, otros con intereses comunes son totalmente bienvenidos a colaborar en el desarrollo, que desde el principio ha sido software libre.

Actualmente estamos trabajando sin ánimo de lucro en nuestro tiempo libre unos pocos entusiastas. Tras las elecciones municipales y el 15M ha venido sangre nueva al proyecto y hay mucho más movimiento. Tenemos como colabores a gente del 15M, gente del Referéndum del 15 de Octubre que quieren AgoraOnRails+Verificatum para dicho referéndum, desarrolladores de PIRATA.CAT, puesto que es un partido que también busca la democracia líquida para los temas que queden fuera de su ideario y ya han conseguido dos regidores en Cataluña.

Ágora es un proyecto de software desarrollado con un fin eminentemente social, bastante ambicioso en lo que a seguridad se refiere y que no está terminado, así que todos los entusiastas de la seguridad estáis invitados a colaborar en el desarrollo de un software que a poco que dé sus frutos será muy gratificante verlo ser usado por miles de personas para hacer más democrático el sistema político en el que vivimos.


Artículo escrito por Eduardo Robles

30 comments :

Madrikeka dijo...

Super interesante la verdad, de momento no puedo ayudar, pero por favor, java noooooOOOOooooo!!!   XD  (le he cogido manía).

De todas formas os estaré siguiendo por si en algún momento puedo aportar algo.

Os deseo mucha suerte en este proyecto!!!  y esperemos que algún día podamos usar esos liveCDs!!

vierito5 dijo...

Un post genial y muy bien explicado

David Lozano dijo...

Magnífico artículo. Mis felicitaciones por contar con un proyecto tan bien pensado.
Lo importante ahora es tener todo listo para 15 de Octubre. Si la gente ve que esto ofrece las garantías necesarias, será el espaldarazo necesario para utilizarlo en las votaciones en el Congreso.

Jesus de Baldoma dijo...

Post muy interesante.
Sobre el tema que comentáis sobre "También por supuesto está el problema de la coacción: nada impide que tengas detrás a tu jefe mientras votas coaccionándote para que votes lo que él quiere." los sistemas que yo conozco permiten que una misma persona vote las veces que quiera y únicamente se le contabiliza el último voto emitido.

Eso permite poder votar delante de tu jefe lo que él quiera y más tarde, en la intimidad, volver a votar lo que tú quieras.

Ánimos!

Amunoz dijo...

Estimado Eduardo.
Me leeré con detenimiento vuestra propuesta para poder opinar con mayor criterio y ver si el conocimiento previo que tengodel tema os es útil de algún modo (sobres seguros, secreto compartido en apertura de urnas, autenticación anónima mediante firma ciega, etc). Lo que si es cierto que durante años diversos grupos de investigación tanto a nivel nacional como europeo han trabajado intensamente en esta tarea. Con resultados notorios y con la detección de problemas aún no resueltos.No sé si los considerais pero muchos, aunque no todos, de los problemas no son técnicos si no más bien sociales. Aunquees cierto que ciertas propuestas de ciertas multinacionales (españolas y no) que hemos analizado tienen una serie de problemasgordos... me estoy acordando de una empresa española en concreto :)
En cualquier caso, por si os fuera de utilidad os paso el enlace del proyecto Votescript que desde el año 2000 lleva investigando el grupo en el que trabajo (UPM) y toda una serie de artículos. De hecho de esas investigaciones una conclusión queda más o menos clara y es que un sistema de voto telemático sólo tendría interés, por los menos en la mayor parte de paises, si ello implica un aumento de la participación ciudadana (votar más veces y más cosas)
Un saludo. Suerte con el trabajoAlfonso Muñoz
http://vototelematico.diatel.upm.es/pag/articulos.htm

Amunoz dijo...

Tengo que leerlo despacio, pero a simple vista la propuesta tiene varios inconvenientes. Por falta de tiempo comento uno. El principal está en la recogida de los votos. En los sistemas propuestos hasta la fecha en la recogida de votos ya  está desacoplado el voto del votante, nadie debe conocer esa información (ni siquiera las autoridades, mesas electorales, etc)Habitualmente el proceso de desacople se realiza mediante el funcionamiento de un censo y un proceso criptográfico dado. De forma que es posible la autenticación anónima. Es decir, un votante se puede autenticar ante el sistema (el votante es válido y solo vota una vez) y una vez aceptado por el sistema el votante vota, pero su voto no esta relacionado directamentecon la autenticación, son proceso independientes. Una forma de hacer un esquema de este tipo es mediante firma ciega (imagina un ticket criptográfico firmado con firma ciega). De hecho, los análisis en redes telemáticas implican de al menos un número determinado de servidores y configuraciones de redpara evitar identificación de votante por análisis de tráfico o peticiones a servidores.

Un saludoAlfonso Muñoz

Amunoz dijo...

"Los votos cifrados (y por tanto secretos) y firmados se publicarán en el tablón para cualquier pueda ver y certificar, incluido el propio votante, quien ha votado y quien no y comprobar que su voto cifrado se corresponde al que él emitió".

De hecho si las opciones para votar son computacionalmente reducidas (lo habitual) y dado que la clave es pública, todo el mundo puede realizar ataques de texto en claro - texto cifrado y por tanto saber que ha votado que persona (adios secreto). Una manera de mitigar estos problemas es con sobres seguros (números aletorios, etc.)

Findeton dijo...

"De hecho si las opciones para votar son computacionalmente reducidas (lo
habitual) y dado que la clave es pública, todo el mundo puede realizar
ataques de texto en claro - texto cifrado y por tanto saber que ha
votado que persona (adios secreto). Una manera de mitigar estos
problemas es con sobres seguros (números aletorios, etc.)"

El método de los números aleatorios se va a usar.

Ravana dijo...

Excelente artículo.

Aquí es donde se está cociendo la verdadera revolución, y sé de muchas personas que con espectación vemos venir como el momento clave se acerca.

Padu dijo...

Tal vez también seria interesante poder delegar el voto segun temática y organizar las temáticas de manera jerárquica. Así pues yo podría delegar mi siempre en una especie de presidente del govierno, pero el voto en temas de tecnología a otra persona. Incluso, para temas más concretos, por ejemplo, los temas de seguridad nuclear en una persona con la que tengo mas confianza. Evidentemente el voto siempre se delegaría en el delegado por el tema más concreto.

Amunoz dijo...

En cuanto a la delegación (de identidad, rol, etc) es un tema realmente complejo en el que están inviertiendo mucho tiempo y dinero multinacionales y organismo de investigación públicos. El miedo que me da en este sentido es parecido al que pasa con propuestas de descentralización de dinero (dinero p2p, etc.). El tiempo dirá.

Giorgio M dijo...

Me gusta mucho... Ánimo a todos! máxima divulgación!

Findeton dijo...

Que existan diferentes categorías/temas para poder delegar en una persona/identidad diferente según el tema es algo que aunque no se contemplará en una primera versión, sí está pensado implementarse en siguientes versiones.

Román Ramírez dijo...

El problema principal no subyace en el "secreto" o en la protección del resultado de las votaciones. Hay un problema anterior mucho más crítico: la imposibilidad de verificar de forma irrefutable la identidad del votante remoto.

No es que la identidad del votante presencial sea mucho más fiable, pero es la que está institucionalizada y reconocida.

La charla sobre "Man in remote" en la Rooted es una buena referencia de lo que quiero describir.
(enlace a la charla en slideshare http://slidesha.re/dPzAKL)

Aún gustándome la idea mucho y comprendiendo los procedimientos, la probabilidad de impersonación cuando votamos a través de medios digitales me parece especialmente alta y, sobre todo, el impacto (la nulidad o peor, la aceptación de un voto falso) es tan crítico que el riesgo resultante (por ahora) hace inaceptable cualquier solución de este tipo.


De hecho, ¿qué impide a un equipo especializado buscar y desarrollar una serie de ZeroDays y bichos centrados exclusivamente en infectar a las personas que emplean este tipo de voto para promover un resultado favorable a sus intereses?

Creo sinceramente que nos faltan años todavía y mecanismos de validación de la identidad remota FIABLES como para poder pensar en este tipo de enfoque como algo práctico.

Dicho todo eso, me encanta la propuesta y creo que es cuestión de ir afinándola.

Eduardo Robles dijo...

Hola Román: está claro que es imposible verificar de forma irrefutable la identidad de una persona. Nosotros pretendemos conseguir un sistema *razonablemente* seguro, pero viable. Pretendemos hacer un sistema de votaciones que pueda utilizarse en el mundo real, y no hay ni si quiera un sistema del mundo teórico que provea esa irrefutabilidad de identidad, ni en los sistemas de votación tradicionales, y éstos últimos llevan siglos utilizándose.

Respecto de tu pregunta de los zero days, eso está contemplado en el sistema de los livecds: el voto se genera, cifra y firma con el DNIe de forma totalmente offline desde un LiveCD sin acceso a Internet y con los módulos de red no cargados en el kernel y todos los dispositivos externos (SD Cards, discos duros etc) desmontados, y cuando se accede a Internet el usuario ha desconectado su DNIe y se ha desechado del texto plano del voto. Por tanto ni se ha podido rootear el ordenador porque no tenía conectividad ni es posible una vez conectado y hackeado el ordenador acceder al contenido del voto, ni modificarlo y firmarlo porque el dnie ya no está accesible. Por supuesto, si tienes un keylogger en el ordenador o de alguna manera te han modificado la BIOS para que haga "cositas", entonces tienes un problema, pero creo que el livecd es una medida de seguridad bastante eficaz para evitar Zero Days.

Para evitar que la policía genere DNIe falsos también hemos pensado que si llegamos a tener suficientes recursos, se podría mantener por los mismos votantes en una lista blanca el certificado de cada DNIe validado a modo de "second factor auth", de manera que si la policía genera un segundo certificado para cierta persona, no pueda utilizarlo.

Me voy a ver la charla de Man in Remote de la que hablas, seguro que es interesante. Por cierto que nos vendría muy bien la ayuda de expertos en Seguridad, en voto electrónico, que controlen del DNIe, gente que sepa de OpenCL, bueno de todo tipo de gente en el mundillo en realidad =)

Eduardo Robles dijo...

Efectivamente, al utilizar ElGamal que introduce al cifrar un componente aleatorio, no es posible hacer un ataque de texto en claro tan fácilmente. Más información en http://es.wikipedia.org/wiki/Cifrado_ElGamal

Eduardo Robles dijo...

Hola Alfonso!

Ya te he respondido por correo pero lo dejo aquí también para que quede una respuesta pública =) No en todos los sistemas propuestos hasta la fecha el voto está desacoplado del votante, por ejemplo en Helios Voting ( http://www.heliosvoting.org ) el voto cifrado aparece asociado al votante en el tablón público. Un problema de Helios es que aunque asocia el voto al votante, no ofrece una prueba de no repudio de que un voto es realmente de un votante, cosa que nosotros solucionamos firmando el voto con el DNIe.

Que el voto esté asociado al votante no es un problema si se confía en que al menos una autoridad se mantiene honesta porque el voto está cifrado y por tanto no puede saberse su contenido. De que esto no es un problema estoy razonablemente seguro, puesto que sino ¿para qué serviría la fase de "mixing" de los sistemas de voto basados en mixnets, si precisamente lo que proporciona esa fase es la anonimización del voto? Si no fuese necesaria, esa fase podría obviarse, pero evidentemente es una fase necesaria en los sistemas basados en mixnets porque no utilizan firma ciega. Al final, lo que cuenta a este respecto en un sistema de votaciones seguro es que no sea posible asociar (ni por parte de las autoridades, ni mesas electorales, ni por parte de nadie) el texto en claro del voto al votante, y eso lo proporciona tanto un sistema de voto basado en firma ciega como uno basado en una mixnet o en cifrado homomórfico por ejemplo.

Según veo yo, la principal ventaja que proporciona un sistema de votaciones donde la anonimización del voto se hace con mixnets con respecto a un sistema que para ello utiliza la firma ciega como el que propones es que con las mixnets el proceso de anonimización es universalmente verificable, mientras que en el sistema de firma ciega sólo los votantes pueden verificar que su voto está ahí y no puede auditarse fácilmente por un tercero cualquiera que quizás ni ha votado, además de que la anonimización se reparte entre varias autoridades (aunque supongo que con firma ciega también sería posible la anonimización con varias autoridades). En Ágora incluso si todas las autoridades fueran corruptas cualquiera puede verificar si el proceso de anonimización de los votos es correcto, y además como el voto va firmado puede verificarse que no hay votos duplicados ni votos fantasma y que los votantes formaban parte del electorado (aunque en este caso estamos confiando en que la policía no ha generado DNIe falsos, porque no hay otra mejor manera).

Eduardo Robles dijo...

Ya tenemos contemplado "aliviar" un poco el problema de la coacción permitiendo que el votante pueda votar múltiples veces y sólo el último voto se mantenga como propones. Esa es la solución que suele darse, por ejemplo Helios Voting también incluye esa casuística. Pero como supongo que sabrás eso no soluciona el problema de la coacción, porque:
 * Quien coacciona puede comprobar que el voto que coaccionó no está ya en el tablón público, y por tanto inferir que el votante ha cambiado su voto.
 * Quien coacciona podría estar hasta el cierre de la votación pendiente, presionando y coaccionando al votante para cerciorarse que no cambia el voto, o le podría coaccionar para que votase como a él le interese en el último momento y así no tuviese tiempo para cambiar su voto.

Marc dijo...

Y es por eso que no debería haber un "tablón público". Sólo se debería poder comprobar que _se ha contabilizado_ tu voto, y ni tan sólo debería poderse ver a quíen has votado.

Juan Luis Orellana dijo...

Si no hay un tablón público, no puedes comprobar que el voto que están contabilizando es el que tú has emitido. Además, en el tablón público no están los votos en claro.
Por otra parte yo no exigiría más seguridad al sistema que la que tiene el actual: en ningún sitio se prohíbe que alguien entre contigo a la cabina electoral.

Amunoz dijo...

Valoro mucho vuestra iniciativa por la necesidad de la misma. Seguiremos discutiendo el asunto por mail por si mi opinión y la de otros colegas os fuera de alguna utilidad y el proyecto va madurando. En esta ocasión comparto mucho de lo que dice Román. Además en el pasado sistemas de votación electrónica fueron anulados y no necesariamente por equipos de expertos, más bien por "simples" ingenieros.

En cuanto a lo de la charla de "Man in Remote" lo de siempre. Confiar la seguridad en una plataforma no confiable pues trae sus problemas (ataques de relay, etc.). En cuanto a lo de la BIOS pues va a ser que si que se pueden hacer "cosas raras"..., asique cuidado con los LiveCDs :)

Un saludo
alfonso

Amunoz dijo...

Existen otras propuestas en la cual el voto no está en un tablón y el votante tiene la capacidad de verificar criptográficamente que su voto ha sido tenido en cuenta.

Eduardo Robles dijo...

En el tablón público se publican las pruebas verificables de todo el proceso, y ahí se incluyen las pruebas de que tu voto es tuyo que cualquiera puede verificar. Evidentemente no se puede comprobar a quien has votado - nadie lo sabe. Eso de que sólo tú puedas ver que tu voto cifrado está contabilizado no sirve para solucionar la coacción, porque también te pueden coaccionar para ver que el voto contabilizado es el que forjaste cuando te estaba coaccionando.

Fco Javier Castañón dijo...

Estupendo proyecto

Juan Manuel Dato Ruiz dijo...

Yo prefiero que el voto sea discreto, pero no secreto. Si el sistema sabe a quién votas deberías de tener poder para defenderte por ello, y no temer que pueda pasarte algo realmente importante. Si es así entonces esto no sería una democracia. Si el voto fuera discreto, entonces yo podría solicitar mi número identificativo de voto, ir a una publicación oficial y preguntar cuál fue el recuento de votos antes y después de mi número identificativo. De esta manera habría constancia oficial de a quién se vota, si se hizo correctamente y nadie sabría a quién lo hiciste (salvo el funcionario de turno, al que no le debería de importar).

David dijo...

Una medida también útil es la cadena perpetua para quien intente manipular el sistema de votaciones.

Juan Maneul Dato dijo...

Tal como yo lo entiendo: si se dispone de un mecanismo para hacer discreto tu voto, pero de manera que haya un número identificativo y público que lo asocia con su valor, entonces absolutamente ningún funcionario querría manipularlo; pues se sabría quién lo hizo y, para que tenga efecto, debería hacerlo varias veces... Quedando constancia pública y oficial.

Si por el contrario tenemos un sistema corrompible, entonces es como si quisiéramos ponerle precio a la posibilidad de que te pillen: el que ocupe el poder sólo tiene que sacar la billetera. El que fuera electrónico no lo deja en peor situación al actual, la verdad. Pero prefiero un sistema discreto.

Alberto Abella dijo...

¿Que licencia tiene el código? ¿es open source? y en que repositorio trabajais?
Gracias mil

louis abukari dijo...

--
¡hola
¿Está usted en cualquier tipo de dificultad financiera, ¿necesita un
préstamo para aclarar que departamento, es usted un hombre de
negocios, o una mujer que tiene la intención de ampliar su empresa,
ofrecemos todo tipo de préstamo, la amabilidad de ponerse en contacto
con nosotros a través de correo electrónico louisloanfirm@live.com

NOMBRE ...............
PAÍS ............
NÚMERO DE TELÉFONO ...........
EDAD ..................
SEXO ...............
INGRESO MENSUAL ...............
DURACIÓN DEL PRÉSTAMO ...........
CANTIDAD NECESARIA .............
PROPÓSITO DEL PRÉSTAMO ..............
ESTADO ................



louis abukari

Tany Villalba dijo...

Felicitaciones por el proyecto, y tenia algunas dudas: Mencionas que el cliente es un applet y opcionalmente una aplicacion de escritorio, y creo que talvez tecnologicamente hablando este sea el mayor problema ya que un applet se ejecuta bajo muchas condiciones en un navegador por lo que es un problema. En cuanto al aplicativo de escritorio deseaba saber en que plataforma esta hecha y si ejecuta en un windows convencional o que requerimientos tiene.