Voto electrónico en Brasil: técnicos versus opinólogos

En el plenario de comisiones de la Cámara de Diputados de la Nación que se realizó el 4 de agosto de 2016 (en la que varios expusimos nuestras críticas al proyecto de implantación de voto electrónico) el diputado por la UCR Mario Negri elogió el sistema utilizado en Brasil, llamando “fabulaciones” a las advertencias de los especialistas.

¿Cuál es la cualificación de Negri para aseverar esto? Ninguna. Solo haber estado ahí y haber tenido un reloj para determinar la velocidad de los resultados. A continuación, la traducción de un fragmento del informe elaborado por el investigador Diego Aranha y su equipo integrado por especialistas de las Universidad de Brasilia, en el que se detallan las graves vulnerabilidades encontradas (y muchas aún no solucionadas) en el sistema “rápido y furioso” que maravilla a nuestro legislador.

Vulnerabilidades en el software de la máquina de votación brasileña

Diego F. Aranha, Marcelo Monte Karam, André de Miranda, Felipe Scarel

Resumen

Este informe presenta un análisis de la seguridad del software de la máquina de votación brasileña basado en la experiencia de los autores como participantes de la 2da. edición de las Pruebas Públicas de Seguridad del Sistema Electrónico de Votación organizadas por el Tribunal Superior Electoral (TSE). Durante el evento, fueron detectadas vulnerabilidades en el software que permitieron recuperar el orden de los votos computados. Presentamos escenarios donde las vulnerabilidades permiten la posibilidad de fraude electoral y sugerencias para restablecer la seguridad de los mecanismos afectados. También se señalan otras debilidades del software y de las prácticas utilizadas para su elaboración. En particular, este informe se refiere a los principales problemas de diseño y/o implementación de los mecanismos de seguridad detectados en el software de la máquina de votación:

  • Protección inadecuada del secreto del voto: los votos son almacenados fuera de orden, pero es trivial recuperarlos en orden a partir únicamente de los productos públicos de una elección y conocimiento superficial del código fuente, que también es de acceso público a los partidos políticos.
  • Cifrado inadecuado: la misma clave criptográfica es utilizada para cifrar el soporte de todas las máquinas de votación. Utilizando una analogía clásica de un candado como abstracción de técnica criptográfica, esto equivale a proteger medio millón de candados con una misma llave, dado que esta es la cantidad aproximada de equipos en operación. Además, la llave que descifra todos los soportes de almacenamiento está almacenada en “texto plano” en la parte no cifrada de los mismos. Usando la misma analogía, esto equivale a esconder la llave del candado debajo de la alfombra y confiar en el secreto de esa ubicación como fuente de seguridad.
  • Uso de algoritmos obsoletos: la función de digesto criptográfico utilizada ya no ofrece la seguridad prevista para su aplicación en verificación de integridad. Esta aplicación específica de la función elegida ya no es recomendada desde hace al menos 6 años.
  • Formulación errónea del modelo de atacante: se ha puesto demasiado énfasis en el diseño de mecanismos resistentes solo a atacantes externos, cuando los atacantes internos representan un riesgo mucho mayor.
  • Proceso de desarrollo defectuoso: prácticas inseguras permiten la introducción accidental o maliciosa de vulnerabilidades de software, indicando claramente que el proceso de desarrollo adoptado por el TSE es inmaduro desde el punto de vista de la seguridad.
  • Verificación de integridad insuficiente: el software de la máquina de votación verifica su propia integridad durante el proceso de inicialización, pero toda la información necesaria para subvertir ese mecanismo se encuentra almacenada en las propias máquinas de votación, con diferentes dificultades para un ataque, dependiendo de la presencia de un módulo de seguridad de hardware. En máquinas sin este recurso, el problema de verificación es reducido a sí mismo, sin una fuente externa de confianza. En este caso, “software auto-verificable” por firma digital equivale a confiar en la firma de puño y letra en un documento solo por el testimonio del propio “autor”, que de esta forma puede hacerse pasar por quien quiera. Es importante destacar que una firma auténtica solo certifica el procesamiento del contenido firmado en algún punto del tiempo y el espacio en el cual la clave de firmado también estaba presente.Incluso si los mecanismos de verificación de integridad no son eludidos y funcionan satisfactoriamente, no hay garantía alguna de que el contenido del documento es en realidad el deseado, dado que el mismo (software) tiene una extensión de millones de líneas (de código). Si el software tiene vulnerabilidades (como las descritas en el presente documento), la verificación de integridad (cuando no es subvertida) tiene el efecto secundario de asegurar que las mismas vulnerabilidades estarán presentes en todas las máquinas. La versión del código observado por los autores asimismo tenía desactivada la verificación de integridad de parte del software contenido en la máquina, evidenciando las limitaciones intrínsecas de la técnica.

Más detalles acerca de los problemas anteriores se proporcionan en este informe, pero se pueden observar de antemano que varias de las características implementadas en el software de la máquina de votación no representan mecanismos de seguridad, sino apenas de ofuscación, no resistiendo a empleados internos o atacantes persistentes. Como muchos de los problemas encontrados resultan de defectos arquitectónicos o de premisas de diseño inadecuadas, es poco probable que la intervención puntual en alguna de esas cuestiones resuelva las causas fundamentales de su ocurrencia. Es imprescindible que se ejecute una revisión crítica completa de los procesos de desarrollo de software para que se establezcan buenas prácticas que lleven a evitar que se introduzcan nuevas vulnerabilidades accidentalmente o intencionalmente por agentes maliciosos internos o externos. Dado que el modelo de máquina de votación adoptado en Brasil depende exclusivamente de la integridad del software para lograr la integridad de los resultados, los problemas aquí discutidos adquieren un carácter crítico y requieren con urgencia la introducción de mecanismos que permitan la auditabilidad de los resultados independientemente del software. Solo con una revisión de prácticas e instauración de metodología para la evaluación continua del sistema, es posible que el software de las máquinas de votación satisfaga los requisitos mínimos y plausibles de seguridad y transparencia.

Ver documento completo (en portugués).

La ignorancia es atrevida

¿Sabrá el diputado Negri lo que significa desordenar los votos con la función srand(), usando como semilla la misma hora (en segundos) que la máquina imprime en el acta de apertura? No parece.

Me pregunto si el diputado Mario Negri será capaz de diagnosticar el estado de salud de una persona con solo dialogar con ella. O si podrá determinar el estado de un automóvil con solo dar una vueltita a la manzana. Como sea, y en base a su “observación” en una elección, el legislador no tiene ninguna duda de la aplicabilidad del voto electrónico (ya sea en la variante brasileña o en la que el oficialismo impulsa en la Argentina). ¿La opinión de los expertos? Fabulaciones, seguramente.

Adenda (14 de febrero de 2016)

El Jefe de Gabinete de Ministros Marcos Peña también pone como ejemplo el sistema de voto electrónico usado en Brasil.

Adenda (4 de octubre de 2017)

Diego Aranha estuvo en la Argentina participando de la conferencia de seguridad informática ekoparty, donde dio una conferencia. También fue entrevistado por La Nación.

Dejar un comentario?

1 Comentarios.

  1. Brasil: ¿Es segura la urna electrónica? | blog no oficial - pingback on 21 de agosto de 2016 @12:01

Deje un comentario

NOTA - Puede usar estosHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Trackbacks y Pingbacks: