WhatsApp vs Telegram: ¿Cuál es el servicio de mensajería más seguro?
Vladimir Afanasiev / TASS
Página principal Tecnología

The Guardian publicó la semana pasada una historia sobre el “agujero de seguridad” de WhatsApp. Aunque no creo que se haya encontrado tal agujero, sí es cierto que se alienta a buenas preguntas sobre cómo las aplicaciones de mensajería instantánea personal deben reaccionar a los cambios de las claves de seguridad.

Al sentir curiosidad sobre cómo manejaban las mismas cuestiones otras aplicaciones personales, las investigué y encontré resultados inesperados.

Un amigo mío y yo usamos dos teléfonos Android que representaban a Alice y Bob. Nuestro proceso fue el siguiente:

1. Primer contacto. Bob envía un mensaje a Alice.

2. Envío del mensaje después del cambio de la clave. Alice desinstala y reinstala la aplicación, lo cual supone un cambio de sus claves. Bob le envía a Alice un mensaje.

3. La clave de seguridad cambia mientras el mensaje está en tránsito. Alice desinstala la aplicación, Bob envía un mensaje a Alice y esta reinstala la aplicación. Aquí está el problema con WhatsApp: qué hay que hacer cuando un mensaje ya ha sido enviado y las claves de seguridad cambian.

WhatsApp

1. Primer contacto: Es la primera vez que Bob contacta con Alice y el mensaje ha sido entregado sin notificaciones. Al parecer esto es algo habitual en todas las aplicaciones de mensajes que he analizado exceptuando Wire, que ofrece una menor garantía (véase después).

2. Envío del mensaje después del cambio de la clave: Alice desinstala y reinstala. Justo en el momento en que Alice reinstala, se muestra inmediatamente en el chat que Bob mantiene con ella, una notificación de cambio de clave (el primer caso de “el código de seguridad de Alice ha cambiado”) reflejado en las pantallas que constan arriba. Esto es correcto porque advertía a Bob del cambio. Es algo que solo pasa en WhatsApp en mi análisis, ninguna de las demás aplicaciones de mensajería instantánea que he probado hace esto. Hasta aquí todo bien.

3. Cambio de la clave mientras el mensaje está en tránsito: Bob envió el mensaje después de que Alice desinstalara la aplicación. La primera imagen de arriba muestra que el mensaje tiene solo un tick de confirmación, lo que indica que no ha sido entregado. Cuando Alice reinstala, se ve en la segunda imagen de arriba que el mensaje se entrega de forma automática con la nueva clave sin pedir aprobación manual a Bob, aunque éste recibe notificación del cambio (el segundo ejemplo de “el código de seguridad de Alice ha cambiado”).

4. Verficación: UI/UX es correcto. El cifrado e2e de WhatsApp emplea Signal de manera que hereda el formato numérico de esta aplicación, que parece bien pensado y dirigido al usuario, además de tener la capacidad de usar un código QR para comparaciones entre receptores.

Síntesis de WhatsApp

Lo bueno: El UI/UX es correcto y parece tener un diseño práctico.

Lo bueno: El aviso previo del cambio de la clave es estupenda. Este punto funciona aquí mejor que en el resto de las aplicaciones de mensajería instantánea que he probado.

Lo bueno: Los mensajes de WhatsApp se entregan incluso en circunstancias extremas.

Lo malo: Los mensajes son cifrados automáticamente con nuevas claves cuando están en tránsito, aunque el usuario reciba notificación. Si esto pasara y se requiriera su aprobación, WhatsApp sería la mejor aplicación que he probado para esto. Es difícil imaginarse cómo se puede hacer que este aspecto funcione bien en los grupos conservando a la vez el orden de los mensajes.

Signal

1. Primer contacto: Todo parece normal.

2. Los mensajes se envían después del cambio de clave: Al contrario que en WhatsApp, Signal no avisa previamente a Bob de que las claves de Alice han cambiado. Todo parece normal hasta que Bob le envía un mensaje a Alice (Imagen 1 arriba). En ese caso, no es solo un aviso sino un proceso completo que requiere aprobación manual (Imagen 2 arriba). Cuando Bob aprueba el cambio se añade un aviso a la conversación (Imagen 3 arriba).

