Confiar está bien, pero controlar es mejor

Aplicaciones reproducibles en F-Droid

Autor: Nico Alt (CC BY-NC-SA 4.0)

There’s also an English version. Es gibt auch eine deutschsprachige Version.

Gracias al software libre, los usuarios pueden verificar si una aplicación hace lo que dice. Pero solo algunas personas compilan software desde el código fuente. Por el contrario, la mayoría de las personas usa aplicaciones que obtiene de Google Play o la App Store de Apple, donde cada aplicación la compila su desarrollador, o de F-Droid, donde todas las aplicaciones las compila el propio proyecto. En los tres casos, hay que confiar en que las aplicaciones solo tienen lo que está accesible en el código público. Pero no es muy difícil modificar una aplicación antes de compilarla sin que nadie se dé cuenta. Es este el problema que resuelven las compilaciones reproducibles. Si una aplicación se compila reproduciblemente, se puede saber si alguien la modificó o si se compiló directamente desde un código fuente determinado. De esta manera, los usuarios ya no tienen que confiar plenamente en los desarrolladores o en F-Droid. Cualquiera que tenga interés puede intentar reproducir la aplicación por sí mismo.

La meta de las compilaciones reproducibles es crear un método para verificar la conexión entre el código fuente y el archivo binario, o sea, el archivo final (la aplicación) que el usuario instala en su dispositivo. Contra toda lógica, compilar una aplicación varias veces desde el mismo código fuente no resulta en los mismos archivos binarios la mayoría de las veces. En cada compilación, surgen diferencias en los binarios que no cambian el funcionamiento de la aplicación, pero que hacen imposible verificarla. Con suerte, es suficiente anotar las versiones de las herramientas de compilación (build tools). Pero hay casos que no se resuelven tan fácilmente.

Las compilaciones reproducibles no eran tan relevantes en el desarrollo de software hasta que, en los últimos años, varios proyectos de software libre han trabajado en ellas. Cuando se puede compilar software de una manera reproducible, se abren muchas posibilidades. Es por ejemplo mucho más fácil aceptar donaciones de potencia de cálculo o de infraestructura porque ya no hay que confiar totalmente en el hardware usado para compilar el software. F-Droid es un buen ejemplo: el repositorio de F-Droid solo tiene aplicaciones que son software libre. Para evitar que los desarrolladores puedan modificar las aplicaciones antes de compilarlas, F-Droid compila todas las aplicaciones por sí mismo. Eso es, al mismo tiempo, su mejor punto fuerte y su punto más frágil: porque F-Droid realmente compila cada una aplicación ofrecida, el servidor de compilación tiene restricciones de seguridad muy altas y solo Ciaran Gultnieks –que fundó el proyecto hace nueve años– tiene acceso a este servidor. Este punto tan importante en la infraestructura de F-Droid también es su cuello de botella más grande y a menudo ocurre que las actualizaciones se atrasan.

Ver descripción abajo

En esta imagen se puede ver cómo un pequeño texto (hash) hizo imposible reproducir la aplicación OsmAnd~. La imagen muestra los resultados de diffoscope, un software para comparar archivos binarios. A la derecha se puede ver que se añadió información sobre las herramientas de compilación usadas, que es muy importante para poder reproducir una aplicación.

Hay planes para mejorar la situación de F-Droid y todos se basan en la idea de las compilaciones reproducibles. Una posibilidad que se podría realizar inmediatamente fue la que el autor de este texto recomendó a NewPipe, una aplicación alternativa para YouTube. Consiste en lo siguiente: si se puede reproducir una aplicación, F-Droid puede incluir el archivo binario original del desarrollador. Cuando el proceso de actualizaciones de F-Droid se atrase por cualquier motivo, los desarrolladores de la aplicación pueden enviar una notificación a los usuarios para que actualicen a una nueva versión sin tener que esperar a F-Droid. Esto es posible porque el usuario no instaló la versión firmada de F-Droid, sino la del desarrollador, así que se puede descargar e instalar la actualización del desarrollador sin esperar a que F-Droid compile, firme y publique la nueva versión. El equipo de NewPipe quiere implementar este mecanismo en los próximos meses. Otro plan de medio a largo plazo es descentralizar la infraestructura de F-Droid completamente. Cuando la mayoría de las aplicaciones se compile de una manera reproducible, más contribuidores de F-Droid podrán usar su propia potencia de cálculo para intentar reproducir aplicaciones. Después de compilar una aplicación, ellos podrán anotar si pudieron reproducir la aplicación o no. En el caso de que una cantidad suficiente de servidores oficiales estén de acuerdo en que una aplicación fue compilada indiscutiblemente desde el código fuente oficial, se puede incluir la aplicación en el repositorio de F-Droid sin necesidad de esperar al actualmente único servidor.

