¿Qué es un servicio de mensajería privado? Muchos simplemente dirán que una aplicación de mensajería es privada si los mensajes que transmite están cifrados. Pero, en realidad, la privacidad de los mensajes es mucho más compleja que eso. En el Chaos Communication Congress, Ronald Schilling y Frieder Steinmetz dieron una charla en la que explicaron qué es un mensajero privado y qué características debe tener una aplicación de mensajería para considerarla privada.
Los seis pilares de una conversación privada
Para comprender la idea de mensajería privada, Schilling y Steinmetz sugieren que imaginemos intentar mantener una conversación privada en una fiesta. ¿Qué hacemos para hacerla privada? Probablemente buscar una habitación en la que nadie, salvo la persona con la que queramos hablar, pueda oírnos.
Es la primera regla de las conversaciones privadas: deben ser confidenciales. Nadie, salvo tu contacto y tú, debería poder oír de qué estáis hablando.
La segunda regla es la autenticidad (tienes que saber que la persona con la que pretendes hablar es, en realidad, la persona con la que quieres hablar). En la vida real, reconoces el rostro de la persona, pero con la mensajería online eso se complica.
Si la conversación es muy importante (y las privadas suelen serlo), querrás asegurarte de que el receptor escucha cada palabra que dices y viceversa. Es más, querrás asegurarte de que la persona oye exactamente lo que dices. En otras palabras, para disfrutar de una mensajería privada online, debes saber si una tercera parte ha corrompido tus mensajes. Y ese es el concepto de integridad, el cual es importante para llevar a cabo una comunicación privada.
Ahora imaginemos que una tercera parte ha entrado en la habitación y ha escuchado una parte de vuestra conversación. En la vida real, esta persona solo conocería la parte de la conversación que estaba escuchando, no lo que decíais antes de aparecer o tras irse. Sin embargo, Internet nunca olvida y la comunicación online no es tan simple como la offline. Ello nos plantea otros dos conceptos importantes tras la mensajería privada: forward secrecy y future secrecy (confidencialidad directa y confidencialidad futura respectivamente).
La forward secrecy no permite a una tercera parte saber nada de lo que has hablado con tu compañero antes de entrar en la habitación y la future secrecy no permite que sepa nada de lo habléis después de marcharse.
Pongamos que el tema del que hablaban era muy delicado. En este caso, si alguien los acusa de decir algo sobre dicho tema, querrían negarlo. Si la conversación era privada, los únicos que pueden citarla son tu compañero y tú, por lo que sería tu palabra contra la suya. En dicho caso, nadie puede demostrar nada y ello nos trae el importante concepto de negación.
Implementar privacidad en aplicaciones de mensajería
Estas son las seis características que deben implementarse en una aplicación de mensajería antes de que podamos decir que es privada. Son muy fáciles de conseguir cuando hablamos en la vida real, en una conversación privada cara a cara, pero cuando se trata de servicios de mensajería siempre habrá una tercera parte (el servicio en sí). ¿Cómo se implementan estos seis pilares con esta tercera parte en mente?
La confidencialidad se mantiene mediante el uso de un cifrado. Hay diferentes tipos, simétrico y asimétrico, llamado cifrado de clave pública. Los servicios de mensajería privados (en este caso, Schilling y Steinmetz analizaron Threema como ejemplo) usan ambos: crean una clave compartida desde la clave pública de una persona y la clave privada de la otra. O desde la clave privada de la primera persona y desde la clave pública de la segunda (las matemáticas del cifrado funcionan de cualquier modo).
Por tanto, la clave es idéntica para ambas personas y única para ambas (ningún otro par recibe la misma). La aplicación genera la clave independientemente y mantiene la confidencialidad al no transferirla (ambas personas la tienen después de decidir hablarse).
Este método también se utiliza para asegurar la integridad (si una parte externa añade algo al ya cifrado texto, este se volvería ilegible). En ese caso, tu compañero recibiría lo que tú le enviaste o un mensaje de error (porque el servicio no pudo descifrar el texto).
Para una confidencialidad aún mayor, tal vez quieras ocultar el hecho de que tu receptor y tú hablaron. Otra capa de cifrado se ocupa de ello. El mensaje que envías se cifra mediante la clave pública de ambos participantes (es como envolver el mensaje en un sobre con la dirección). Y, luego, lo vuelves a cifrar (lo introduces en otro sobre para enviarlo a la dirección del servidor del servicio de mensajería). En este caso, utilizas una clave generada mediante tu clave y la del servidor.
Este sobre dentro de un sobre se entrega al servidor del servicio. Si un atacante trata de verlo, sabrán que lo enviaste, pero no su destino. El servidor del servicio desenvuelve el sobre externo, ve la dirección de destino (no el mensaje), envuelve el conjunto en otro sobre y lo envía al receptor. En este punto, un atacante puede ver solo un sobre del servidor hacia el destinatario, pero no dónde se originó.
Con tantos sobres volando en todas direcciones, es difícil monitorizar qué persona recibió tu mensaje. Difícil, pero no imposible: si alguien comparara todos los sobres, podría encontrar dos que pesaran justo lo mismo y relacionaros a ti y a tu destinatario. Para estar seguros de que esto no sucede, el sistema añade un peso aleatorio a todos los sobres para que el que envíes y el que recibe el receptor nunca pesen lo mismo.
Mantener la autenticidad es más difícil. Algunas aplicaciones de mensajería utilizan las direcciones de correo o los números de teléfono como identificadores de usuario (así, el usuario demuestra que es quien dice ser). Pero los números de teléfono y las direcciones de correo son datos confidenciales que no querrías compartir con la aplicación. Algunos servicios (como Threema) animan a los usuarios a utilizar identificadores diferentes y a intercambiar códigos QR para demostrar su identidad.
La negación, en este caso, se consigue enviando cada mensaje a ambos participantes del diálogo. La clave es la misma para ambas personas, así que cualquiera de las dos pudo enviar el mensaje. Por tanto, incluso si alguien logra interceptar el mensaje entrante, no podrá saber quién lo envió.
Todo ello se encarga de la confidencialidad, la autenticidad, la integridad y la negación. ¿Qué hay de la forward secrecy y la future secrecy? Si las claves privada y pública de una persona son siempre las mismas, en el caso de que se comprometiera la clave pública, el atacante podría descifrar los mensajes previos y futuros de las conversaciones.
Para limitar la situación, el servidor debe reeditar las claves periódicamente. Si la clave se reedita una vez al mes, un atacante solo podría leer el historial de la conversación ese mes y perder la capacidad de monitorizar la conversación una vez se reedite la clave (en la práctica, la reedición es mucho más frecuente).
Conclusiones
Así terminamos nuestra breve introducción al concepto de la mensajería privada. En realidad, es mucho más complicado porque las aplicaciones modernas de mensajería deben tratar archivos multimedia, grupos y, a veces, videollamadas.
Si te interesa aprender más, te sugerimos que veas este vídeo de 33C3. En él, Schilling y Steinmetz no solo explican las ideas básicas, sino también hablan de cómo han utilizado ingeniería inversa con Threema y descubrieron cómo implementa principios de privacidad clave. Hemos disfrutado del vídeo y esperamos que tú también lo hagas.