Jami: texto, llamadas y videollamadas cifradas

Buscando siempre alternativas libres, sin anuncios, cifradas y descentralizadas, un amigo de Mastodon me comentó sobre este programa: Jami, que anteriormente era conocido como Ring o SFLphone, así que empezamos a probarlo en modo texto.

La sencillez es asombrosa. Te registras rápidamente y puedes buscar otros contactos simplemente si te dan el nick o un código tipo ring:xxxxxxxxxxxx donde las x son caracteres y números. Ya recibes la petición de añadir el contacto y se puede empezar.

En texto va muy rápido y en su web podeis ver algunos gifs de como actúa el programa.

Está disponible para Windows, GNU/Linux, MacOS, iOS, Android y Android-TV.

Por defecto viene configurado para usarse únicamente en modo Wifi, pero se puede cambiar para usarlo también con datos móviles. Lógicamente usar el móvil en una videoconferencia gastaría muchos datos, pero puede usarse solo para llamadas también y funciona perfectamente. También pueden compartirse archivos entre contactos o hacer una videoconferencia múltiple.

Ahora vamos a algo más técnico:

Aunque es un programa prácticamente descentralizado: no necesita servidores intermedios para funcionar, Jami reconoce que usa algunos servidores en 5 casos específicos: en notificaciones push, en proxy OpenDHT, en el bootstrap, en el servidor de nombres y en TURN:

Los tres primeros casos en los que se puede utilizar un servidor para Jami están relacionados con OpenDHT, la tecnología que permite a los dispositivos Jami encontrarse entre sí en Internet sin necesidad de un servidor. Los ordenadores utilizan las direcciones IP para comunicarse entre sí en línea, pero por lo general es dinámico y por lo tanto cambia con el tiempo. OpenDHT proporciona una forma de identificar los dispositivos de la red con un ID único y recuperar su dirección IP sin saberlo de antemano, lo que les permite comunicarse de forma fiable incluso si cambia. Sin embargo, necesita ejecutarse continuamente en segundo plano para mantener las conexiones a la red abiertas y escuchar los cambios para alertar al usuario de una nueva llamada o mensaje.

Tanto Android como iOS tienen un mecanismo incorporado para enviar al móvil notificaciones push a través de los servidores de Google o Apple. Aunque no está alineado con el objetivo de Jami de hacerlo completamente distribuido, es la única manera de notificar a los usuarios móviles mientras la aplicación Jami no esté en primer plano. Es por eso que crearon el proxy OpenDHT, un servidor que escucha los cambios en la red de OpenDHT y envía notificaciones a los dispositivos Jami a través de los servidores de notificación push de Apple o Google. Ningún dato personal es enviado de esta manera, ni siquiera en forma cifrada. El proxy sólo alerta a sus dispositivos de que algo nuevo ha ocurrido y ellos hacen el resto recuperando la información a través de la red OpenDHT. También es posible utilizar el proxy sin notificación push. Sin embargo, es menos fiable porque tanto Android como iOS pueden detener la aplicación en cualquier momento.

El tercer caso en el que se utiliza un servidor es el bootstrap. Cada dispositivo que ejecuta Jami es un nodo en la red distribuida de OpenDHT. Sin embargo, para establecer la primera conexión con él, los dispositivos necesitan conocer al menos a otro peer de antemano. El servidor bootstrap es simplemente un nodo OpenDHT que mantienen en línea en todo momento. Jami está configurado para unirse a la red a través de él cuando te conectas por primera vez. Puedes ver este parámetro en la configuración avanzada de Jami. El valor por defecto es bootstrap.jami.net. Puedes ejecutar tu propio bootstrap siguiendo unas instrucciones para construir y ejecutar un nodo OpenDHT en un servidor:

https://github.com/savoirfairelinux/opendht/wiki/Build-the-library

https://github.com/savoirfairelinux/opendht/wiki/Running-a-node-with-dhtnode

El servidor de nombres se utiliza para resolver los nombres de usuario de Jami. Todas las cuentas de Jami tienen un ID único de cuarenta caracteres, pero como esto no es práctico para recordarlo, han creado una forma de asociarlo con un nombre de usuario. Los almacenan en una cadena de bloques para mantener Jami lo más distribuido posible (https://jami.net/the-jami-blockchain-switches-from-proof-of-work-to-proof-of-authority/), pero se necesita un servidor para acceder a ella a través de la aplicación Jami. Cuando buscas un nombre de usuario en Jami, la aplicación solicita al servidor de nombres el ID que está asociado a él. Puedes ver cómo funciona buscando cualquier nombre de usuario de Jami en el servidor de nombres directamente a través de su navegador en esta dirección: http://ns.jami.net/name/anyjamiusername

Jami puede trabajar sin esto si usas directamente las identificaciones de tus amigos para llegar a ellos, pero los nombres de usuario facilitan el proceso de añadir un nuevo contacto. También puedes configurar tu propio servidor de nombres e incluso ejecutar un nodo en la cadena de bloques Jami:

https://git.jami.net/savoirfairelinux/ring-project/wikis/technical/Name-Server-Protocol

https://git.jami.net/savoirfairelinux/ring-project/wikis/tutorials/Jami-distributed-network#running-a-jami-node

Y el último caso es el servidor TURN. Es utilizado por Jami sólo en situaciones en las que no se puede establecer una conexión peer-to-peer para transmitir datos entre usuarios. Jami se basa en una tecnología llamada ICE para conectar dispositivos cuando sus usuarios se comunican. Cuando uno o ambos usuarios están detrás de un cortafuegos, puede ser difícil establecer un enlace directo entre ellos, que es donde el servidor TURN entra en juego como relay. TURN es un estándar de Internet y Jami suministra uno que está configurado por defecto, pero puedes utilizar el tuyo propio si lo deseas, cambiando este parámetro en la configuración avanzada de Jami y siguiendo estas instrucciones:

https://git.jami.net/savoirfairelinux/ring-project/wikis/technical/3.6-Setup-your-own-TURN-server

Aunque hacen todo lo posible para liberar a Jami de los servidores, en algunos casos son inevitables. Sin embargo, al menos hacen todo lo posible para que sus usuarios no dependan de ellos para comunicarse.

Los servidores de arranque, TURN y de nombres se pueden configurar en los parámetros avanzados de Jami y los usuarios pueden utilizar los suyos propios si lo desean. Además, los datos que los usuarios deciden compartir se transmiten siempre a través de conexiones totalmente peer-to-peer, excepto cuando se necesita un servidor TURN. Incluso entonces, está totalmente cifrado de principio a fin y nunca se almacena en otros lugares que no sean los dispositivos de los usuarios.

Bueno, tras todo lo técnico (espero que no os haya aburrido), deciros que el programa no está nada mal y hace su función perfectamente. Ya es decisión vuestra si usarlo para comunicaros por texto, voz y/o imágen o solo para algunas funciones.

Aquí podeis descargarlo para vuestro dispositivo, probarlo mirando sus ajustes y configurarlo a vuestro gusto:

https://jami.net/download/