Hace un par de meses, mi operadora me cobró casi 30 euros solo en mensajes de texto (SMS). Era insostenible. Entre los amigos y la familia, mantener una conversación asíncrona te salía a precio de oro. Entonces, un colega me recomendó instalar una pequeña aplicación con un icono verde llamada WhatsApp. Lo instalé en mi Android pero la sorpresa fue mayúscula: funciona con los iPhone, con los BlackBerry e incluso con los prehistóricos Symbian de Nokia.
La factura de SMS puede bajar a cero!. Pero, como informático, lo que me quita el sueño no es el ahorro, sino entender cómo diablos esta gente está soportando millones de mensajes por segundo sin que los servidores exploten.
Las tripas del monstruo: XMPP y Erlang
Si haces ingeniería inversa o simplemente te pones a monitorizar el tráfico de red de tu móvil con herramientas como Wireshark, te das cuenta rápidamente de que WhatsApp no ha reinventado la rueda. Por debajo, están utilizando un protocolo hiperconocido: XMPP (el antiguo Jabber).
Han cogido el servidor ejabberd, programado en Erlang, y lo han tuneado a lo bestia. Erlang es un lenguaje funcional diseñado por Ericsson en los años ochenta específicamente para sistemas de telecomunicaciones concurrentes y tolerantes a fallos. Es perfecto para mantener cientos de miles de sockets TCP abiertos simultáneamente con un consumo de recursos mínimo.
Cuando envías un mensaje, en realidad estás mandando un paquete XML modificado. Algo conceptualmente parecido a esto:
<message to="34600123456@s.whatsapp.net" type="chat" id="msg-12345">
<body>¿Te vienes a tomar unas cañas luego?</body>
<request xmlns="urn:xmpp:receipts"/>
</message>
Cuando el servidor lo recibe y lo entrega, te devuelve ese famoso "doble check" verde. Es brillante por su simplicidad. Han acoplado el número de teléfono como identificador único (JID en el mundo XMPP), eliminando el doloroso paso de "crear un usuario y añadir amigos por email". Tu agenda de contactos es tu lista de amigos.
El terrorífico problema de seguridad
Ahora viene la parte que me pone los pelos de punta. He estado analizando los paquetes capturados en la red WiFi de la universidad. WhatsApp está enviando todos los mensajes ¡en texto plano!
No hay cifrado SSL/TLS por defecto. Si estás conectado a una red WiFi pública en una cafetería, cualquiera con un sniffer de red puede leer tus conversaciones íntimas, ver con quién hablas e incluso interceptar las fotos que envías. Esto me parece una negligencia brutal, especialmente considerando que la aplicación ya empieza a tener un uso masivo.
Reflexión: El jaque mate a las operadoras
Las operadoras de telefonía están perdiendo su gallina de los huevos de oro. Llevan años cobrando 15 céntimos por enviar 160 bytes de datos (que además viajan en los canales de señalización sobrantes de la red celular). Era un robo.
El éxito de WhatsApp demuestra que las soluciones cerradas de los operadores (¿alguien se acuerda del MMS?) están muertas frente a soluciones basadas en datos de internet y protocolos abiertos (aunque WhatsApp lo haya modificado y cerrado en su cliente). Mi pregunta es si esta pequeña startup podrá mantener la infraestructura cuando pasen de tener 10 millones de usuarios a, no sé, 100 millones. Y sobre todo, ¿cuándo narices van a cifrar las comunicaciones?