Etiquetas

, , ,

Hace unos días escribí un apunte sobre las tan comentadas elecciones electrónicas de Podemos. Comencé el artículo con una descripción de los requisitos que tiene que tener un sistema de votación (de papeleta y electrónico) y el procedimiento que se seguía en las votaciones tradicionales para asegurar que se cumplan esos requisitos (voto secreto y anónimo, no adulteración, impedir agregar votos, auditoría…).

En ese apunte me limité a comentar el problema del censo de Podemos, y cómo sólo eso hacía que se incumpliesen varios de los requisitos mencionados anteriormente. Aquí introduzco un leve paréntesis para dejar claras algunas cosas (lo pongo «entrecomillado» para que te lo puedas saltar).

No afirmo que Podemos deba cumplir todos esos requisitos, eso es cuestión de sus autoridades, aunque dije que me pareció un error y con el tiempo confirmé que tienen un profundo desconocimiento de lo que se hizo (como quedará claro en este apunte, espero).

Tampoco pongo en dudas la legitimidad del triunfo, y no tiene nada que ver con ideología o suposiciones sobre manipulación. El tema es puramente estadístico: el ganador tuvo más del 80% de los votos. Para que el triunfo haya sido fraudulento se requerían demasiados votos adicionales, tantos que hacen que la probabilidad de que en realidad hubiese ganado la alternativa es muy baja. Imaginemos que hay 100.000 votos válidos, y que fueron repartidos por igual entre ambas candidaturas (50.000 votos a cada uno). ¿Cuántos votos adicionales fraudulentos hacen falta para que una de ellas el 80%. El cálculo es fácil, se trata de resolver la siguiente ecuación muy sencilla: (50.000 + x) / (100.000 + x) = 80%. Exacto, hacen falta 150.000 votos adicionales, o lo que es lo mismo 200.000 votos para una de las candidaturas, cuatro veces más de lo que obtuvo. O 250.000 votos totales, dos veces y medio de los emitidos legítimamente. Y todo esto considerando que no hubo ningún voto fraudulento para la otra candidatura. No imposible pero tan altamente improbable que no le veo sentido a poner en dudas quién fue el ganador.

Obviamente, si el resultado hubiese sido ajustado estaríamos hablando de ello, por lo del censo más lo que relato abajo.

No continué más en profundidad con el software y todos los mecanismos de cifrado y seguridad que afirmaron públicamente que tenía, aunque al ver el primer documento de cómo se pasa información del servidor de Podemos al de AgoraVoting ya quedé sorprendido. Si eres informático y sabes algo de cifrado y voto electrónico te pido que lo leas y pienses por un momento.

¿Ya has encontrado el problema? Deberías.

Si no es así tendrás una idea de lo difícil y complejo que son estos dos temas (cifrado y voto electrónico), y por qué me tomé varios días para averiguar mejor. Cabía la posibilidad de que ese «agujero» estuviese tapado por una infraestructura adicional con cifrado y auditoría, pero después de mirar partes del código y de decenas de emails llegué a la conclusión que no. Lo que se ve es lo que hay, sin más.

Intentaré explicar el problema de la forma más sencilla y breve que pueda, pero para los perezosos o apresurados va una respuesta rápida: seguramente habéis leído que tiene mecanismos muy complejos de cifrado, con claves públicas, privadas, código de universidades famosas, un proceso de escrutinio tan complejo que hasta toma horas para contar unos 100.000 votos, etc., todo con el objetivo de impedir que otros (informáticos de Podemos, AgoraVoting, hackers, crackers, admins o hasta la NSA) puedan modificar y manipular votos, y garantizar que el voto sea anónimo. Bien, ahora imaginaros que todo ese sistema sea como una puerta roja muy segura, con la última tecnología en cierres, materiales resistentes y mecanismos de seguridad y alarma. El resultado final es literalmente el que veis a continuación:

Puerta en el campo

(fuente de la foto)

Los votos son manipulables e indetectables por el cifrado

El problema fundamental, que explica el documento de integración Podemos-AgoraVoting anteriormente enlazado, es que desde el momento que un votante se conecta a la plataforma de AgoraVoting en este servidor ya se conocen todas las claves para generar un «voto válido» criptográficamente.

