#MundoHacker: ¿Cómo funciona el cifrado end-to-end de WhatsApp?

cifrado whatsapp

Cuatro años.

Esto es lo que le ha llevado a WhatsApp implementar un sistema de cifrado end-to-end (ES) en su aplicación. Cuatro años, que se dice pronto, desde ese anuncio, allá por 2012, que aseguraba contar ya con cifrado “completo”.

De aquel día hasta hoy (bueno, ayer, que lo estoy escribiendo en la tarde/noche, después del anuncio), 5 de Abril del 2016, en el que la compañía, tutelada por la batuta del equipo de Open Whisper Systems (creadores de varias de las herramientas de mensajería más seguras y privadas del mercado), acaban de distribuir una actualización de su app para Android, iOS y WindowsPhone con los cambios oportunos.

Cuatro años en los que WhatsApp se ha posicionado como la herramienta de comunicación digital por defecto. Hasta el punto de que, con su negativa a apoyar el desarrollo de sistemas operativos de nueva generación, ha fomentado el binomio actual. Pese a que su seguridad, como señalé hace escasas semanas en aquel informe de estado de la seguridad en aplicaciones de mensajería, y que he repetido hasta la saciedad por estos lares, la posicionaba a la cola del mercado (nivel 2 de 7, que se dice pronto…).

Un hecho que demuestra lo que seguramente sea la ley más universal no escrita de los negocios digitales: Quien llega antes, y llega más o menos bien, lo consigue.

Pese a que había (y hay) herramientas en el mercado que dejan a WhatsApp a la altura del betún (¡Hola Telegram!, ¡Hola Line!), la compañía tiene un intangible que simplemente supera cualquier otra deficiencia: un billón de usuarios (billón anglosajón ojo, es decir, mil millones “de los nuestros”).

Precisamente ese billón que da sentido a que Facebook realizara la que fuera en su día la compra más cara de la historia por una startup de apenas 50 trabajadores.

Un billón de usuarios (seguramente bastante más, que habrá algunos que han conseguido anteponerse a la presión social y apostar por aplicaciones más completas) que por fin, cuatro años más tarde, ya podrán realizar comunicaciones que podríamos considerar privadas y seguras.

Y todo gracias a que cuatro años más tarde, la compañía ha acabado por rendirse a la evidencia: en un entorno crispado por esa guerra entre el FBI y Apple por la necesidad “legal” de que los cuerpos de seguridad tengan una llave para cohibir las libertades de los ciudadanos. En ese mismo entorno sensible a la importancia de la privacidad, y motivado por las revelaciones de auténticos héroes (patriotas, si quiere verlo de esta manera) como Snowden, el cifrado de las comunicaciones no es un activo opcional. Pasa a ser algo necesario.

En este nuevo capítulo de la serie #MundoHacker, donde tratamos en varios tutoriales las medidas para atacar y/o defenderse en el mundo digital, quería dedicar el resto de la pieza a explicar de una manera sencilla cómo funciona el cifrado de punto a punto que ha implementado WhatsApp en su servicio, y que sin lugar a dudas, ofrece un soplo de nuevos aires al futuro de todas aquellas herramientas masivas que aún no han dado el paso (que ya no son tantas, sinceramente…).

Detrás de las comunicaciones seguras en WhatsApp, Signal Protocol

2014 parece ser la fecha (EN) en la que empezaron a trabajar en el asunto. ¿En juego? Cambiar la arquitectura de todo el servicio, cuya única prioridad hasta entonces había sido la operativa (ser escalable y evitar, en la medida de lo posible, los cuellos de botella habituales en eventos multitudinarios, como suele ocurrir en Noche Vieja o en alguna otra celebración de tipo la Superbowl), para adaptarse a las necesidades de un entorno que demanda seguridad.

Recurrían entonces, muy acertadamente, a Open Whisper System, fundada por Moxie Marlinspike, y creadores de herramientas de la talla de Redphone, Signal o TextSecure.

Bajo la nueva arquitectura de WhatsApp ahora opera Signal Protocol (EN), un protocolo abierto (uno de los puntos básicos para considerar el nivel de seguridad de una herramienta, al estar expuesto a la auditoría de cualquier persona interesada en realizarla) de cifrado end-to-end, cuyo funcionamiento, aplicado a WhatsApp, explican en este paper (EN/PDF) y que intentaré resumir a continuación.

WhatsApp pasa de esta manera a utilizar una clave asíncrona que permite realizar envíos de mensajes, archivos y llamadas que se alojarán, como siempre lo han hecho, en los servidores de la compañía (algo necesario si queremos que éstos estén disponibles si cambiamos de terminal, por ejemplo, o para que nos lleguen notificaciones después de una temporada sin acceso a la red), pero cifrados, de manera que un posible MITM, un hackeo a los servidores (o una petición del FBI) solo expondrían el dato cifrado, a falta de conocer la clave privada que únicamente deberían tener el emisor y el receptor de la comunicación.