Con todos estos avances, los usuarios podrían instalar pronto una aplicación desde F-Droid que muchos ya están usando y que, por restricciones del desarrollador, hasta ahora no se podía incluir en el repositorio: Signal. Aunque hubo varios intentos, la aplicación de mensajería instantánea no está disponible en F-Droid. Desde que cambió su nombre anterior, TextSecure, la organización detrás de Signal no permite distribuir archivos binarios firmados por otras personas. Por esta razón, los usuarios tienen que confiar en que nadie modificó la aplicación. Si se pudiera reproducir la aplicación de Signal, cualquiera –incluyendo F-Droid– podría chequear que la aplicación no contiene software malicioso. F-Droid ofrece la infraestructura necesaria para hacerlo. Ahora es el turno de Signal de hacer posible reproducir la aplicación.

Ver descripción abajo

La aplicación Checkey muestra detalles sobre las firmas de las aplicaciones instaladas. En esta imagen se puede ver que F-Droid firmó la aplicación Transportr (CN=FDroid), mientras que los desarrolladores oficiales fueron quienes firmaron la aplicación Briar (O=briarproject.org).

Como usuario es difícil saber si una aplicación fue compilado de una manera reproducible o no. El principio de compilaciones reproducibles se popularizó en los últimos años y por esto aún no hay una opinión común sobre cómo se muestra qué una aplicación es reproducible o no. Cuando se escribió este texto, solo hubo unos pocos aplicaciones reproducibles en el repositorio de F-Droid. Si se hubiera mostrado un aviso a los usuarios en estos días, muchos tendrían que ignorarlo para poder seguir usando F-Droid. Para no “quemar” este tema, por lo menos al inicio F-Droid decidió no mostrar ningún información sobre el estatus de reproducibilidad. F-Droid va a reconsiderarlo cuando compilaciones reproducibles son más populares y diseñadores de experiencia de usuario (UX) han consentido en “buenas prácticas”. Para cualquiera que aún está interesado, hay dos opciones para encontrar más informaciones. Una es la aplicación Checkey que muestra informaciones sobre las firmas de aplicaciones instaladas. En estos días, la mayoría de las aplicaciones está firmado con el certificado de F-Droid. Estas aplicaciones tienen el texto “CN=FDroid […]” en la columna “certificadora” (Issuer). Aplicaciones como Briar, que están en F-Droid con las firmas oficiales de sus desarrolladores, tienen otros textos, como por ejemplo “O=briarproject.org”. Otra opción para saber más es visitar la pagina web verification.f-droid.org. Todas las aplicaciones de F-Droid están compilado otra vez de este servidor y después informaciones están publicado si una aplicación fue reproducido con éxito o no. Desafortunadamente no significa qué poder reproducir una aplicación precede a la inclusión de los archivos binarios de los desarrolladores. Para esto, los desarrolladores de las aplicaciones tienen que trabajar juntos con F-Droid.

