Mensajería móvil en Raspberry con Signal

Si en la anterior entrada hicimos que nuestra Raspberry nos enviara correos electrónicos, ahora vamos a hacer que nos envíe mensajes al móvil y la aplicación que vamos a usar es Signal. Para quien no conozca la aplicación le sugiero que se dé una vuelta por su web: https://signal.org/

Básicamente podemos decir que Signal es una aplicación open source, gratuita y con encriptación de extremo a extremo, aparte de unas cuantas características más que podéis leer en su web y merece la pena hacerlo.

Signal y la censura

Pero Signal tampoco está exenta de problemas. El acceso a Signal está bloqueado en unos cuantos países como Egipto, Emiratos Árabes, Omán, Cuba, China, Irán… Países en los que la censura es bandera y una aplicación de mensajería con encriptación, digamos que no está bien vista por sus gobiernos.

Para burlar estas censuras Signal venía utilizando la técnica de “domain fronting”, que viene a ser más o menos camuflar el tráfico haciendo creer que corresponde a otro sitio. Primero por Google mediante su Google App Engine, pero a comienzos de 2018 Google comunicó su intención, que hizo efectiva, de evitar el funcionamiento del domain fronting. De ahí Signal pasó a AWS, y en este caso ocultaba su tráfico y lo mostraba como si se estuviera navegando por Amazon, esto le permitía estar presente en estos países donde Amazon no está censurado, igual que anteriormente hacía con Google. Pero AWS decidió seguir los pasos de Google y el 27 de abril de 2018 publicó sus “Enhanced Domain Protections for Amazon CloudFront Requests”, estableciendo una serie de cambios para evitar el domain fronting. Signal casi de forma inmediata recibió un correo de AWS avisando del cierre de su cuenta con ellos si seguía con esta práctica.

La técnica de “domain fronting” es controvertida ya que si bien aquí se está usando para dar servicio en determinadas zonas saltándose la censura impuesta por gobiernos totalitarios, también dicha técnica puede ser utilizada para distribución de malware sin levantar sospechas ya que nos hace creer que proviene de una fuente fiable.

No obstante, la realidad de todo este asunto bien pudiera ser mucho más compleja. Cuando se juntan en un mismo saco aplicaciones de mensajería cifrada, censuras gubernamentales y grandes empresas… nada va a ser lo que parece.

Y como nosotros, pobres mortales de a pie, no vamos a conocer esa verdad nunca, vamos a dejar aquí la historia, de momento, porque confieso un cierto deseo personal en ver el siguiente movimiento del equipo de Signal para hacer llegar su aplicación allá donde la tiranía impone su voz como la única audible.

Al lío

Si queremos hacer uso de Signal para recibir avisos en el móvil provenientes de nuestra Raspberry, necesitamos obviamente instalarlo en nuestro móvil y además necesitamos otro número de móvil para hacer con él la instalación en la Raspberry. Obviamente tienen que ser números distintos, así que para la Raspberry podéis usar el de una segunda sim, el móvil del gato (o perro o canario… ¡no me digáis que vuestra mascota no tiene móvil!), el de un ser próximo y querido que no use la aplicación y os lo preste… En cualquier caso es preciso tener ese segundo móvil cuando hagamos la instalación porque recibiremos en él un código de verificación que deberemos introducir.

Esto no obstante puede ser un hándicap para algunas personas, así que para quien no pueda usar este sistema, llegado el momento de mandar mensajes desde Raspberry siempre se puede hacer por correo electrónico como se explicaba en la anterior entrada.

Vamos a empezar, y como considero que es una buena costumbre tener el sistema actualizado, por si hay nuevas versiones de lo que sea comenzamos con:

sudo apt-get update
sudo apt-get upgrade

Y para ahorrarnos quebraderos de cabeza, antes de instalar la aplicación vamos a apañar un poquito el Java. Bendito Stackoverflow porque gracias al siguiente post conseguí hacer funcionar el invento la primera vez que me puse:

https://stackoverflow.com/questions/6481627/java-security-illegal-key-size-or-default-parameters

De no hacerlo es bastante probable que recibáis un error como me pasó a mi. El aviso de error que recibía comenzaba diciendo lo siguiente: Failed to send/receive message (Assertion): java.security.InvalidKeyException: Illegal key size  La solución para por instalar Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files. Lo que viene a hacer este plugin es que Java pueda usar funciones criptográficas con tamaños grandes de clave.

Hay que mirar qué versión de Java es la que tenemos instalada, en mi caso la 8 y bajar el plugin correspondiente. Para la 8 el link es el siguiente:

http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

