Auditorías de código fuente
En el contexto de las elecciones automatizadas es frecuente escuchar hablar de auditorías (o revisiones técnicas) de código fuente, como una de las fases que busca garantizar la transparencia del sistema automatizado. Este es un proceso que involucra personal con perfil técnico y que muchas veces no es correctamente explicado al público en general.
Aún sin tener conocimientos técnicos detallados, debe ser posible que todo ciudadano conozca en qué consiste el proceso que se sigue durante estas auditorías. A continuación una descripción sencilla del mismo:
¿Qué es el código fuente?
Definición: Conjunto de instrucciones escritas en algún lenguaje de programación de computadoras, hechas para ser leídas y transformadas por alguna herramienta de software en instrucciones ejecutables en la máquina.
Esto quiere decir que el código fuente de un software contiene todas las instrucciones que serán ejecutadas, escritas en un lenguaje que puede ser leído y entendido por humanos, siempre y cuando éstos conozcan dicho lenguaje.
Este código fuente pasa posteriormente por una herramienta (usualmente conocida como compilador) que lo traduce a instrucciones que pueden ser entendidas por una máquina y ejecutadas.
¿En qué consisten las auditorías de código fuente?
En un proceso de auditoría, un conjunto de personas, con conocimientos técnicos, revisan el código fuente de un software, para determinar, entre otras cosas, que esté correctamente escrito, no tenga fallas, y que haga lo que se supone debe hacer. Es decir, que la auditoría permite asegurarse de que el software cumpla con la función para la que fue diseñado, y de que además, no haga ninguna otra función, de manera oculta.
Durante el proceso de auditoría, las partes involucradas pueden hacer observaciones y, en caso de no estar conformes con algo, solicitar cambios. Sólo después de que todas las partes están conformes, el código fuente es aceptado.
¿Qué ocurre luego?
Luego de la revisión y aceptación del código fuente, se procede a compilarlo, para generar los programas ejecutables, que la máquina puede reconocer. Este proceso es también supervisado por quienes participan en la auditoría, y posteriormente el código ejecutable resultante es firmado digitalmente. Cada participante del proceso de auditoría recibe entonces una copia de esta firma digital.
La firma digital permite corroborar que el software instalado en la máquina es el mismo que se auditó y aceptó, dado que cualquier cambio en el mismo supondría una alteración en la firma digital, y por lo tanto sería rechazado en cualquier verificación posterior.
Y todo esto, ¿qué quiere decir?
Esto quiere decir que una vez realizada una auditoría de código fuente (source code review) y una compilación certificada del mismo (witnessed build), es imposible introducir cambios en el software, y que estos no sean detectados por las partes encargadas de custodiar el proceso de auditoría y sus resultados.
Créditos de imágenes:
Photo by Ilya Pavlov on Unsplash
Photo by Mohammad Rahmani on Unsplash
Hola, Gracias por tu blog, ha sido bastante informativo, sin embargo tengo una pregunta: ¿cualquier persona, en este caso cualquier venezolano, puede solicitar el código fuente, para hacer su propia auditoria? ¿esa auditoria o el informe de auditoria es mostrado al publico en general?
A las auditorías son invitados los partidos políticos y éstos acreditan a los técnicos correspondientes. Podrías asistir, por ejemplo, acreditado por un partido. Pueden asistir también representantes de observadores nacionales.
El CNE publica las informes/actas de todos los procesos de auditoría llevados a cabo. Aquí están todos los documentos de la pasada elección del 7O http://goo.gl/g7IM6 y al final se encuentran todas las actas de auditorías.
Además cada partido/grupo político o grupo de observación podría elaborar y publicar su informe. Desconozco si hay alguno publicado de esta última auditoría por parte de partidos u otras organizaciones.
Hola Rui
Me gustó y sirvió mucho, para una proyecto de auditoría, el contenido de tu blog y requiero hacerte dos preguntas:
1. ¿La firma digital, no debería ser comparida: mitad y mitad?
2. Qué hacer si se da el caso que la compañía de software se niega a que su código fuente sea revisado por un eufemismo de propiedad intelectaul y además esta actitud es avalada, que no debería hacerlos, por el Tribunal Supremo ElectoraL?
Muchas gracias
Respondiendo a tus dos preguntas:
El protocolo que se siga para la generación de la firma puede definirse en común acuerdo de las partes. Sin embargo, para ilustrar lo que ocurre simplifiquemos el proceso: supongamos que sólo se genera un hash de los binarios, y este hash es entregado a todas las partes. Cualquier alteración posterior del binario, haría que el nuevo hash no coincida con el generado en las auditorías y esto bastaría para darse cuenta de la alteración. De este modo, lo importante no es cómo se haya generado este hash o firma al final del proceso, sino que todas las partes obtengan una copia de la misma, en caso de necesitar hacer una comparación posterior.
En cuanto al tema del código fuente, es cierto que muchas empresas usan el argumento de la propiedad intelectual para negarse a mostrar el código fuente. Este argumento podría tener alguna validez si se exigiera que el código fuente sea público y abierto. Sin embargo, debería ser un derecho de la autoridad electoral poder examinar (e invitar a quienes consideren relevante a este examen) el código de las aplicaciones que están comprando para algo tan importante como un proceso electoral. Esta revisión no tiene porqué hacer público el código fuente y pueden mantenerse las garantías de confidencialidad que permitan a la empresa proteger su propiedad intelectual, si ese fuera el caso.
Para citar un par de ejemplos, en Venezuela se hacen auditorías como las descritas en este artículo antes de cada proceso electoral. Bélgica por su parte solicita que el código fuente sea abierto, y es publicado por la propia autoridad electoral en un sitio web.
Un ejemplo ligeramente diferente es el de los Estados Unidos, donde los equipos y software de votación deben pasar por un proceso de certificación a nivel federal para poder ser usados. En este caso la revisión de código fuente la hace un organismo o empresa de certificación, pero nunca pasa por revisión de partidos políticos o entes académicos.
Finalmente, si no hay una ley que prevea esta revisión y la autoridad electoral no la requiere, es muy poco lo que se puede hacer, a menos que se pueda recurrir a instancias judiciales que ordenen una revisión de este tipo. Por supuesto, la posibilidad de hacer esto depende totalmente de la legislación vigente en cada país.
Saludos
Hola RUI
De verdad graciaspor toda la información. Me ayuda a ubicarme totalmente en el contexto y concuerdo contigo. En México la auditoría al código fuente la hizo la Universidad Nacional de México (258000 líneas aprox) y la ley exige sea publicado en los diarios. En fin, tengo mucha información de auditorías de Austria, Finlandia, Florida, etc. y así mismo personalmente me siento orgulloso del sistema electoral usado en Venezuela (país en el que viví 42 años), ahora vivo en Ecuador donde trato de dar el máximo para que los procesos sean transparentes y eso hace que me documente buscando ser justo en mis apreciaciones. Casi como Quijote he luchado buscando a través de mi organización política se me permita auditar el sistema de escrutinios recientemente adquirido, pero me he conseguido con situaciones muy sui géneris, por ejemplo del austro de Ecuador soy el único asesor informático que está pidiendo una auditoría lo cual me coloca en una situación apretada. Me gustaría en la medida de los posible pedir tu opinión y ayuda en los algunos aspectos fuera de este contexto, por lo que te dejo mi e-mail *****@*****.com y cuando puedas lee un artículo http://bolivarlojan.blogspot.com/p/dhondtel-cooperativismo-politico.html donde estos asutos políticos me llevaron a descubrir hasta unas fórmulas de aplicación. También tengo otro artículo http://estabienperoestamal.blogspot.com/p/pagina-01-de-prueba.html donde cuento de una lucha a favor de ecuatorianos que vivieron en Venezuela. Te comento he leído tu blog tanto como el de Smatmatic y he aprendido y disfrutado
Un abrazo y buen camino
Bolívar
Con el problema reciente del conocimiento de las claves del BIOS, ¿Cuales son los mecanismos que nos aseguran que no se reprograme la máquina con una versión trucada para el momento de la elección y luego se reprogramen con la versión original luego de la transmisión de datos?
Hola Luis,
En esta entrada http://decodingthevote.org/es/2013/04/04/que-consecuencias-tiene-que-se-conozca-la-clave-del-bios/ se explica un poco mejor lo relacionado con el BIOS. Si tienes dudas adicionales a lo explicado allí, te invito a exponerlas y te las responderemos.
Hola, si ya lei todo aquel artículo, y como tenía enlace a este que tenía que ver con el código te plantee la pregunta aquí. ¿Me la puedes responder?
Imaginate que alguien dentro de Smartmatic con acceso al código y su funcionamiento le vendio al PSUV una versión trucada para una máquina que sabe que no va a ser auditada. Les dio las claves del BIOS y el procedimiento para instalarla mientras dure el proceso y que luego vuelva a poner la original al final.
A sabiendas de que ya la clave del BIOS la tienen: «¿Cuales son los mecanismos que nos aseguran que no se reprograme la máquina con una versión trucada para el momento de la elección y luego se reprogramen con la versión original luego de la transmisión de datos?»
La explicación completa de cómo se activan todas las garantías necesarias aún en un caso como el que planteas amerita un artículo completo (ese se los debo, por el momento). Sin embargo intentaré aclarar brevemente las dudas que planteas aquí:
Por un lado, todas las claves involucradas en el proceso de votación están fragmentadas y cada sector político tiene una parte, por lo que nadie tiene una clave completa. El caso del BIOS es una excepción, que expliqué en el otro artículo. Las únicas claves que no están fragmentadas, son generadas por la propia máquina para sus procesos internos, son diferentes para cada máquina, y por lo tanto tampoco las tiene nadie.
Si alguien estuviera en capacidad de «arrancar» la máquina con otro software, por un lado no tendría acceso a los datos de electores, ya que los mismos están encriptados con claves propias de la máquina, así que no podría autenticar electores. Si pasamos esto por alto, tampoco podría transmitir, porque no tendría las claves de cifrado de datos ni tampoco los certificados digitales necesarios para autenticarse con el servidor de recepción de resultados y poder, en efecto, pasar la información.
Luego, esa versión «trucada» del software tendría que imprimir comprobantes de votación correctos, para que los electores no se den cuenta cuando emitan su voto, y al momento de que los datos «nunca lleguen» (por lo que describo en el párrafo anterior) esa mesa sería objeto de impugnación y se podrían verificar tanto comprobantes de voto como actas. En ese momento encontrarías la discrepancia.
Por último, el posible «atacante» no tendría manera de saber que la máquina «no va a ser auditada» porque el sorteo para seleccionar las mesas a auditar se hace después del cierre y de manera manual entre los presidentes de cada mesa.
Espero que la información haya sido útil.