Radar Covid, análisis a fondo de su código: cómo funciona, qué está bien, qué está mal y qué falta

Radar Covid, análisis a fondo de su código: cómo funciona, qué está bien, qué está mal y qué falta

33 comentarios Facebook Twitter Flipboard E-mail
Radar Covid, análisis a fondo de su código: cómo funciona, qué está bien, qué está mal y qué falta

Radar COVID liberó ayer su código en España. Tal y como estaba previsto, la Secretaría de Estado de Digitalización e Inteligencia Artificial (SEDIA) ha publicado en GitHub el código de su aplicación de rastreo. Hemos querido conocer a fondo los detalles técnicos de la aplicación, analizando al detalle este código liberado.

Linuxct, ingeniero de software, nos ha ayudado a comprender y tener una visión más completa sobre el código liberado en GitHub, así que vamos a analizar al detalle el funcionamiento de la app.

Entendiendo el código de Radar COVID, ¿cómo funciona la app?

Para poder analizar a fondo el código hemos contado con la ayuda de Linuxct, ingeniero de software y colaborador habitual en XDA Developers. Tras hablar con él, podemos detallar la información sobre lo que se ha publicado en GitHub, lo que está bien, lo que está mal, y lo que falta. Este análisis se ha realizado sobre la versión Android, desarrollada en Kotlin, uno de los lenguajes de programación más populares.

Radar

¿Cómo funciona Radar COVID desde un punto de vista técnico?

  • En cuanto abrimos la aplicación por primera vez, esta llama al servidor solicitando la expedición de un token de usuario. Estos token permiten identificar al terminal (no a la persona) y son autogenerados por el servidor, no yendo vinculados a una persona, sino a un dispositivo. Se trata de una medida de seguridad muy utilizada.
Radar COVID utiliza DP3T como kit de desarrollo, un protocolo abierto que se está empleando en las aplicaciones de rastreo de contactos
  • Cuando la app obtiene este token, lo utiliza tanto para pedirle al servidor los datos de los textos que muestra la app en la pantalla de bienvenida (que dependerán del idioma que escojamos) como para solicitar los datos de configuración de DP3T al servidor. El tan sonado DP3T (Decentralized Privacy-Preserving Proximity Tracing) es el SDK (kit de desarrollo de software) que se está utilizando para desarrollar las apps de rastreo, es decir, un protocolo de desarrollo que comparten estas aplicaciones y que ya era de código abierto.

  • Cuando se inicializa DP3T, este se encarga de solicitar al usuario que active el Bluetooth y dé permiso a la aplicación para conectarse al sistema de notificaciones de Google de exposición al COVID, integrado en el propio sistema operativo.

En otros términos, la app identifica al usuario con un token, solicita los datos de configuración y posteriormente se nos pide dar permisos de conexión al Bluetooth y el sistema de notificaciones de Google.

Tras sincronizar los datos y refrescarse, la app Radar Covid puede mostrar en la pantalla de inicio si estamos con una exposición baja o con un riesgo de exposición elevado

Como explicamos al lanzarse la app, Radar COVID envía notificaciones a los usuarios sobre posibles contactos positivos, siempre y cuando los usuarios con COVID hayan reportado a la correspondiente autoridad sanitaria el caso mediante el correspondiente código que esta le proporciona.

Desde un punto de vista técnico, la app marca 'riesgo de exposición elevado' tras sincronizar los datos desde DP3T, pasando a mostrar pautas y tiempos necesarios de confinamiento basándose en los datos obtenidos del servidor.

Notificacion

¿Y qué hay respecto a los códigos que nos dan para reportar el positivo? Cuando la autoridad sanitaria nos da el código de 12 dígitos, lo introducimos en la app y esta información se manda a un servidor (la información solo sale de nuestro dispositivo para enviar el código).

Desde este servidor se comprueba que el número PCR esté en la base de datos y si es positivo. Tras la comprobación, se envían los datos de vuelta a la app y esta nos muestra el riesgo de exposición elevado anteriormente comentado. Cabe recalcar que cuando comunicas tu positivo de PCR, no se manda el identificador (el token del que hablamos anteriormente) para que no se pueda vincular un numero de PCR a un dispositivo.

¿Qué pasa con los permisos de la aplicación?

Permisos

