Seguridad en XMPP - Introducción al cifrado extremo a extremo

Versionado de la entrada

Introducción

Vivimos en un mundo donde lastimosamente estamos bajo constante vigilancia, lo peor de todo no es que este tipo de cosas esté pasando sino que directamente las nuevas generaciones lo están normalizando. Esta entrada va para aquellos que queremos tecnologías que no se comporten de la misma manera que lo hace un malware tradicional, porque seamos sinceros lo que hace Meta, Google, Microsoft a través de sus aplicaciones no es muy distinto a lo que hace un spyware, de aquellos que solíamos eliminar con el "anti-virus" en los años 90.

Ya no solo tenemos que lidiar con que las grandes tecnológicas tengan una obsesión por espiar sino que además los políticos de la UE quieren meternos una puerta trasera en las aplicaciones de mensajería a través de "ChatControl", sé que la entrada no va de esto pero aprovecho la ocasión para informar y decirles que a fecha de hoy aún podemos hacer algo: [https://fightchatcontrol.eu/]

Si abominaciones como Chatcontrol llegan a ser aprobadas, no nos quedaría mas opciones que usar servicios mas descentralizados como XMPP o chats que hagan conexiones punto a punto. Si yo tengo que apostar por alguna tecnología esta es XMPP. También está "Matrix" pero yo personalmente no la considero 100% descentralizada, como esta no es una entrada de aplicaciones de mensajería sino mas bien de mostrar como lidiar con algunas "limitaciones" de XMPP como es el cifrado extremo a extremo, evitaré extenderme en otros temas que no estén relacionados con esta limitación.

XMPP por su naturaleza descentralizada trae muchas ventajas pero también traen otras desventajas, una de ellas es el cifrado extremo a extremo. Y para ser sinceros por mucho que sea defensor de XMPP debo reconocer que el proceso de cifrado extremo a extremo puede llegar a ser bastante tedioso, primero porque es un concepto duro de masticar y aunque aplicaciones móviles como [Conversations] hacen las cosas mas fáciles, cuando se quiere tener una experiencia "Multidispositivos" las cosas se empiezan a complicar.

La idea es sacar varias entradas explicando como lidiar con el cifrado extremo a extremo en XMPP, pero antes de hablar de esto quiero hacer una introducción al concepto de cifrado extremo a extremo, una vez se tenga claro este concepto podemos continuar con ciertos consejos para tratar con esto en XMPP, en especial cuando intentamos conectar varias aplicaciones diferentes o dispositivos distintos.

https://fightchatcontrol.eu/

Conversations

Cifrado extremo a extremo

¿Que es el cifrado extremo?

Para no hacer la guía mas larga, básicamente cuando enviamos un mensaje a través de este tipo de aplicaciones como Whatsapp, Signal, XMPP, el mensaje llega a un servidor y luego este servidor se encarga de reenviar esta información al destino. Pongamos un ejemplo:

Quiero enviar un mensaje a mi mamá, supongamos que uso Whatsapp, entonces el flujo del mensaje a grandes rasgos sería algo como esto:

Cuando no había cifrado extremo a extremo, el mensaje iba cifrado a nivel de conexión entre cliente y servidor pero no a nivel de mensaje como tal. Es decir, si un atacante intervenía en la conexión entre el cliente y el servidor este en teoría no podría ver nada. Es decir a nivel de tráfico el mensaje era seguro pero una vez el mensaje llegara al servidor sus dueños, en este caso Meta, podrían leer ese mensaje. En pocas palabras teníamos algo como esto:

Cuando Meta implementó el cifrado extremo a extremo en WhatsApp lo que hicieron fue cifrar el mensaje desde el origen, el servidor se encargaba de reenviar esos datos al destino pero el dueño del servidor *no puede leer esos mensajes*, al menos en teoría. Básicamente sería algo como esto:

Por eso se llama "cifrado extremo a extremo" porque desde el dispositivo de origen se cifra el mensaje, viaja cifrado por el canal de comunicación y solamente se descifra en el dispositivo de destino.

El marketing de Whatsapp

Whatsapp nos vende la idea de que como ellos cifran de extremo a extremo, ni siquiera ellos pueden leer los mensajes. Esto es cierto, sin embargo Whatsapp pertenece a Meta y estos tipos nunca dan puntada sin hilo, al menos en lo que respecta a la privacidad. Sabemos que las grandes tecnológicas como Google, Apple, Facebook, Amazon y Microsoft (GAFAM) suelen tener cero respeto por la privacidad de los usuarios. Si bien el cifrado extremo a extremo de Meta aparentemente es seguro, ellos en su marketing no suelen decir nada con respecto a los metadatos. Si, la comunicación entre usuarios está cifrada *pero los metadatos NO*.

Que son los metadatos

Del prefijo griego "meta" que significa "mas allá". En una manera muy abstracta se suele usar para un concepto que se aplica sobre si mismo. Básicamente los metadatos serían "datos sobre los datos". En aplicaciones como Whatsapp se suelen recoger este tipo de metadatos:

Solo con los metadatos ya se pueden determinar comportamientos y hábitos de uso sin ni siquiera leer los mensajes.

Según mi experiencia técnica basándome en lo que he leído en XMPP también hay algunas fugas de metadatos, esto es porque XMPP es descentralizado y los metadatos aquí son necesarios para comunicarse con otros servidores, el único cliente de mensajería que parece cubrir esto bien es Signal, pero hay un problema, que aunque prefiera a Signal sobre Whatsapp y Telegram es otro cliente que tampoco deja de ser centralizado.

Cifrado y verificación

Hay que reconocer que aplicaciones como Whatsapp, Signal, Telegram, entre otros cuando se trata de cifrado hacen la tarea "mas sencilla". Usualmente la gente instala Whatsapp y en teoría no se preocupa por nada mas, muchos ni siquiera saben que la aplicación automáticamente cifra los mensajes de extremo a extremo. Whatsapp suele mostrar en cada nuevo chat que el mensaje está siendo cifrado extremo a extremo, algunos leerán ese mensaje, y otros simplemente lo ignorarán pero quedémonos en que Whatsapp lo hace automáticamente. En XMPP algunos clientes populares como [Dino] para el escritorio y [Conversations] en el móvil también cifran automáticamente de extremo a extremo.

Pero hay algo igual o incluso mas importante que el cifrado, y se llama la verificación. Imagina que te escribe tu tía avisándote de que ha cambiado de teléfono, el mensaje llega cifrado e incluso te llega un mensaje diciendo que hubo un cambio en el dispositivo remoto o en la cuenta pero ¿Como sabes que la persona que te está escribiendo es efectivamente tu tía y no una persona que se está haciendo pasar por ella? En ambos casos, es decir si la persona al otro lado es tu tía o no, la información estaría viajando cifrada pero hay un fallo en la verificación porque no estás 100% seguro(a) de que te estas comunicando con la persona quien dice ser. La verificación es eso, comprobar que el la persona al otro lado del canal de comunicación es quien dice ser.

En clientes de mensajería como Whatsapp este proceso es "automático", al menos en teoría, pero en mi humilde opinión los procesos de verificación deberían hacerse manualmente, al menos en lo que respecta a mensajería instantánea. A nivel conceptual ambas aplicaciones hacen el proceso de verificación similar, sin embargo en mi opinión XMPP es mas preciso porque te hace saber la diferencia entre un mensaje que no viene cifrado, otro que viene cifrado pero no verificado y por ultimo un mensaje que viene cifrado y verificado.

A nivel conceptual conozco dos formas de verificar tus contactos:

Dino

Conversations

La descentralización también tiene sus desventajas

Cuando solemos hablar de "descentralización" en Internet lo solemos asociar con algo positivo y yo considero que esto sigue siendo así, pero esto no quiere decir que aquí no tengamos problemas.

Cuando Whatsapp se cae, suele haber una caída masiva y lo primero que mucha gente suele hacer es irse a Telegram, pero hay otro problema Telegram también es susceptible a el mismo problema, aunque siendo sinceros nunca he visto esto en Telegram hay que decir que si por X o Y motivo los servidores en Telegram falla el problema sería exactamente el mismo. En XMPP como son servidores independientes no tendremos problemas de caídas masivas, a menos que el 99% de la población que use XMPP estén ubicadas en el mismo servidor, cosa que en la actualidad no pasa.

Otra ventaja de XMPP es que es relativamente sencillo montar servidores caseros pequeños, para tu familia por ejemplo. Yo personalmente creo que la única forma de convencer a mi familia de usar XMPP es aprovechar una caída de Whatsapp y decirles algo como "Aquí tienen un backup para que no se queden incomunicados".

Sin embargo hay que reconocer que el tema de cifrado extremo a extremo cuando se usan muchos dispositivos, y sobre todo si son diferentes entre si puede llegar a ser tedioso. Si solamente usas tu celular, esto muy probablemente no te afecte pero si usas XMPP en tu móvil y luego en tu escritorio aquí el proceso si se puede complicar un poco.

¿A qué me refiero con esto? En aplicaciones como Whatsapp y Telegram al ser centralizadas tienen una ventaja en particular:

Y en cada uno de ellos puedes ver absolutamente todos los mensajes. En XMPP esto no pasa, no de manera automática. Básicamente porque en XMPP cuando se cifra y se verifica se crea una relación de confianza entre dispositivos, no entre cuentas. Por este motivo, el proceso es mas tedioso pero la idea con estas entradas es explicar un poco para hacerlo mas fácil de entender y mas manejable, no prometo que sea sencillo por la naturaleza descentralizada de XMPP pero si prometo hacer mi máximo esfuerzo para que sea lo mas masticable posible.

Cuando esto pasa en XMPP lo recomendable es crear la relación confianza lo mas rápido posible, para obtener algo lo mas similar posible a la "sincronización de mensajes" entre dispositivos, por ejemplo si abres el cliente en el celular y entras al escritorio 10 días después a tu misma cuenta XMPP en otro cliente, no vas a poder ver muchos mensajes cifrados que tenías en el móvil de hace 10 días. Pero si configuras el cliente de escritorio al mismo tiempo que el cliente móvil vas a poder ver los mensajes en ambos dispositivos.

Conclusiones

En mi opinión XMPP es una alternativa viable para clientes de mensajería mas populares como Whatsapp y Telegram, además 100% descentralizada pero que por esta naturaleza puede llegar a ser difícil comprender ciertas cosas, por este motivo esta entrada ha sido una guía básica para entender a grandes rasgos como funciona el cifrado extremo a extremo y así en entradas posteriores mostrar a mas detalle como lidiar con estas configuraciones en XMPP para no solamente tener un cliente de mensajería sino un cliente lo bastante seguro.

Proxied content from gemini://elrincondechucho.xyz/xmpp_omemo_0.es.gmi (external content)

Gemini request details:

Original URL
gemini://elrincondechucho.xyz/xmpp_omemo_0.es.gmi
Status code
Success
Meta
text/gemini
Proxied by
kineto

Be advised that no attempt was made to verify the remote SSL certificate.