3. Cambio de la clave mientras el mensaje está en tránsito: Alice desinstala la aplicación, Bob envía un mensaje y Alice reinstala la aplicación. Alice nunca recibe el mensaje y nunca se muestra la confirmación de llegada al final del mensaje de Bob (Imagen 5 anterior). Pero cuando Bob envía un siguiente mensaje a Alice, este recibe notificación de que las claves de Alice han cambiado.

Signal no es vulnerable a la acción de retransmisión automática de WhatsApp pero el mensaje en tránsito nunca se recibe. Puede que no sea un problema, puesto que no parece que sea un escenario muy común en condiciones normales y Signal tiene un comportamiento “fail closed”, pero un mejor UX para este caso límite sería un buen toque.

Verificación UI/UX: La experiencia en esta aplicación sobre este aspecto es la mejor de todas las que he probado. Signal usa el acertado formato de protocolo numérico Signal, tiene un código QR para comparaciones rápidas y también incluye prestaciones para compartir realmente rápidas. La aplicación me permite compartir el “código de seguridad” a través de cualquier canal de comunicación fuera de banda en mi teléfono y verifica fácilmente los códigos de seguridad que recibo comparando con el portapapeles. Tiene un diseño práctico, bien pensado y es amable en el empleo.

Síntesis de Signal

Lo bueno: Como era de esperar, Signal es la aplicación más conservadora y la más segura.

Lo bueno: La verificación UI/UX de la clave es la más fácil y fluida de todas las aplicaciones que he probado.

Debe mejorar: Los avisos previos de cambio de clave que existen en WhatsApp.

No tan bueno: Los mensajes en tránsito durante el cambio de clave se pierden y el usuario tiene que deducirlo puesto que no se muestra confirmación de llegada. Sería mejor que Signal le alertara y le preguntara si quiere volver a reenviar el mensaje.

Telegram

1. Primer contacto: Lo que es extraño acerca de los “chats secretos” de Telegram es que no parece que muestren confirmación de llegada. Los dos primeros mensajes de la primera pantalla anterior fueron recibidos y leídos perfectamente por Alice, pero Bob no tiene forma de saberlo.

2. Mensaje enviado después del cambio de clave: Aquí es donde todo falla realmente en Telegram. Alice desinstaló, reinstaló y Bob le envió un tercer mensaje que se muestra en la primera pantalla de arriba, que Alice no recibe nunca, de hecho, Alice nunca recibe más mensajes de Bob de todos los que le envía. Bob no recibe aviso alguno puesto que los mensajes que llegan al dispositivo de Alice no muestran tampoco confirmación de llegada. Bob tampoco recibe nunca notificación del cambio de clave. Este caso de fallo práctico me hace preguntarme seriamente si alguien ha usado alguna vez “chats secretos” en Telegram, pero quizás esa sea la cuestión.

3. Cambio de la clave mientras el mensaje está en tránsito: Esto también falla. Bob no recibe notificación del cambio de clave y sus mensajes no llegan nunca. No estoy seguro de si los mensajes que Bob envía están siendo cifrados con las claves anteriores, con las nuevas, o con las claves de otra persona, pero lo que está claro es que nadie estaría dispuesto a usar un sistema tan poco fiable. Si Bob descubre de alguna forma que debe crear un “chat secreto” totalmente nuevo, tampoco recibe nunca notificación de un cambio de clave en ese caso.

Verificación UI/UX: No parece que tenga un diseño práctico. La imagen extraña no es un código QR para comparaciones entre receptores, sino algo que se supone que debes comparar a simple vista. No parece difícil crear una imagen que parezca básicamente igual y se corresponda a una clave diferente, pero este es un trabajo de investigación para otro momento. La comparación visual es más lenta y más difícil que los escaneados de código QR de WhatsApp y Signal. La huella dactilar es un revoltijo de caracteres hexadecimales con un formato muy malo, lo que coincide con el efecto chapucero de toda la pantalla.

Síntesis de Telegram

Lo malo: Los usuarios nunca reciben notificaciones sobre los cambios de claves.

Lo malo: Todo el proceso es extravagante y poco fiable.