Uno de los puntos que más preocupación ha causado a los usuarios es cómo queda la privacidad y los permisos en Radar COVID. Como explica el experto, la app utiliza los permisos justos y necesarios para realizar sus funciones.

  • android.permission.INTERNET: permite comunicarse con DP3T y el backend del servidor.
  • android.permission.ACCESS_ NETWORK _STATE: permite a la app saber si el dispositivo está conectado a internet.
  • android.permission.BLUETOOTH: usado para poder comunicarse entre dispositivos via DP3T
  • android.permission.REQUEST_ IGNORE _BATTERY _OPTIMIZATIONS: permite que la aplicación se ejecute en cualquier momento en segundo plano, permitiendo que las sincronizaciones entre la aplicación y el servidor sucedan en los momentos oportunos.

La aplicación no accede a los permisos de localización, teléfono o contactos del usaurios, por lo que no se le puede identificar de ninguna forma. Respecto a por qué Radar Covid no funciona sin el GPS activo en Android, se debe a la tecnología Bluetooth Scanning del sistema operativo de Google, que requiere localización activa para rastrear por Bluetooth.

Lo que "falla" en el código publicado de Radar COVID

Radar Covid Europa

Tras liberarse el código de Radar COVID ha habido dos grandes críticas principalmente. La primera de ellas es que no se ha publicado el histórico de desarrollo de la app, es decir, el historial con todos los datos y pasos que se han dado desde el principio de su desarrollo.

Radar Covid tiene ahora mismo dos claros puntos débiles: no se ha publicado el histórico de la aplicación con el progreso completo y, por otro lado, hay partes del código que difieren entre la versión GitHub y la versión Android

Que no haya un histórico de la app se traduce en que tan solo tenemos la foto actual del código, la última versión de la aplicación. No sabemos cómo se ha ido construyendo ni las decisiones que se han ido tomando. Respecto a dicho histórico, pedido por más de 200 académicos en un "manifiesto en favor de la transparencia en desarrollos de software públicos", Linuxct considera que va de la mano con las discrepancias en el código, el otro punto criticado en Radar Covid.

Hay que tener en cuenta que lo que ha pasado sobre las discrepancias de código entre la version de Google Play y la versión que han sacado a GitHub se verían todas resueltas si publicaran el histórico de GitHub, para saber realmente qué hacían y el porqué de esas funcionalidades que ahora han desaparecido del código fuente

Image 2020 09 10 11 47 58
Endpoints no presentes en el código subido a GitHub

Pero, ¿cuáles son estas discrepancias? En concreto, hay un listado de endpoints más extenso en la versión de Google Play, servicios internos que no existen en el código de GitHub y código detectado no presente en la versión de GitHub. Respecto a los endpoints, son aquellas URLs a las que la aplicación realiza llamadas para interactuar con el servidor. Por otro lado, hay detalles curiosos, como que la versión para Android utiliza código para detectar root (el cual está bastante obsoleto al basarse en el antiguo SuperSU y no en Magisk). Dicho código no se encuentra en la versión subida a GitHub.

Las discrepancias entre la versión de Android y la subida a GitHub se pueden explicar si se acaba actualizando la app con el código actual

¿Cómo puede explicarse esto? Con una actualización de la actual versión de Radar Covid para Android, en la que se incluyan las líneas de código vistas en la versión GitHub, como explica el experto.

Mi forma de entenderlo es que en algún momento actualizarán la versión de Google Play con el código que han subido a GitHub y que este código desaparezca. Lo veo como un "mal menor" pero "bueno es saberlo"...

El resumen que podemos sacar con toda esta información es que, si bien la aplicación cumple con lo que promete, la aplicación publicada en GitHub no es exactamente la misma que hay en Android. Como explica Linuxct, "esto puede deberse a que Google esté pendiente de aprobar una posible actualización de subida de código a Play Store y por esto las versiones difieren". Por otro lado, no hay rastro sobre el histórico de la app, sino una foto actual de la última versión.

Pese a esto, la aplicación ha demostrado ser segura, no exponer la privacidad de los usuarios, por lo que cualquier usuario que la quiera instalar en su teléfono puede hacerlo con la tranquilidad de que sus datos están a salvo.

Esta revisión completa del código puede leerse en el GitHub de Linuxct, en el que se desarrolla en términos más específicos lo relatado en este artículo.

Comentarios cerrados
Inicio