info de usuairo

Fragmento de descripción del mensaje de Podemos a AgoraVoting

Es decir, se puede generar un voto que pase los controles criptográficos. Eso significa que técnicamente se puede, y es muy sencillo hacer lo siguiente sin que pueda detectarse con todo el sistema de control criptográfico:

  1. Se puede modificar a posteriori el valor de un voto, en la base de datos se almacenan todos los datos necesarios. La única forma de detectarlo es que cada votante revise si su hash aparece en el listado. Pero si no aparece no se puede asegurar que se cambió el voto, puede ser un «voto no registrado», o que el usuario apuntó mal su hash identificativo. Como el voto es en principio anónimo (tampoco lo es, lo explico más adelante) no hay forma de asegurar qué ha pasado (si es que el anonimato de los votos fuese real, no lo es).
  2. Se puede cambiar el sentido del voto sin que lo sepa el usuario, ya que es posible almacenar cualquier valor y generar el «hash de identificación» para este voto. El usuario no se daría cuenta que se ha votado lo contrario.
  3. Se puede insertar votos de cualquier usuario que se haya conectado y no haya votado. La única forma de saberlo es que se obtenga un listado de qué usuarios votaron, lo que en principio no podría hacerse porque es anónimo (aunque sí que se puede, el voto no es realmente anónimo).
  4. Se pueden eliminar votos, la única forma de detectarlo es que lo descubra el usuario revisando el listado público de hashes (un problema pero común en muchos protocolos, minimizados si no se puede conocer el valor del voto).

Si estás pensando «que todo el cifrado se hace en el Javascript» estás equivocado, por una parte esa información se recibe en el servidor y cualquier programa allí podría manipular los votos. Además se puede hacer en el Javascript, que se sirve desde los mismos servidores de AgoraVoting, con el problema adicional de que son (o fueron) y pueden ser cacheados y manipulados en el camino sin que el usuario se de cuenta, o una extensión que los cambie. Ya puede ser el código del MIT, Stanford o la misma NSA, pero si no pones controles (no los había, y es complicado) para asegurar que el código que se ejecuta en los navegadores es el que se pretende

Seguramente pensarás -si no eres al menos muy leído en temas de voto electrónico y seguridad- que lo importante es la confianza que se tiene en la gente de AgoraVoting, que no modificará ningún programa que manipule, vale, pero también debes fiarte de que sus servidores no hayan sido atacados, que no haya bugs, que los Javascripts no hayan sido cambiados, que cada ordenador del votante esté libre de virus, troyanos y extensiones, que no hayan hackeado -pro ejemplo- la extensión AdBlock (usada por mucha gente) para modificar los javascript o datos recibidos, que ningún proxy intermedio lo haga, fiarte de todos los administradores de Podemos y AgoraVoting, que el código sea el mismo, etc. etc. etc.

Es decir, si confías en todo eso ¿para qué usar el cifrado? No agrega ninguna garantía original -sólo complejidad y complicaciones-, y se está subvirtiendo el primer objetivo del cifrado: evitar tener que depositar tu confianza ciega en que todo lo mencionado en el párrafo anterior es cierto.

En resumen, fue poner una puerta de colores maravillosos en el medio del campo, y no darte cuenta que no había ni paredes.

Alternativas (añadido, para ilustrar métodos conocidos)

Para solucionar el problema de la identificación se usan métodos bien conocidos, como los protocolos JCJ, Civitas y otros mejorados. En general estos protocolos son muy aptos para voto electrónico remoto pero tienen problemas de coste computacional elevado, por ejemplo en JCJ es O(votos_válidos² + votos_fraudulentos²), por lo que no son aptos para votaciones masivas.

En estos protocolos al votante V se le asigna una clave aleatoria c desde el servidor de Podemos (usando canal seguro), al mismo tiempo se genera una una cadena s = cifrado(c + cadena aleatoria), la clave pública de cifrado es la de las autoridades de escrutinio. La cadena s es la que se pasa a AgoraVoting (por canal seguro) y serviría para validar votos (además de solucionar los problemas de coacción y voto secreto), el único que conoce la clave c es el votante. AgoraVoting no la conoce, sólo s, por lo que no puede generar o cambiar votos. Tampoco podría saber el valor del voto ya que al servidor sólo le llegan un par de entradas cifradas con las claves públicas de las autoridades de escrutinio(acompañadas de dos non-interactive zero-knowledge proof).

Estos protocolos tienen buenas propiedades para evitar la «intimidación». El votante puede emitir los votos que quiera (sólo hace falta almacenar el orden), y puede verificar su voto durante y después del período de votación. Este tipo de mecanismo es fundamental en los sistemas de voto electrónico no asistido (i.e. remoto por internet), no entiendo cómo se ha fallado en esta parte crítica. Supongo que fue para hacer sencilla la integración con Podemos (requiere envío de dos claves, una al cliente y otra al servidor de AgoraVoting, y debía funcionar tanto desde web como desde la app -que abre el navegador al ir a votar-).

El sistema no da garantías de anonimato

Uno de los requisitos fundamentales de «elecciones democráticas» es asegurar que un voto es anónimo y que su autor no puede ser «rastreado» al mismo tiempo que se debe permitir auditar a los votos. Por eso eso mismo el voto electrónico es un hard problem en informática (mucho más que las transacciones económicas, que no son anónimas). ¿Por qué hay que garantizar ese anonimato? No fue siempre así (y en muchos casos es preferible lo contrario) pero el objetivo de los «elecciones democráticas secretas» es minimizar el riesgo y efectos de coacciones, soborno y compra de votos (siempre se puede votar diferente, nadie lo sabrá).

Se ha dicho repetidamente y en la prensa que AgoraVoting asegura completamente el anonimato, tampoco es cierto. En la base de datos se almacena el identificador del votante (y también hay un campo para IP, pero no sé si se usa). Este identificador es generado por el servidor de Podemos, y el requerimiento de la integración es que sea siempre el mismo para el mismo usuario y elección (como se muestra en la imagen anterior). Existe una relación biunívoca y directa entre el id almacenado en AgoraVoting y la base de datos de usuarios de Podemos (que se evita por los protocolos mencionados anteriormente).

datos de votos

En la base de datos se almacenan datos que identifican al autor, no se ha hecho nada para anonimizarlo desde que el voto se emite. De hecho es un tema muy complicado y tiene su coste, por ejemplo que no se podría votar varias veces (debería asegurarse que se hace sólo una vez, complica más el sistema), o que los usuarios no podrían consultar a posteriori el hash de su voto porque al ser anónimo sería imposible saber cuál es de él (a menos que se usen protocolos de claves como el JCJ, o en este caso se deberían meter complejos sistemas de cifrado y firmas digitales -no sé si es posible, tengo la intuición que matemáticamente es imposible hacerlo si el voto se anonimiza completamente no almacenando la clave del votante-).

De nuevo, la excusa será que te debes fiar de AgoraVoting, de Podemos, de los poseedores de las claves, de métodos de shuffling, de sus admins, de que no hay bugs de seguridad (todos sabemos que esto es muy difícil :roll:), de que nadie les roba la base de datos (también, nunca ocurrió :roll:), etc. etc.

Insisto, si te fías de todo lo anterior… ¿para qué usar complicados sistemas de cifrado que claramente no lo entienden los propios técnicos involucrados ni ofrecen garantías?

Nota: Agrego para aclarar ya que por comentarios que fui muy terminante en este tema y quedaba como que era «demasiado fácil» (perdón) cuando los más importante son los puntos anteriores, que además con protocolos JCJ minimizan los problemas de anonimato. Además de los mencionados también se usan cifrado homomórfico, shuffling y claves de varias autoridades. Aún así existen otros problemas, como el «ataque italiano» y aislar completamente la autoridad del censo (en este caso Podemos) de los participantes (Podemos). Aunque ya es exagerado para este tipo de elecciones, y bastaba con evitar el cambio de claves de usuarios compartidas.

Reflexiones

No parece ser problema de nivel «político» de Podemos [*], creo que actuaron con buena fe, incluso sus responsables técnicos. Pero estos últimos no han sido lo suficientemente precavidos e indagadores con lo que usaron. O quizás necesiten simpatizantes con conocimientos que les echen una mano.

