Guía de seguridad – Claves GPG

Hoy en día es más que usual ver noticias en medios sobre fallos de seguridad, filtraciones, hackeos de cuentas (que suelen ser causas de fallos de la plataforma o del uso de contraseñas predecibles), etc. ¿Cómo puedo saber yo qué seguridad tengo respecto a mis datos, mis cuentas o mis comunicaciones? ¿Cómo sé si tengo una buena contraseña o no?. En esta serie de entradas sobre seguridad online / ciberseguridad comenzaremos con uno de los aspectos básicos de la seguridad en comunicación: el cifrado y la seguridad con GPG.


El primer paso en la privacidad y seguridad de las comunicaciones es milenios anterior a la creación de Internet. Se suele decir que Julio César fue el creador del método que lleva su nombre de cifrado. Este método se que usó en sus campañas en las galias para evitar que los mensajes interceptados pudieran revelar información a la coalición de tribus galas. Para esconder el mensaje lo que hacía era “adelantar” las letras de tal forma que con un “adelanto” de 3 a la letra A le corresponde la D, a la B la E y así sucesivamente. De tal manera que el mensaje “HOLA” se transforma en “KRÑD” siguiendo el alfabeto español.

Que sea código libre no hace que sea menos seguro igual que el que los ingleses tuvieran una máquina Enigma no hizo que automáticamente conocieran su funcionamiento. Lo hacen las matemáticas y las claves usadas y no el “protocolo”. Por esa razón que sea código libre hace que sea auditable por cualquier persona para comprobar que el código está libre de cualquier inserción maliciosa, como cualquier puerta trasera que pudiera colocar una empresa en su código.

Cada cerradura tiene su llave

PGP o en su defecto OpenPGP es instalable en cualquier sistema operativo. De hecho las distribuciones basadas en Linux llevan por defecto el paquete GPG (GNU Privacy Guard). Muchos servicios actuales ofrecen cifrado en los datos como Telegram, Signal, Protonmail… También se usa en repositorios de software como forma de certificar la autenticidad de los paquetes.

La instalación es tan sencilla como pedir al gestor de paquetes de nuestro sistema Linux que instale el paquete GPG. Para Windows o Mac existen instaladores portando el código para otros sistemas operativos.

Además existen utilidades para usar GPG con interfaz gráfica como Kleopatra en KDE o Seahorse para GNOME donde podemos gestionar nuestras llaves. Las llaves son una cadena de texto, símbolos y números que se emplea como semilla para cifrar y descifrar cualquier archivo de datos o texto. Por defecto, este sistema utiliza dos llaves. Una llave pública que es de acceso libre —suena paradójico que sea de acceso libre, ¿no?— y una llave privada que sólo debería ser accesible a quién gestione las llaves. En un caso personal, a ti mismo.

wood dirty rope door
Photo by Markus Winkler on Pexels.com

La llave pública permite que cualquiera pueda enviarnos texto o archivos de forma segura. La llave pública permite transformar a un texto codificado que sólo se decodifica con la llave privada. Haciendo una analogía, cuando queremos cifrar un archivo usamos un cofre con dos tapas. La llave pública cierra una tapa que sólo sirve para meter, como un buzón. La llave privada nos permite abrir el compartimento. Esto nos permite recibir información cifrada y segura, ya que solo nosotros podremos descifrarlo.

El sistema también funciona en el sentido contrario. La llave pública sirve para descifrar cualquier contenido cifrado que nosotros creamos con nuestra llave privada. De esta forma se asegura que somos los remitentes o creadores del contenido. Esto permite firmar o autentificar estos archivos, además de evitar que se puedan modificar sin romper nuestra firma.

Podemos usar la llave pública de una tercera persona para enviarle de forma cifrada un documento. Esta tercera utilizaría nuestra llave pública para contestarnos, ya que las llaves públicas solo se descifran con las privadas. Podemos sumar además de cifrarlos con la llave pública de una tercera, cifrarlos también con nuestra llave privada. Una tercera persona al recibirlo podrá: descifrarlo con su llave privada y descifrarlo otra vez con nuestra llave pública, lo que verifica nuestra autoría.

A este tipo de cifrados en los que existen dos llaves se les denomina cifrado asimétrico y son mucho más seguros que un cifrado que usa el mismo elemento para cifrar y descifrar.

Cifrado hacia mi

Otros: 📖 ➕ 🔑 (pub) = 📖🔐

Yo: 📖🔐➕ 🔑 (priv) = 📖