Yo diría que no se “use Telegram para conversaciones secretas”, pero parece que Telegram ya se ha encargado de que no sea posible.

Wire

1. Primer contacto: Wire ofrece menor garantía que la semántica “trust on first use” (confianza en el primer uso) empleada por otras aplicaciones de mensajería instantánea. Wire siempre se fiará de las claves o de los cambios de claves sin notificaciones, bloqueos u otro tipo de acciones, a menos que se verifiquen de forma explícita todas las claves de un contacto y ellos verifiquen todas las suyas (lo cual es muy difícil, véase a continuación).

2. Mensajes enviados después del cambio de clave: En mi prueba pude reproducir resultados que no fueron verificados de forma consistente. He visto cambios de claves sin avisos (como en las pantallas de arriba), pero también he visto un cambio de clave con aviso posterior (lo cual no impidió que Bob enviara el mensaje a Alice), y otros que han probado en Twitter (gracias Zaki Manian y @tqbf) han visto avisos de bloqueo.

Wire ha respondido diciendo que el comportamiento correcto es que si Alice y Bob han verificado sus dispositivos mutuamente de forma bidireccional, Bob verá aquí un aviso de bloqueo antes de que éste pueda enviar un mensaje a Alice tras de un cambio de clave. Creo que este comportamiento podría no ser el más sólido y que el requisito de verificación bidireccional es muy extraño.

3. El cambio de clave se produce cuando el mensaje está en tránsito: Algunas aplicaciones de mensajes pierden este mensaje y otras lo manejan de forma insegura. Wire pierde el mensaje y no tengo certeza sobre su seguridad. Hay el mismo nivel de incertidumbre que con la anterior prueba “envío de mensaje después del cambio de clave”.

Verificación UI/UX: Algunas aplicaciones de mensajería instantánea que he probado parecen descuidadas en este aspecto, pero Wire parece constantemente hostil hacia el usuario. Al contrario que el protocolo de Signal, donde los dispositivos comparten una identidad común, Wire ha tomado la horrible decisión de dar a cada dispositivo su propia identidad.

Wire también considera cada re-instalación en un único dispositivo físico, un “nuevo dispositivo”, lo que significa que la lista de dispositivos de un usuario empieza a tener el aspecto de las pantallas anteriores (esta prueba comenzó con un “dispositivo” y rápidamente aumentó a tres, aunque siempre hubiera solo un teléfono físico)

Esto significa que un usuario con tres dispositivos físicos tiene que juntar todos sus dispositivos y hacer seis comparaciones entre ellos cada vez que se produce un cambio en alguno, y los usuarios que se quieren verificar mutuamente tienen que hacer una comparación entre los N² de todos sus respectivos dispositivos.

El formato de huella dactilar real es de 64 caracteres hexadecimales formateados que contienen detectores de epilepsia, lo que significa que dos usuarios con tres dispositivos tendrían que comparar la enorme cifra de 1152 caracteres para verificarse entre ellos.

Síntesis de Wire

Muy malo: Las notificaciones de cambio de claves es la menos fiable.

Muy malo: El diseño de Wire es hostil hacia la seguridad en la comunicación a nivel estructural. Aunque se solucinaran los problemas de cambios de claves poco fiables, el diseño por el que han optado de cifrado e2e significa que será casi siempre imposible que los usuarios funcionen con Wire de forma segura.

