Explicando Whatsapp y el cifrado

Esta semana muchos de los usuarios de Whatsapp se sorprendieron al encontrar un mensaje que decía "Las llamadas y mensajes enviados a este chat ahora están seguros con cifrado de extremo a extremo. Toca para más información"

alt

¿Porque esto es importante? ¿En qué me afecta? ¿Cómo funciona? Son alguna de las preguntas que aparecieron en redes sociales y círculos de conversación. Desde la perspectiva de un programador queremos aportar algo de luz a esta discusión.

Vamos con los primeros conceptos...

¿Que es cifrado?

Cifrar es el procedimiento por el cual un mensaje se transforma con cierto patrón (junto con palabras secretas) para que solo las partes que conocen el secreto y el método de cifrado, puedan leerlo.

Esto no es algo nuevo, y definitivamente no es un invento de la era informática. En las guerras antiguas un mensajero era enviado y los mensajes se cifraban previendo que el mensajero pueda caer en manos enemigas.

Por ejemplo, los romanos utilizaban sistemas de sustitución y cambiaban las letras del mensaje. De esta forma, aunque el mensaje fuera interceptado su contenido no era útil para el lector. Este cifrado se puede "romper" fácilmente por un humano, y para una computadora es cuestión de segundos.

Durante la segunda guerra mundial la inteligencia aliada logró romper el cifrado de las máquinas utilizadas por el enemigo y de esta manera conocer sus movimientos. Una excelente película que cuenta esta historia y parte de la genialidad de Alan Turing se llama The Imitation Game, ¡Recomendada!

¿Que tiene que ver esto con Whatsapp?

En verdad el problema de la seguridad para intercambiar mensajes no es exclusivo del Whatsapp, sino es intrínseco a Internet. La cuestión es que por diseño los mensajes en Internet son fácilmente interceptables. Cualquiera puede hacerlo.

Internet puede ser visto como una gran cadena de mensajeros (conjunto de redes y routers intermediarios) pasándose el mensaje hasta que eventualmente este llega al destinatario correcto. Cualquiera de estos mensajeros tiene posibilidad de leer el mensaje.

Para el lector ávido de conocimientos, le recomiendo ver TCP Dump.

La solución a este problema no es evitar que alguien intercepte el mensaje (de lo contrario no estarías usando Internet), sino hacer que en caso que decidan hacerlo, el mensaje sea inservible para quien lo intercepta. Es por este motivo que necesitamos cifrar los mensajes.

¿Puedo hacer una transacción segura por medio de Internet?

¡Por supuesto que sí ! Hay muchos mecanismos estándares que utilizan las empresas como Amazon, Bancos, o cualquiera que realice comercio electrónico serio. Uno de estos estándares es la "s" después de http. Cuando visito un sitio que es https todo el mensaje que envío se transmite cifrado desde mi máquina hasta el servidor del sitio. Como usuario puedo leerlo y también el otro extremo, pero ninguna persona que esté en el medio puede interpretarlo.

Esto no es ninguna novedad y es una de las condiciones básicas que realizamos cuando construimos un sitio seguro.

¿Si ya existía cifrado antes de esta semana, que tiene esto de especial ?

Antes de este movimiento Whatsapp funcionaba de la misma manera que funcionan la gran mayoría de las plataformas de mensajes. El usuario envía al servidor un mensaje que está cifrado y solo el servidor puede leerlo. El servidor tiene un canal diferente con el receptor del mensaje, este canal también está cifrado.

A pesar de que ambos canales: emisor-servidor, servidor-receptor están cifrados, las dos personas que se están comunicando confían en que el servidor no está realizando ninguna acción que no le fue permitida con nuestra información. Sin embargo, el servidor puede: almacenar esta información, enviar a otra persona, modificarla, etc.

La propuesta actual de Whatsapp es realizar la comunicación cifrada entre pares, y ni siquiera Whatsapp puede acceder a esta información (en teoría).

Decimos en teoría porque mientras toda la aplicación de Whatsapp no sea de código abierto, y se pueda inspeccionar que la clave privada generada para mi smartphone no es transmitida o almacenada en otro lugar, no me queda otra que confiar en los fabricantes.

Obs.: La implementación particular de la técnica de cifrado que usa Whatsapp sí es de código abierto. WhisperSystems/libsignal-protocol-java

¿Porqué esto es tan importante?

En la práctica tiene poco o ningún efecto sobre la mayoría de las personas, pero plantea una problemática sobre el acceso a la información por gobiernos.

El antecedente mas reciente es el pedido del FBI a Apple para crear un acceso a los datos del iPhone de uno de los tiradores del incidente terrorista en San Bernardino, California. Apple se negó a este pedido en una carta abierta.

Con el cifrado de extremo a extremo, Whatsapp no tiene posibilidad alguna de entregar conversaciones al Gobierno de Estados Unidos (u otro para ser políticamente correcto) en caso que lo requiera por algún mecanismo legal. Básicamente es técnicamente imposible.

¿Cómo funciona?

Advertencia: Esta última sección es para los muy curiosos que, puede resultar algo aburrida técnica.

Cada usuario dispone de dos tipos de claves, una clave privada que sólo es conocida por mi smartphone, en el caso del Whatsapp, y una o varias claves públicas que como su nombre lo dice, pueden ser libremente distribuidas.

Para facilitar la explicación, asumiremos que hay una sóla clave pública.

Supongamos que José quiere enviar un mensaje a María, y que sólo pueda ser leído por María.

  1. José obtiene la clave pública de María. Whatsapp hace esto por José.
  2. El Whatsapp de José usa su clave privada almacenada sólo dentro de su smartphone, más la clave pública de María para cifrar el mensaje.
  3. Este mensaje cifrado de esta forma puede ahora ser enviado por cualquier medio y sólo podrá ser leído por María.
  4. María recibe la notificación sobre un nuevo mensaje proveniente de José, y para poder leerlo necesita la clave pública del emisor, en este caso José. La obtiene de la misma forma que en el paso 1.
  5. María combina su clave privada y la clave pública de José, para poder verificar que proviene de quién dice ser (firma digital) y para decifrar el mensaje.

Este tipo de algoritmos, se conoce como Criptografía asimétrica, y fue gracias a esto que por ejemplo Edward Snowden, pudo comunicarse de manera segura con los periodistas que terminaron publicando las historias sobre los documentos que había conseguido.