Descargamos el archivo, descomprimimos y vemos que en su interior contiene tres archivos:

      • README.txt
      • local_policy.jar
      • US_export_policy.jar

Estos dos últimos con extensión .jar son los que tenemos que copiar a nuestro directorio security. En la versión que hemos estado instalando la ruta es la siguiente:

/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/lib/security

Veréis que en dicho directorio ya hay dos archivos con el mismo nombre, que tenemos que machacar. Yo por si acaso prefiero hacer antes una copia, por si las moscas. Acto seguido muevo los nuevos archivos machacando los existentes. Necesitaréis privilegios de root para ello, así que según si la descarga se ha hecho en local o en remoto pues el proceso se hará de una forma u otra, pero vamos, un sudo mv desde donde estén los ficheros a la dirección indicada, o la que corresponda en vuestro caso según sistema o versión, y listo.

Una vez copiados esos ficheros comenzamos con la instalación, cuyas instrucciones detalladas, que vamos a seguir, se pueden encontrar aquí:

https://github.com/AsamK/signal-cli

El primer paso es consultar la versión actual con el link que ofrece la página para ello, que es el siguiente:

https://github.com/AsamK/signal-cli/releases

En el momento de escribir estas líneas es la 0.6.0

Así que asignamos ese valor a la variable y así ya sólo será copiar y pegar:

export VERSION=”0.6.0”
wget https://github.com/AsamK/signal-cli/releases/download/v"${VERSION}"/signal-cli-"${VERSION}".tar.gz
sudo tar xf signal-cli-"${VERSION}".tar.gz -C /opt
sudo ln -sf /opt/signal-cli-"${VERSION}"/bin/signal-cli /usr/local/bin/

Fijaos que el valor de la variable VERSION ha de ser exclusivamente los números de versión separados por un punto y encerrados entre comillas, no tiene que haber ningún carácter más o el proceso fallará. Y lógicamente ha de ser el número de la versión actual que hayamos obtenido con el anterior link.

Bueno, esto ya está instalado, así de fácil, ahora hay que registrarse y hay que prestar atención en hacerlo con el usuario con el que lo vayamos a usar, si no no funcionará y habrá que volver a realizar el registro (afortunadamente si algo sale mal se puede repetir el registro y el anterior se anula).

signal-cli –u +34AAAAAAAAA register

Siendo AAAAAAAAA el número de teléfono que vamos a usar para la Raspberry precedido del código de país, en este caso +34 que el de España

En la consola no recibiremos respuesta alguna, simplemente se lo piensa unos segundos y ya está, pero al momento recibiremos un aviso en el móvil que contendrá el número del registro con un código de verificación:

Así que con ese código nos vamos de nuevo a la consola y lo ponemos:

signal-cli –u +34AAAAAAAAA verify YYY-ZZZ

En esta ocasión tampoco recibiremos ninguna respuesta, ni por consola ni por móvil, pero una vez que la instrucción se haya ejecutado podemos probar a mandar un mensaje desde la línea de comandos a nuestro móvil, en el que obviamente ya tendremos que tener instalada la aplicación.

signal-cli –u +34AAAAAAAAA send –m “Mensaje de prueba desde Raspberry” +34BBBBBBBBB

En este caso AAAAAAAAA sigue siendo el número de la Raspberry y BBBBBBBBB el número del destinatario, es decir, para la faena que nos ocupa será nuestro propio móvil.

Y podemos comprobar que el mensaje llega al instante.

 

Pero además de escribirle el texto también podemos mandar el resultado de otro proceso. Por ejemplo, si tuviéramos un programa llamado temperatura.py que lo que hace es leer un sensor y luego hacer un print de la temperatura, podemos hacer que ese resultado nos lo envíe al móvil, con una instrucción similar a la siguiente:

Python temperatura.py –a | signal-cli –u +34AAAAAAAAA send +34BBBBBBBBB

Eso lo veremos más adelante, pero fijaos las posibilidades que esto tiene: Se pueden tener corriendo aplicaciones que bajo determinadas circunstancias manden mensajes a distintas personas. Ahí lo dejo.

Y con este apartado ya casi no queda nada para tener la Raspberry lista y poder cacharrear con los juguetes. Así que en la siguiente entrada haremos una copia de seguridad de la tarjeta por aquello de no tener que empezar de cero si nos cargamos algo y ¡A jugar!

Deja un comentario

No está permitida la inserción de ningún dato de carácter personal (mail, tef...). Cualquier comentario que los contenga será editado o eliminado.

Por favor, si dejas un comentario pon cualquier nombre para poderme dirigir a ti pero que no te identifique

6 − uno =

El comentario es totalmente privado. No se almacena la IP