Whatsapp & Facebook ¿Crees en las Casualidades?
Hace ya unos días que a la alcancía de barro no le entran mas monedas. Tengo la costumbre de que cuando tomo un café, pago con billete de 2000 pesos, lo que suelo llevar en los bolsillos, normalmente los cafés me cuestan entre 700 y 900 , así que me suelen dar la vuelta en monedas de 1300 o 1200 pesos Luego esas monedas (de 200 o 500 ) siempre las echo a mi alcancia, nunca las gasto en otras cosas, así cada día que tomo café, así durante muchos meses y muchos cafés. ¿Para qué hago esto?, muy sencillo, cada vez que se llena la alcancía, la vacío y dono todo ese dinero a la causa que mejor me parezca, al día no me supone mucho dinero, pero con el paso de los meses al final se llega a juntar dinero, casi 4 kilogramos de monedas en esa ocasión.
El problema está en que por muy buena que sea mi intención, si voy con cuatro kilos de monedas a cualquier organización para donárselas, las van a recibir gustosamente, pero les vas a suponer un trabajo contarlas e introducirlas en los empaques para poder ingresarlas en el banco, trabajo y tiempo que es mejor que dediquen a realizar otros menesteres. Por eso, normalmente lo que hago es meter las monedas en el empaque y entregárselas ya contadas para ahorrarles trabajo. Problema: yo no dispongo de los empaques, por eso le envié un mensaje por Whatsapp a un amigo para que me consiguiera unos cuantos empaques, para ser exactos necesitaba: 15 empaques de monedas de 500 pesos y 10 de 1000 pesos.
Si se están preguntando si previamente he tenido que contar cuatro kilos de monedas para saber exactamente cuántos empaque voy a necesitar, no es necesario, hay una solución más sencilla: “las matemáticas son tus amigas“. Simplemente sabiendo que una moneda de 500 pesos pesa 5,74 gramos y una de 1000 pesa 4,10 gramos, solo tenemos que separarlas y pesarlas, luego dividir el peso total por el unitario, y ya sabremos el número de monedas aproximadas que tenemos de cada tipo.
A los pocos minutos de haberle enviado el mensaje a mi amigo por Whatsapp con el número y tipo de empaques de monedas que me tenía que conseguir, accedo a la aplicación Facebook de mi teléfono móvil y me encuentro con un anuncio de Amazon, en el que aparece un contador de monedas automático. Quizás puede parecer este un hecho sin la mayor importancia, pero teniendo en cuenta una serie de detalles que voy explicar a continuación sobre el funcionamiento del cifrado extremo a extremo (end to end encryption) de Whatsapp y la arquitectura de los sistemas operativos Android, esto no debería haber podido ocurrir nunca, ya que estaría contravenido absolutamente las políticas de uso de esta aplicación, a no ser claro está, que todo ello fuera fruto única y exclusivamente de la casualidad. Casualidad en la que justamente la publicidad que Facebook me muestre a los pocos minutos de haber hablado por Whatsapp sobre blísteres de monedas, sea un producto tan extraño y concreto como un contador automático de monedas. Un contados de monedas automático no es el típico producto que se muestra en los anuncios de Facebook… ¿tú qué crees?.

Cada cual después de haber leído este artículo, tendrá que valorar en su yo interior cual es la explicación más lógica o razonable para explicar lo que ha ocurrido. Yo no sé lo que ha ocurrido, solo sé lo que no ha podido ser y esto exactamente es lo que voy a explicar a continuación.
Volviendo a la situación anterior, el caso es que a mi amigo, realmente no le envié un mensaje por Whatsapp escrito por mí, con los empaques de monedas que me hacían faltan, lo que hice es reenviarle el mismo mensaje que le había enviado semanas antes para recordarle el número exacto de empaques que necesitaba. La diferencia no es pequeña. Si le hubiera escrito el mensaje ese mismo día, existiría la posibilidad de que el teclado que utiliza mi teléfono móvil estuviera enviado parte de lo que escribo a sus servidores centrales para tratar esa información. Por ejemplo, el caso del teclado de Google para Android (GBoard), necesita enviar a Google parte de los textos que el usuario escribe para que las funciones de autocompletar o escritura por gestos funcionen óptimamente. Si nunca te has parado a pensar en el que el propio teclado de tu teléfono es una aplicación independiente que tiene acceso a todo lo que escribes, quizás ahora sea un buen momento para tomar en consideración este detalle.

