domingo, 5 de junio de 2016

Cifrado WhatsApp

Con la entrada anterior quedan definidos los conceptos básicos sobre encriptación; hoy estudiaremos su aplicación en algo tan utilizado como WhatsApp el cual incorporó cifrado y otras mejoras como vimos en Regañar a los amigos con Whatsapp desactualizado.

Imagen 1. Cifrado WhatsApp

Introducción

Comenzar indicando que toda la información la he obtenido del whitepaper ofrecido en su propia web. El cual señala las siguientes características sobre el cifrado utilizado:
  • Cifrado de extremo a extremo: esto significa que la información está cifrada al salir del terminal emisor y se mantiene de este modo hasta que llega al terminal receptor.
  • Cifrado afecta a los mensajes, llamadas, vídeos, audio, imágenes y otros archivos como documentos enviados con WhatsApp.
  • De ser robadas las claves de encriptación, no pueden utilizarse para desencriptar mensajes ya transmitidos. Por el funcionamiento que veremos en esta entrada.
  • Comunicación con los servidores de WhatsApp se realiza en un canal encriptado; siendo los metadatos también encriptados impidiéndose la identificación del usuario. Aunque el artículo del suplemento XL Semanal del que hablo a continuación explica que no son encriptados, lo que conlleva a que se conozca información como la localización desde la que nos conectamos, cuándo, el tiempo de uso, etc.
  • Servidores solo almacenan claves públicas; ni guardan ni tienen acceso a las privadas.
¿A quién hay que agradecer esta característica? A la compañía Open Whisper; un artículo muy interesante puede encontrarse en el suplemento XL  Semanal del periódico ABC, donde se habla de WhatsApp, Telegram, criptógrafos y casos relacionados con el tema. En dicho artículo se indica que ni los empleados de WhastApp pueden romper el cifrado.

Imagen 2. XL Semanal, artículo sobre cifrado (imagen obtenida de su cuenta en Twitter)

Volviendo al funcionamiento del cifrado de WhatsApp, entran en juego muchas más variables de las explicadas en la entrada anterior; intentaré que el siguiente resumen del whitepaper sea lo más sencillo posible, pidiendo disculpas de antemano por algunas traducciones.

Claves utilizadas


Públicas

Generadas al instalar WhatsApp en nuestro dispositivo.
  • Claves de Identidad: firman la Clave de Firma.
  • Clave de Firma: es modificada (rotada) cada cierto tiempo.
  • Claves de Un-Uso: se modifica su valor cada vez que es necesario; el cual es utilizado una única vez.

De sesión

En la entrada anterior vimos que son claves conocidas por el emisor y el receptor. Como se ha dicho, al ser privadas el servidor de WhatsApp no tiene acceso a ellas.
  • Clave Raíz: utilizada para calcular las Chain Key.
  • Chain Key: crea la Clave de Mensaje.
  • Clave de Mensaje: encripta el contenido de los mensajes.

Registro del cliente

Para utilizar el cifrado extremo a extremo, al registramos tras instalar WhastApp, enviamos nuestras claves públicas a su servidor que las almacena y asocia con nuestro usuario.

Establecer sesión

La primera vez que nos comunicamos con alguien debe crearse una sesión encriptada con dicha persona. Esta sesión no termina hasta que ocurran casos como desinstalar la aplicación WhatsApp. Para establecer la sesión:

1. Quien inicia la comunicación pide al servidor las claves públicas del destinatario. El servidor borra de su almacenamiento la Clave de Un-Uso utilizada, de no quedar ninguna almacenada (cada usuario debe enviar conjuntos de nuevos valores al servidor) no se utilizará en la generación de nuevas claves, pero la comunicación encriptada se seguirá llevando a cabo.

2. El usuario guarda estas claves y las utiliza junto a su Clave de Identidad y un valor que acaba de generar para crear un master_secret utilizado para originar una Clave Raíz y unas Chain Keys.

3. Ya pueden enviarse mensajes al destinatario aunque esté desconectado, para ello cada mensaje incluirá en sus cabecera la información pública del emisor con el fin de que el destinatario al recibir los mensajes también pueda calcular el master_secret; este receptor borra la Clave de Un-Uso empleado por el emisor.

Para completar este apartado conviene complementarlo con el siguiente, 'Intercambio de mensajes'.

Intercambio de mensajes

Tras establecerse la sesión, los mensajes son encriptados con la llamada Clave de Mensaje, cuyas características son:
  • Varía en cada mensaje.
  • No es posible obtener/calcular su valor una vez se ha enviado el mensaje.
  • Generada a partir del Chain Key del emisor del mensaje.

Indicar que cada vez que se completa el ciclo de envío y respuesta se realiza un negociación para tener un nuevo valor del Chain Key y Clave Raíz, lo que otorga mayor seguridad al evitar que a partir de una Clave de Mensaje almacenada se calcule el Chain Key.

Gracias a que las claves cambian y al modo en que son generadas, los mensajes pueden llegar tarde, desordenados o incluso perderse sin que suponga un problema en el proceso de encriptación al calcular los valores requeridos.


Hasta aquí he detallado las claves utilizadas; en las siguientes explicaciones se realiza una visión más general y sencilla.

Intercambio de vídeo, audio, imágenes o documentos

A groso modo, el emisor genera una serie de claves y cifra el archivo adjunto con una de ellas y un valor aleatorio. El resultado es subido y almacenado como un archivo binario en una base de datos. 

Tras esto envía un mensaje cifrado al destinatario con la información requerida para realizar las verificaciones necesarias (incluida función hash vista en la anterior entrada) y acceder al archivo enviado inicialmente.

Mensajes en grupos

La primera vez que un miembro del grupo envía un mensaje lo hace a cada uno de los componentes de manera individual con la información necesaria para poder utilizar cifrado en la comunicación; esta información será eliminada por los integrantes si dicho usuario abandona el grupo. Con esto, cada vez que envíe un mensaje cifrado, llegará al servidor el cual se encargará de que llegue al resto de componentes.

El whitepaper destaca la eficiencia conseguida al emplear dos métodos usuales en la transmisión de mensajes a miembros de un grupo: enviar el mensaje de manera individual a cada uno de los componentes, o subirlo a un servidor y que este lo haga llegar al resto.

Llamadas

La base de funcionamiento del cifrado es la misma a la explicada en el intercambio de mensajes aunque variando el protocolo.

Verificar claves

Los usuarios podemos verificar el cifrado, para ello hay dos opciones: mediante código QR o con un número de 60 dígitos. El proceso queda explicado en este artículo de seguridadapple.com. De querer más información sobre las claves, leer el whitepaper proporcionado por la web de WhatsApp.

Conclusión

Por supuesto terminar agradeciendo a quienes han hecho posible el poder disfrutar de la encriptación en nuestra información; y para los apasionados del código, en GitHub se puede estudiar la librería del protocolo empleado en la encriptación de WhatsApp. Que sea Open Source refleja la filosofía de sus creadores.


¡Saludos!

Carlos A. Molina

Webs


Entrada Regañar a los amigos con Whatsapp desactualizado

Web WhatsApp apartado seguridad con el whitepaper (en 'Obtén todos los detalles')

Blog whispersystems
https://whispersystems.org/blog/

Código librería

Twitter XL Semanal
Artículo XL Semanal

Verificar cifrado de extremo a extremo

Imágenes de uso libre

No hay comentarios:

Publicar un comentario