Cifrado hacia otros

Yo 📖 ➕ 🔑 (pub otros) = 📖🔐

Otros: 📖 ➕ 🔑 (priv otros) = 📖

Firma y verificación

Yo: 📖 ➕ 🔑 (priv) = 📖🔐 (firma)

Otros: 📖🔐 (firma) ➕ 🔑 (pub) = 📖 (verificado)

Esquema con emojis de cómo funciona el cifrado asimétrico de PGP

Creando y usando nuestras llaves PGP

Tenemos que comenzar creado un par de llaves: la pública y la privada. En general los archivos que contienen las llaves pueden llevar datos asociados a quién pertenecen por lo que es útil añadir nuestro nombre y correo electrónico. Por defecto, los programas de gestión de claves ya incluyen alguno de los tres algoritmos de generación de llaves generalmente usados como RSA, DSA o Elgamal (en 1024 o 2048 bits). A llaves más largas mucha más capacidad de computación se necesitaría para romperla a base de fuerza bruta. Un valor como estos hace prácticamente imposible a día de hoy un ataque con fuerza bruta. Para averiguarla no podemos saber si en el futuro la capacidad de computación hará necesario generar claves aún más largas.

La clave privada además necesita de la creación de un password para que cada vez que la tengamos que usar, verifiquemos que somos nosotros quien usa esa llave. Es recomendable utilizar un generador de contraseñas seguras o cualquier secuencia larga de letras, números y símbolos.

Una vez creadas (archivos txt, asc o gpg…) nosotros guardaremos en privado la llave privada, por eso es privad. La llave pública podemos distribuirla a cualquiera para permitir que se nos envíe contenido cifrado. Los propios gestores de llaves tienen ya la opción de subirla a repositorios públicos de llaves PGP como el de Ubuntu o el de PGP. De estas webs otras personas pueden descargarse nuestra llave o buscarnos por el nombre o correo que hayamos colocado en la información. Podemos colgarla en nuestro blog o mandarla por correo electrónico.

Aspecto del archivo de texto de una llave PGP pública y privada

-----BEGIN PGP PUBLIC KEY BLOCK-----mQMuBFwG0mIRCACZCc073Gg6hlMP7LG+xqSjK9cFDMvkv
FnPqBNok59f0MbxDSTtW6+2X9jO8O8nZBfCn8i4Qrd1GxdrL
U2/az08gwSSPyU...
-----BEGIN PGP PRIVATE KEY BLOCK-----7fucTGXxk0sIwLvbJF/yzgoZI+cWOweJzwnlgEOehoXfVWGRZ
kyOiLa6fILC95AmLuut1jUC7cSIfaC9C0l5Bizlj9bgAC7P+EJToK
BO7TALdpWPhaA02...

Los gestores de llaves GPG además permiten ver nuestra colección de llaves públicas de otras personas e importarla. Además, las llaves suelen identificarse también con una serie de código corto conocido como huella o ID de la llave que podemos usar para añadir en nuestros correos o información para que la gente tenga esa referencia a nuestra llave pública

ID de la Llave: [XXXXXXXXXXXXXXXX] son los últimos 16 caracteres

Huella digital: YYYY YYYY YYYY YYYY YYYY YYYY XXXX XXXX XXXX XXXX, son los últimos 40 caracteres, con los últimos 16 son los que forman la ID

En general los programas además permiten añadir al menú contextual del sistema la opción de cifrar o descifrar usando las claves almacenadas.

Esta es mi clave pública asociada a mi correo de GMail. Puedes encontrarla en el repositorio de llaves. Si tienes la extensión de la que hablamos a continuación puedes importarla desde ahí incluso. Puedes descargarla de aquí o del servidor y ver que mi huella digital es 079A BA32 4DAA A5CA (Id 4DAA A5CA)

Usando PGP en correo electrónico y archivos

En Firefox y Chrome tenemos la extensión Mailvelope que nos permite importar claves públicas y privadas para bien firmar nuestros emails o cifrar emails a terceros con sus llaves públicas. Simplemente, hemos de añadirlo a los plugins del navegador y configurarlo.

photo of cryptic character codes
Photo by cottonbro on Pexels.com

La misma extensión permite generar un par de claves o bien importarlas así como compartir claves públicas en un servidor. La extensión detecta cuando estamos en una url de un servicio de correo electrónico y despliega en el cuadro de texto del mensaje un icono de una hoja con un lápiz. Haciendo clic en él, escribimos el texto en una ventana emergente y podemos firmarlo, cifrarlo, etc. Al salir en el cuadro de texto del correo tendremos una retahíla de caracteres que son el mensaje una vez cifrado.