Compilaciones reproducibles también son importantes en otros áreas como software libre. Como desarrolladores de software libre, empresas que crean software propietaria pueden ser victimas de ciberataques ([1], [2], [3]). Ya pasó varias veces que software malo infectó la infraestructura de empresas que resultó en modificaciones de su software producido durante el proceso de compilarlo. Para poder detectar y reducir el riesgo de ser elegido como objetivo de estos ataques, vale el tiempo para hacer reproducible el software. Cuando se tiene compilaciones reproducibles, varios servidores independientes puedan compilar un software y compararlo al fin. Si todos tienen exactamente el mismo archivo binario, se puede ser muy seguro qué el software producido no tenga código malo. Por supuesto, solo es verdad si el código fuente tampoco no tiene software malo. Por esto, principios como compilaciones reproducibles no reemplazan, pero completan principios como exámenes de penetración o revisiones de código. Un avance totalmente diferente pasa con actualizaciones parciales (delta updates). Con esta forma de actualizaciones, usuarios solo descargan las diferencias entre diferentes versiones de archivos binarios. Esto tiene el beneficio de que no se descarga todo el archivo y así ahorra datos. Android usa actualizaciones parciales desde hace mucho tiempo y Microsoft las usa también. Desde Windows XP se llaman “archivos de instalación rápida”. Cuando no es posible reproducir un software, modificaciones pequeñas ocurran con cada compilación que resulta en actualizaciones más grandes. Esta es una de las razones porque Google también está interesado en hacer posible reproducir aplicaciones y porque arregló un problema que había existido por un rato.


No fue muy difícil reproducir aplicaciones en Android hasta que vino la versión 3.0.1 del plugin de gradle. Con versiones más adelantes, ya no fue posible reproducir una aplicación en diferentes computadoras, porque el archivo resources.arsc se diferenció de una computadora a la otra. Uno de los desarrolladores de Briar, Torsten Grote, reportó este problema a Google en Junio de 2018. Él estaba trabajando en reproducir la aplicación de mensajería peer-to-peer para ponerla como primera aplicación reproducible en F-Droid. No logró hacerlo porque la aplicación de transporte público Öffi entró como primera a F-Droid. Esto fue posible porque Öffi usó una versión más antigua que no tenía problemas con reproducir aplicaciones. Tres meses después, Briar también entró a F-Droid porque Grote encontró una solución alternativa con usar un sistema de archivos que se llama disorderfs. En febrero de este año, los desarrolladores de Google por fin anunciaron que arreglaron el problema y que reproducir aplicaciones será posible con las próximas versiones 3.4 y 3.5 del plugin de gradle. Ojala qué así más aplicaciones reproducibles entren a F-Droid.


En estos días, varios proyectos diferentes trabajan en compilaciones reproducibles. Unos de ellos son la criptomoneda Bitcoin y el proyecto Tor. Ambos proyectos han trabajado en hacer posible reproducir los archivos binarios que distribuyen. Con Bitcoin, varios desarrolladores independientes compilan una nueva versión y comparan si tengan el mismo resultado como otros desarrolladores. Solo si todos tienen el mismo resultado, ellos todos juntos firman el archivo binario. Cualquiera que tiene interés puede encontrar instrucciones con más detalles en las paginas web de los proyectos.

Noticias tristes se anunció en Debian. En teoría, la versión más nueva (Buster) del sistema Linux tiene una cantidad muy grande con más de 90% de compilaciones reproducibles. No obstante, uno de los desarrolladores de Debian, Holger Levsen, reportó en un correo electrónico que solo 54% de los archivos binarios oficiales serán compilado de una manera reproducible. Esto es porque una gran cantidad de los programas fue compilado antes de que problemas con la reproducibilidad fueron evitados de las herramientas de compilación. Ahora están pensando en compilar todos los programas de nuevo para aumentar esta cantidad.


Reproducir una aplicación no siempre es tan fácil. A veces hace falta mucho trabajo para que se pueda compilar una aplicación de una manera reproducible. En cualquier caso, vale la pena. Hasta que se pueda reproducir e incluir las versiones originales de la mayoría de las aplicaciones de F-Droid, puede pasar algún tiempo más. Pero los fundamentos ya existen y ahora, en general, solo hay que resolver unos pequeños problemas y hablar con los desarrolladores de las aplicaciones para incluir los archivos binarios que ellos generan de su aplicación.

Muchísimas gracias a Roboe, que me ayudó bastante a mejorar mi traducción.

Enlaces

Documentación de F-Droid sobre servidores de verificación

Interesante si quieres reproducir aplicaciones tú mismo

Documentación de F-Droid sobre aplicaciones reproducibles

Más detalles sobre este tema

Confianza, privacidad y software libre - F-Droid.org

Artículo de eighthave, colaborador de F-Droid y de Guardian Project, que también trata sobre aplicaciones reproducibles