Desconozco las intenciones de Podemos y las garantías que deseaban sus candidatos, pero todo este sistema complejo de cifrado no ofrece ninguna garantía, el control del «tally» con claves públicas y privadas fue puro teatro. Si había confianza en toda la cadena de involucrados no hace falta ningún sistema criptografía, bastaba con que AgoraVoting diese los totales de su base de datos, técnicamente las garantías son las mismas, pero el sistema mucho más sencillo y sobre todo honesto. Se montó un gran teatro se seguridad, totalmente de ficción e innecesario. Una modernísima y llamativa puerta en el medio del campo.

—-

No soy un experto en cifrado, es un tema muy complejo, aunque lo estudié en mis cursos de doctorado y me mantengo relativamente actualizado de los avances en el campo (y aún así he tenido que estudiar bastante sólo para configura un servidor HTTS/TLS y que tenga categoría A+). Tampoco soy experto en voto electrónico, pero suelo leer la bibliografía y novedades, es muy interesante: está considerado un problema informático/matemático muy duro. Por eso, cuando leo titulares en prensa de «votos electrónicos que aseguran total fiabilidad y anonimato» se disparan todas mis alarmas escépticas. ¿Ninguno de los técnicos de Podemos y AgoraVoting se dio cuenta del problema? ¿Ninguno de los que conocen algo de cifrado y voto electrónico se interesó por conocer más del sistema que aseguraban ofrecía garantías de anonimato e integridad con tantos mecanismos de cifrado? ¿Somos tan crédulos y creemos en milagros de la ciencia? (pregunta retórica).

Hasta donde sé soy el único escribiendo sobre este caso, no es por ninguna manía sino porque es un tema que me interesa y me llamó la atención. ¿A nadie más le pasó lo mismo? ¿Acaso no estamos llenos de expertos en seguridad, cifrado y voto electrónico? (pregunta retórica).

Es muy difícil que el voto electrónico pueda ofrecer el mismo nivel de garantías que las papeletas. Quizás tampoco hace falta eso, es todo cuestión de un consenso social, hasta dónde estamos dispuestos a aceptar, y sobre todo los candidatos de las elecciones. Varios países lo están intentando desde hace años para sus elecciones generales, Estonia y Brasil entre ellos, pero es difícil dar confianza. Por ello lo hacen paulatinamente (ninguno de los dos llegan al 30% de votos emitidos electrónicamente), probando sistemas y aumentando la confianza a la vez que se mantiene el margen de error suficientemente bajo (por el menor porcentaje de votantes). Pero no es fácil.

Noruega acaba de abandonar sus plan piloto fundamentalmente por el desinterés político y social (no genera confianza y por lo tanto no genera interés). El ejército norteamericano abandonó su plan de voto electrónico para sus soldados en misiones en el exterior después de gastar 22 millones de dólares porque no confiaban en la tecnología desarrollada por Accenture (supongo que no ponen a becarios para trabajar para el ejército norteamericano). En EEUU hay continuos problemas con las urnas electrónicas (malos registros, escrutinios erróneos, problemas de seguridad). En Europa en general también hay un desinterés general sobre el tema, y bastante justificado.

El voto electrónico, su seguridad y garantías, es un tema social y técnico importante, ¿os parece razonable que se haya hablado, comentado y publicitado con tanta superficialidad? ¿que se haya engañado al público sobre las garantías reales de un sistema? ¿que sea mejor no opinar públicamente -estoy seguro que sí hay muchos que lo vieron- porque es mejor no meterse en líos? ¿Se tratarán así los temas de votos electrónicos? El día que se descubra manipulación de votos en unos de esos sistemas presuntamente tan seguros (sólo es cuestión de tiempo), ¿cómo se lo explicaremos a la sociedad?

Ni me quiero imaginar las burradas que leeremos y escucharemos.

Actualización: en comentarios de Eduardo Robles respondo punto por punto a sus respuestas por email (y que planteo en este apunte), también con fragmentos de mis preguntas y respuestas de los emails finales (fueron más de 20).

—-

[*] Tengo que insistir para que no me caigan [más] piedras de fanboys tan ofendidos como ignorantes, ni que se use periodísticamente este apunte para hacerme decir cosas que no dije ni tuve intención.