De la misma forma, si abrimos un email que contiene un mensaje crifrado con PGP, aparecerá el icono y nos permitirá escoger en una ventana emergente con qué clave descifrarlo.

También desde las opciones del complemento podemos codificar/decodificar archivos que pudieran ser enviados como adjuntos, siempre hasta un límite de 50 Mb. Mejor cifrar un archivo tipo -zip -rar o -tar con todos los archivos en lugar de uno por uno.

Tienes en la web de mailvelope todo el proceso con documentación gráfica.

Si usas un cliente de correo en lugar de entrar por el navegador a tus cuentas de correo entonces deberías usar Thunderbird ya que tiene soporte para PGP mediante un plugin (Enigmail).

Usando PGP desde la terminal

Podemos usar también PGP sin ninguna interfaz gráfica desde la terminal de nuestro sistema unix y el parque GPG.

unrecognizable hacker with smartphone typing on laptop at desk
Photo by Sora Shimazaki on Pexels.com

Para crear un par de llave simplemente podemos usar el comando gpg –gen-key. Y nos preguntará sobre si queremos el cifrado RSA o DSA/Elgamal. También pregunta si simplemente queremos solo una clave para firmar con RSA o DSA. La longitud de la llave por defecto será 2048 bits y tenemos opciones de añadir otros parámetros como caducidad, nuestro nombre, email… Finalmente hemos de indicar el password de la llave privada. Podemos ver nuestras llaves propias como importadas con el comando gpg -k

Para gestionar llaves podemos exportarla a un archivo con -output NombreDelArchivo -export IDclave subirla a un servidor de claves con –send-keys -keyserver UrlDelServidor IDclave. Podemos importar una clave descargada con –import NombreDelArchivo o de un servidor de claves con –recv-keys IDclave -keyserver UrlDelServidor.

Para cifrar con una llave pública haremos gpg –encrypt –recipient IDclave ArchivoParaCifrar generando un archivo cifrado que solo puede descifrar el dueño de la clave. Si somos nosotros quién lo recibimos podemos descifrarlo con gpg -d ArchivoCifrado. Como el archivo ya indica que llave pública se usó, nos preguntará la contraseña de la llave privada, no hace falta indicarla.

Para firmar un archivo usamos el comando gpg -u IDclave –output NombreArchivoFirmado –sign ArchivoParaFirmar y nos pedirá la contraseña de la llave privada. Si alguien quiere verificar la firma entonces debe emplear el comando gpg –verify ArchivoFirmado.

Como siempre se dispone de toda la información en el manual del paquete accesible mediante man gpg y de la ayuda rápida de gpg –help.

Revocando claves

No es algo usual, pero en el caso en que perdieras o alguien accediera a tu clave privada entonces toda la seguridad que ofrece estaría anulada. En los programas que trabajan con GPG al crear el par de llaves nos da la opción de crear un certificado para anularla. Si lo hacemos mediante terminal es el comando gpg –gen-revoke IDclave. Dicho certificado se puede importar y enviar a los repositorios de claves tras lo cual aparecerá como desactivada.

Cifrar vs Encriptar

Encriptar es una palabra que básicamente significa lo mismo que cifrar.

Cifrar
De cifra.
 1. tr. Transcribir en guarismos, letras o símbolos, de acuerdo con una clave, un mensaje o texto cuyo contenido se quiere proteger.

Diccionario de la Real Academia de la lengua Española

Mientras que encriptar es una adaptación directa del mismo vocablo en inglés que proviene del griego y no del árabe como cifra, por lo que son parecidos pero no iguales

Encriptar
Del ingl. to encrypt; cf. gr. ἐγκρύπτειν enkrýptein 'ocultar'.
1. tr. cifrar (‖ transcribir con una clave).

Diccionario de la Real Academia de la lengua Española

Por lo tanto, la forma correcta es cifrar y descifrar en detrimento de la adaptación literal inglesa de la misma palabra encryptencriptar que ha sido añadida o usada por traducciones literales de textos en inglés.

Publicado por Rafael

Graduado en Física y docente en Educación Secundaria. En el Máster en Formación del Profesorado comenzó en la investigación en la Didáctica de las Ciencias Experimentales. Cuenta con comunicaciones y artículos publicados sobre su trabajo predoctoral. Ha colaborado en diversas iniciativas de divulgación científica y astronomía aficionada.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.