Muy malo: Wire ofrece menor garantía que el sistema “trust on first use” (confianza en el primer uso”. Es similar a las aplicaciones de mensajería que requieren que los usuarios habiliten un ajuste para las notificaciones de cambio de clave, pero en vez de un ajuste, los usuarios tienen que completar una tarea imposible (como comparar cadenas de 1152 caracteres) y también asegurarse de que todos sus interlocutores de conversaciones hagan lo mismo. Esto no se parece a la verificación de claves que fue diseñada en un principio.

Todavía mucho peor: Indagué un poco más y observé otras dos debilidades que pronto contaré.

Allo

1. Primer contacto: Todo parece normal.

2. Mensaje después del cambio de clave: Alice desinstaló y reinstaló. De nuevo, al contrario que WhatsApp, Allo no avisa previamente a Bob del cambio de la clave de Alice. Sin embargo cuando Bob envía un mensaje a Alice aparecerá en la conversación una notificación del cambio antes de la salida del mensaje, cuyo envío fallará (Imagen 1 arriba). Este es un proceso de bloqueo, como ocurre en Signal, pero Allo explica mucho menos lo que pasa. Solo con pulsar en el mensaje bloqueado, este se reenviará con la nueva clave y el usuario será el que deduzca si el fallo en el envío se debió a la notificación de cambio de clave que apareció bajo la conversación anterior.

3. Cambio de la clave mientras el mensaje está en tránsito: Alice desinstaló, Bob envió un mensaje a Alice y esta reinstaló (Imagen 2 anterior). El mensaje de salida de Bob permanece en estado “pendiente” pero el hilo de la conversación se reescribe de nuevo para indicar que se ha producido un cambio en la clave (el segundo caso de “el código de conversación de Alice ha cambiado”, que aparece antes del mensaje de salida de Bob al final de la Imagen 2 anterior).

El mensaje parece estancarse en este estado. Bob intenta enviar un mensaje más que también se queda estancado aquí durante unos minutos.

Finalmente, Alice intenta enviar un mensaje a Bob (Imagen 3 anterior). Cuando llega el mensaje, los dos mensajes de salida pendientes de envío se marcan inmediatamente como fallidos y de nuevo el usuario tiene que deducir si ha fallado el envío debido a la notificación de cambio de clave que aparece sobre ellos (ahora ya bastante arriba en la pantalla).

Si se pulsa inmediatamente en los mensajes estos se reenvían y se reordenan en la conversación (Imagen 4). Yo pulsé en el orden equivocado así que se enviaron en el orden equivocado.

Verificación UI/UX: Allo emplea el protocolo de Signal de manera que también hereda el formato numérico adecuado para sus “códigos de conversación”. Sin embargo la pantalla es como un añadido, no incluye un código QR, no tiene funcionalidad para compartir y en general no parece tener un diseño práctico.

También hay que mencionar que todo este comportamiento ante el cambio de claves solo es visible si los usuarios eligen un ajuste de notificación de cambio de claves (desactivado por defecto, Imagen 6 anterior). Estos “chats de incógnito” ya son una opción de manera que la doble decisión de descubrirlos es un poco redundante.

Síntesis de Allo

Lo bueno: Allo también gestiona el difícil tema del cambio de claves mientras los mensajes están en tránsito. No se envían automáticamente con la nueva clave, como con Signal, pero sí hace un esfuerzo por notificar que la entrega del mensaje falló, al contrario que Signal. Desgraciadamente parece que la funcionalidad falla un poco (los mensajes de salida se quedan pendientes de envío hasta que se recibe un mensaje), pero de momento la aplicación tiene un comportamiento “fail closed”. Pero esto es probablemente más fácil para Allo que para WhatsApp, puesto que no soporta grupos cifrados y no tienen que preocuparse por el orden de los mensajes de una conversación consistente con un proceso de aprobación de bloqueo.

Necesita mejorar: La verificación UI/UX es claramente un añadido en este momento.

Necesita mejorar: Requiere que los usuarios tomen una doble decisión, primero seleccionando el “chat de incógnito” y después activando un ajuste para ver las notificaciones de cambios de claves.

Lo malo: El proceso de aprobación es un poco ligero. El usuario tiene que deducir por qué un mensaje ha fallado en el envío, y pulsando una sola vez se envía el mensaje bloqueado.

Síntesis general

WhatsApp: Buenas características y funcionalidad pero necesita cambiar el comportamiento ante los cambios de claves mientras los mensajes están en tránsito. Seguramente es difícil conseguir esto correctamente a la vez que se soportan grupos.

Signal: La opción más segura pero estaría bien que tomara prestadas algunas características de WhatsApp.

Telegram: Ni siquiera está en condiciones de uso, y no se debería usar aunque se consiga entender de alguna manera.

Wire: Pulgares abajo. Un ejemplo perfecto de lo que una aplicación de mensajería instantánea no debe hacer.

Allo: Sorprendentemente, Allo parece que promete. Se quitan algunos incordios, se mejoran los defectos y se puede convertir en una buena opción.

Fuente: Medium

Por favor, describa el error
Cerrar