Pero como decía: el hecho de que Facebook me muestra publicidad sobre algo que he “dicho” por Whatsapp tiene que tener una explicación. En este caso se puede descartar que la “filtración” de datos pudiera estar relacionada con el teclado de mi teléfono, ya que el mensaje con el número de empaques que necesitaba, realmente no lo he llegado a escribir con la aplicación del teclado, para enviarlo usé la opción de “Reenviar” que dispone Whatsapp, de este modo el teclado no opera, puesto que esta función de Whatsapp no hace uso del portapapeles del teclado, si no que, queda todo el proceso de reenvío dentro del propio Whatsapp. La opción del teclado: descartada.

Otra opción es que sea la propia aplicación de Whatsapp la que estuviera enviando estos datos a sus servidores para ofrecer un servicio de publicidad orientada a sus usuarios. Esto se podría hacer de dos modos:
El primero, sería que existiera un proceso en la aplicación de Whatsapp que de forma automática enviara estos datos a dónde quiera que los tuviera que enviar. Podría ser posible (al menos técnicamente), si no fuera porque en Android las aplicaciones se instalan en un ejecutable en formato “APK” (Android Application Package), este APK no deja de ser un contenedor (ZIP) en el que se almacena el código fuente o de programación de la aplicación compilado en JAR (Java Archive). Los JAR se pueden decompilar. Por ejemplo con la herramienta libre apktool, podríamos “abrir” una aplicación de Android y leer el código de programación que el diseñador escribió, con sus manifest, res, assets, etc… Lo que significa que se puede ver/auditar el código de programación de una app para comprobar si se ha programado para que realice alguna tarea “oculta”, por ejemplo, el famoso caso de la linterna espía, una app de linterna que realmente su código de programación incluía todo tipo de estratagemas para espiar a los usuarios que la usaban. Whatsapp con cerca de 1.500.000.000 usuarios en todo el mundo, si no es la que mas, es una de las aplicaciones mas auditadas y analizadas por expertos de ciberseguridad en todo el mundo, por no hablar de las versiones para beta testers. Si Whatsapp tuviera una sola línea de código malicioso, no tardaríamos mucho tiempo en averiguarlo. Esta opción, aunque sea por sentido común, también se podría descartar.

El segundo modo, sería que otra aplicación, por ejemplo Facebook, pudiera acceder a la base de datos de conversaciones que Whatsapp almacena dentro del teléfono sin cifrar. Whatsapp, por defecto, en la actualidad almacena la base de datos con las conversaciones de cada usuario en dos sitios distintos. Todos los días a las 2:00 AM Whatsapp genera un backup de todas las conversaciones almacenadas hasta el momento, las cifra, y o bien las sube a un almacenamiento en la nube de Google Drive (método actual) o las guarda en el almacenamiento compartido del teléfono (por ejemplo la tarjeta MicroSD). En este punto podríamos llegar a pensar que este cifrado no es lo suficientemente robusto y cuando se sube la copia de seguridad de nuestras conversaciones a la nube de Google Drive, Google tiene la capacidad de descifrar el fichero y leer nuestros chats, aunque esto fuera posible, en este caso concreto tampoco se podría aplicar, ya que la conversación en cuestión se mantuvo a las 21:00 horas, y la copia de seguridad no llegaría a los servidores de Google (cifrada) hasta las 02:00 horas del día siguiente. Descartado también.

Hemos estado hablado de la base de datos cifrada que hace la función de copia de seguridad, pero Whatsapp dispone de otra base de datos (la de verdad), la que está utilizando en producción para ir almacenando los distintos mensajes que se van generando. Como esta base de datos no está cifrada de ningún modo (es una fichero SQLITE llamado msgstore.db), podríamos pensar, ahora sí, que Facebook accede a este fichero SQLITE con la base de datos de Whatsapp y lo va consultando según sea necesario. Pues tampoco, resulta que las aplicaciones en Android, se ejecutan en una maquina virtual llamada Dalvik, esta máquina es independiente y aislada por cada app, además, el espacio reservado para cada una de las aplicaciones está protegido por una contraseña distinta por app, en el caso de Whatsapp, la base de datos se encuentra almacenada en la ruta: /data/data/com.whatsapp/databases/, ruta que solamente es accesible únicamente por el usuario creado por Android para ejecutar la aplicación Whatsapp (cada app en Android opera con un usuario/contraseña distinto). Entonces si las aplicaciones están totalmente aisladas ¿Cómo es posible que por ejemplo Whatsapp puede acceder a los contactos o Facebook pueda compartir información con otra app?, esto es posible gracias a los “Content Provider“, un mecanismo proporcionado por Android que nos permite compartir información entre diferentes aplicaciones, pero solo la información que hemos autorizado (¿Os suena lo de los permisos de Android?), en este caso, ninguna otra aplicación tiene acceso a los datos de conversaciones de Whatsapp.