Dicha clave se genera a partir de varias:

  • Identity Key Pair: Clave pública generada la primera vez que instalamos WhatsApp en el terminal.
  • Signed Pre Key: Clave firmada por la anterior, que se genera también la primera vez que instalamos, y que además, va rotando periódicamente.
  • One-Time Pre Keys: La clave que se genera para cada comunicación.
  • Root Key: Llave de sesión única para cada usuario, de 32 bytes.
  • Chain Key: Llave generada a partir de la Root Key, de 32 bytes.
  • Message Key: La llave de cifrado de cada mensaje, de 80 bytes. 32 bytes utilizan una clave AES-256 key, 32 bytes una HMAC-SHA256 key, y los 16 bytes restantes, IV.

Registro de Cliente

La primera vez que nos registramos, el sistema genera la Identity y la Signed Pre Key, y con ellas, se envía al servidor la One-Time Pre Key, que asocia a la identidad del usuario. Es la clave pública que permite a otro usuario entablar comunicación con nosotros.

Inicio de sesión

Para establecer una comunicación con otro u otros usuarios, el servidor genera un canal seguro basado en las claves públicas de cada usuario, realizando las tareas matemáticas oportunas, y ese canal seguirá en activo hasta que alguno de los miembros implicados elimine su cuenta, o cambie de dispositivo (cambiando por tanto su Identity Key Pair).

Comunicación

Una vez establecida la comunicación, el servidor enviará los mensajes que le lleguen cifrados al receptor o receptores, incluyendo en las cabeceras la información que el cliente necesita para descifrarlos en tiempo de consumo (calcular el master-secret en base a su clave privada).

La Message Key, como ya vimos, cambia para cada mensaje enviado, lo que evita que un atacante pueda reconstruir la conversación teniendo conocimiento de mensajes anteriores cifrados y sin cifrar.

El envío de archivos se hace de una forma semejante, pero con algún paso extra (primero se cifra el archivo, se envía al servidor, y el servidor envía un mensaje cifrado al receptor o receptores con la información para descargar el archivo cifrado).

Pasaría algo parecido con el envío de mensajes en grupos. El usuario envía un mensaje único cifrado, y es el servidor el encargado de replicarlo N veces, manteniendo la integridad del mismo, y generando para cada usuario una Message Key compatible con su clave privada.

En el caso de llamadas, la comunicación se hace por SRTP (el mismo protocolo que usan la mayoría de cámaras de videovigilancia), que se cifra y se descifra en tiempo de ejecución.

Verificación de la integridad del cifrado

El nuevo protocolo permite a los usuarios de una manera relativamente sencilla, asegurarse que en efecto están realizando una comunicación segura.

whatsapp cifrado

De hecho, para comprobar que en verdad la comunicación se está estableciendo en un canal seguro, el servicio ofrece un código QR que, escaneado en el móvil receptor, comprobará el estado del canal.

Hay que dejar claro que para que en efecto la comunicación se haga e2e, todos los clientes implicados deben tener una versión de WhatsApp compatible con el cifrado end-to-end. Basta que uno no la tenga en un grupo para que toda la información que se pase por el grupo se haga en texto plano, como ha ocurrido hasta entonces.

Y una vez la comunicación se haga de forma cifrada, no hay vuelta atrás. Lo cual me parece muy adecuado, ya que inhabilita cualquier ataque de tipo “Delorean” en el que un tercero instale una versión anterior de WhatsApp y pueda leer el contenido.

Eso sí, se fuerza de esta manera a que dentro de unos meses, quien no haya instalado las versiones actuales, deje de poder utilizar el servicio.

Además, para saber si nuestra versión de WhatsApp ya es compatible con este paradigma de comunicación, bastaría con irse a Ajustes > Cuenta > Seguridad (si no le aparece, es que todavía no tiene una versión compatible). Y para saber si la otra persona tiene ya habilitado el servicio, debería aparecernos el candado cerrado con una breve explicación dentro del perfil visible de ese usuario.

En definitiva, que por fin algo que llevamos cuatro años demandando está llegando al usuario de a pie. Un paso de gigante para un servicio que no es precisamente conocido por realizar los movimientos que la industria demanda.

Pero son buenas noticias, en resumidas cuentas. Ya no podré decir eso de que “mejor por WhatsApp no”.

O al menos, eso espero, G.G.

 

________

Realizar este tipo de artículos me lleva varias horas, y en algunos casos, gastos extra que habitualmente suplo de mi bolsillo, o gracias a esa comunidad de patronos que me apoyan realizando donaciones puntuales o periódicas.

Si le gustaría ver más de estos tutoriales y análisis por aquí. Si el contenido que realizo le sirve en su día a día, piense si merece la pena invitarme a lo que vale un café, aunque sea digitalmente.

hazme patrono pabloyglesias