La única excepción sería un móvil rooteado, rootear un móvil no es otra cosa que activar el usuario “Super Administrador“, deshabilitado por defecto en la mayoría de los teléfonos. Si activamos este usuario en nuestro smartphone, sería el único que puede acceder al contenido del resto de usuarios del sistema y por lo tanto acceder al fichero msgstore.db (Conversaciones de Whatsapp) y leer su contenido, de ser así, este artículo no tendría sentido alguno. Pero no, el smartphone en cuestión no ha sido rooteado, es más, opera con una versión “pura” de Android.

Ahora llega el momento de hablar del punto más controvertido de todo esto, hasta ahora hemos estado hablando de la comunicación en uno de sus estados, cuando los datos de chats se encuentran almacenados en nuestro dispositivo (bases de datos estáticas). Pero existe otro estado de los datos, este estado lo encontramos cuando los datos se encuentran en tránsito de un dispositivo a otro, es decir, del emisor al receptor. Si estos datos no viajan cifrados, o no lo suficientemente cifrados, alguien los podría interceptar y leer/ver nuestras conversaciones a través de Whatsapp. En el caso de Whatsapp, desde hace ya unos años se implementó el cifrado extremo a extremo, una tecnología que permite enviar un mensaje a otro usuario, de tal forma que ninguna otra persona conozco las claves de descifrado del mensaje a excepción del destinatario (ni el emisor las conoce). Esto se consigue gracias a la implementación del protocolo criptográfico Diffie-Hellman en Whatsapp y la tecnología Signal.

Este protocolo se basa en las matemáticas (la teoría dice que son grupos de enteros multiplicativos módulo p, con p primo). Para que nos entendamos, se basa en la propiedad matemática en la que es fácil operar un número A con otro B para que salga C, (50×30=1500) pero a partir de c (1500) es muy difícil saber qué números A (50) y B (30) lo han generado. Obviamente el protocolo no se aplica con una operación de multiplicación, es un simple ejemplo para hacerlo entendible, además se deben utilizar números primos suficientemente elevados. De este modo, cada usuario (realmente el proceso lo realiza Whatsapp de forma transparente para el usuario) crearía su propia clave pública y privada, la privada la custodiaría y la pública se la enviaría a la persona con la que quiere hablar (B), la persona con la quiera hablar (B) cifra el mensaje con la clave pública que le han enviado y cuando le llegue a la primera parte (A) el mensaje cifrado con su clave pública, solamente la tiene que descifrar con su clave privada (la de A). En este esquema, los servidores de Whatsapp nunca tendrían acceso al contenido de los mensajes enviados por cada usuario, siempre y cuando, no tengan acceso a su clave privada, extremo que según sus términos y condiciones, exponen que no es posible ¿o sí?.

Así que a estas alturas de la “película”, solo puede decir: ¿y tú?, ¿crees en las casualidades? Si todavía no lo tienes claro, puedes seguir leyendo un poco más.
Los animo a que sean ustedes mismos quienes prueben en sus propios smartphones esto que les estoy contando. Pueden enviar un mensaje de WhatsApp a un conocido suyo comentando que necesitan un producto concreto y extraño, luego solo tendrán que revisar su aplicación de Facebook o Instagram a ver si les muestra algún tipo de anuncio relacionado.
No me gustaría que se quedaran con la idea de qué este puede ser el típico artículo conspiranoico en el que todos somos espiados, nada más lejos de mi intención. Simplemente busco con este artículo contar un suceso que me ha ocurrido tanto a mí cómo a otras personas, suceso al que difícilmente se le podrá buscar explicación sin involucrar al cifrado extremo a extremo de WhatsApp.

