OpenPGP para todos con Enigmail y Thunderbird

Hoy vamos a hablar sobre el cifrado de emails con el protocolo OpenPGP y vamos a repasar el manejo de varias tecnologías implicadas en este proceso. En mi humilde opinión, si me permites, creo que este post te vendrá bien porque nunca está de más repasar este tema dado que la gestión de los correos cifrados sigue siendo engorrosa, desafortunadamente, en la actualidad es algo casi imposible de abordar por un usuario medio sin conocimientos de ordenadores.

Por cierto, en la actualidad existen algunas iniciativas que tienen como objetivo facilitar la gestión PGP, por ejemplo Keybase, aunque en mi opinión todavía queda bastante para que todo el mundo pueda beneficiarse de esta tecnología.

Para seguir este tutorial deberías tener unos conocimientos básicos de criptografía de clave pública.

Top secret

Todo esto me parece muy complicado…

Gestionar el correo electrónico seguro requiere algo de esfuerzo, no te desanimes, ten un poco de paciencia e investiga otros recursos por tu cuenta. Es como todo en esta vida, ¡ánimo!, cuando por fin conozcas los conceptos implicados en PGP, gestionar el email encriptado será sencillo, ya lo verás. Al final solo tendrás que tener preparada tu clave pública PGP, configurar tu programa cliente (Thunderbird, Outlook, Apple Mail, etc.) y almacenar las claves públicas de las personas a quienes vayas a enviar correos cifrados.

¿Qué es PGP?

PGP es un método para proteger los emails en la capa de aplicación de la pila TCP/IP. Para entendernos rápido, esto significa que la seguridad se delega en las mismas aplicaciones que gestionan los emails. Pero esto no es solo característico de PGP; en general, los sistemas de correo electrónico seguro se basan en la idea de incorporar la seguridad dentro de los mismos mensajes, sin modificar el protocolo de transferencia.

Esto es así por la misma naturaleza del correo electrónico: es asíncrono, se almacena en otros ordenadores, puede enviarse a varios destinatarios, viaja en claro si las comunicaciones que lo transportan no se encriptan con SSL, TLS, etc.

¿Sabías que hay varios sistemas de correo electrónico seguro? Los más populares son:

  • PGP (Pretty Good Privacy)
  • S/MIME (Secure MIME)

GnuPG es el software libre que proporciona funciones criptográficas y otras utilidades para gestionar el correo electrónico seguro con el método PGP.

Te recomiendo que eches un vistazo a este recurso de la Wikipedia para saber cómo funciona exactamente PGP. Allí encontrarás este diagrama realizado por xaedes & jfreax & Acdx.

Diagrama PGP

Figura 1. Así funciona PGP

Al final la idea es sencilla. Los emails se encriptan con la clave pública del destinatario. Luego, por otro lado, cuando el destinatario recibe mensajes de correo encriptados, los tiene que desencriptar con su clave privada que solo él o ella conoce. Cualquier persona que consiga interceptar la comunicación verá caracteres extraños ininteligibles sin sentido, porque el contenido estará encriptado.

Datos encriptados

Este sistema de email seguro requiere que el emisor de un mensaje conozca la clave pública del receptor. Por esto salen al rescate los servidores de claves públicas. Estos servidores son como directorios o repositorios donde puedes buscar claves por nombre, apellido, etc.

Si yo, Bob, quiero recibir mensajes encriptados con PGP, tengo que preocuparme de generar una clave pública y subirla a un servidor de claves, o comunicarlo a las personas que vayan a enviarme información sensible para que puedan encriptar sus mensajes con mi clave. Por otra parte, si yo, Bob, voy a enviar información sensible a Alice (mi información bancaria, DNI, nóminas, etc.), tendré que saber su clave pública PGP para enviarle mi mensaje encriptado.

Finalmente, con PGP también puedes firmar tu email con tu clave privada, así demuestras al receptor que eres tú y solo tú quién ha escrito ese correo electrónico, puesto que la firma se verifica con la clave pública correspondiente.

¿Qué vamos a hacer en este tutorial?

Primero crearemos un par de claves pública/privada desde una consola Cygwin, con GnuPG, y luego aprenderemos a gestionar el cifrado de mensajes desde Thunderbird por medio del plugin Enigmail. El objetivo es familiarizarnos con algunas de las tecnologías implicadas en la creación de emails seguros, al mismo tiempo que exponemos algunas ideas importantes que deberíamos repasar de vez en cuando.

El entorno que yo he utilizado para correr las pruebas que explico en este post es este.

  • Sistema operativo Windows 8
  • Cygwin, una interfaz de línea de comandos tipo Unix para Windows
  • GnuPG, implementación libre del estándar OpenPGP
  • Enigmail, plugin de seguridad para Thunderbird

Idealmente estaría bien que tu software fuera el mismo que el mío, pero si conoces GNU/Linux será muy fácil para ti adaptar lo que explico en Cygwin a tu distro GNU/Linux. De hecho es casi lo mismo, Cygwin es como una consola GNU/Linux en Windows.

Creación del par de claves pública/privada

Instalamos GnuPG.

apt-cyg install gnupg

Generamos las claves con este comando:

gpg --gen-key

Esto producirá una salida parecida a la siguiente, donde tenemos que ir respondiendo las preguntas que nos hace la utilidad gpg.

gpg (GnuPG) 1.4.18; Copyright (C) 2014 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

gpg: directory `/home/jordi-laptop/.gnupg' created
gpg: new configuration file `/home/jordi-laptop/.gnupg/gpg.conf' created
gpg: WARNING: options in `/home/jordi-laptop/.gnupg/gpg.conf' are not yet active during this run
gpg: keyring `/home/jordi-laptop/.gnupg/secring.gpg' created
gpg: keyring `/home/jordi-laptop/.gnupg/pubring.gpg' created
Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection?

gpg nos pregunta por el tipo de clave que queremos, nosotros seleccionaremos la primera opción (RSA and RSA).

Your selection? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)

A continuación nos pide un tamaño. De forma predeterminada el tamaño es 2048, seleccionaremos esta opción pulsando la tecla intro.

Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0) 6m
Key expires at Sun Mar 22 11:01:56 2015 CET
Is this correct? (y/N)

Ahora la utilidad nos pregunta cuándo queremos que caduque la clave. Aquí seleccionaremos 6 meses (6m).

Como ves, gpg --gen-key es una utilidad interactiva que nos va pidiendo datos para crear la clave, así todo el rato hasta llegar al dato final, la passphrase:

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Real name: Jordi Bassagañas
Email address: info@programarivm.com
Comment:
You are using the `utf-8' character set.
You selected this USER-ID:
    "Jordi Bassagañas <info@programarivm.com>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.

Después de introducir la passphrase 2 veces, obtendremos esta salida por pantalla:

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
.+++++
.................+++++
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
..+++++
.+++++
gpg: /home/jordi-laptop/.gnupg/trustdb.gpg: trustdb created
gpg: key 8CF8A9BB marked as ultimately trusted
public and secret key created and signed.

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: next trustdb check due at 2015-03-22
pub   2048R/8CF8A9BB 2014-09-23 [expires: 2015-03-22]
      Key fingerprint = 90B5 F823 83AB 8793 A7CC  B89A 5094 BDDD 8CF8 A9BB
uid                  Jordi Bassagañas <info@programarivm.com>
sub   2048R/F7EB6C5A 2014-09-23 [expires: 2015-03-22]

Ya lo tenemos, con lo anterior ya podemos consultar el contenido del directorio .gnupg:

$ ls -la .gnupg
total 45
drwx------+ 1 jordi-laptop Ninguno    0 Sep 23 12:08 .
drwxr-xr-x+ 1 jordi-laptop Ninguno    0 Sep 23 11:58 ..
-rw-------  1 jordi-laptop Ninguno 9188 Sep 23 11:58 gpg.conf
-rw-------  1 jordi-laptop Ninguno 1212 Sep 23 12:08 pubring.gpg
-rw-------  1 jordi-laptop Ninguno 1212 Sep 23 12:08 pubring.gpg~
-rw-------  1 jordi-laptop Ninguno  600 Sep 23 12:08 random_seed
-rw-------  1 jordi-laptop Ninguno 2590 Sep 23 12:08 secring.gpg
-rw-------  1 jordi-laptop Ninguno 1280 Sep 23 12:08 trustdb.gpg

También puedes utilizar este comando para listar las claves:

gpg -k 

Lo que genera una salida parecida a:

pub   2048R/8CF8A9BB 2014-09-23 [expires: 2015-03-22]
uid                  Jordi Bassagañas <info@programarivm.com>
sub   2048R/F7EB6C5A 2014-09-23 [expires: 2015-03-22]

El identificador de mi clave es 8CF8A9BB, de modo que para subirla al servidor de claves pgp.mit.edu puedo ejecutar este comando gpg:

gpg --send-keys --keyserver pgp.mit.edu 8CF8A9BB

Instalación de Enigmail en Thunderbird

¿Cómo fue? ¿Conseguiste crear tus claves? En el apartado anterior hemos aprendido a crear un par de claves pública/privada con la utilidad gpg. Para un usuario técnico esto será más o menos sencillo, pero para una persona sin conocimientos técnicos es algo que no se puede abordar; tiene que gestionar su correo seguro OpenPGP desde una GUI amigable.

Ahora vamos a facilitar las cosas a las personas que no son técnicas con Enigmail, una extensión de seguridad para Mozilla Thunderbird y Seamonkey que permite gestionar mensajes de correo electrónico firmados o cifrados con el estándar OpenPGP.

Para instalar Enigmail, en Thunderbird nos vamos a Herramientas > Complementos y en la caja de búsqueda que dice Buscar complementos escribiremos la palabra enigmail. Entonces nos saldrá este cuadro y le daremos al botón Instalar.

Instalando complemento

Figura 2. Instalando Enigmail

Tras instalar el plugin, Thunderbird nos pedirá que reiniciemos la aplicación. Y cuando reiniciemos, Thunderbird iniciará automáticamente el asistente de instalación de Enigmail. En este tutorial no detallaremos todos los pasos del asistente porque seguro que los podéis seguir sin problemas.

Ya verás que Thunderbird preguntará cosas tales como si quieres firmar tus mensajes de forma predeterminada, dónde tienes el ejecutable pgp.exe en tu máquina (en mi caso está en C:\cygwin64\bin), y también intentará buscar las claves OpenPGP que tengas instaladas en tu PC para preguntarte cúal quieres utilizar para firmar, cifrar y descifrar tus correos.

Con Enigmail instalado en nuestro Thunderbird, tendremos a golpe de clic en un nuevo menú todas las opciones PGP que de otro modo tendríamos que ejecutar en la consola. Enigmail también habilita un menú para trabajar con S/MIME, pero en este artículo no veremos cómo utilizar este sistema de correo seguro.

Te cuento que yo le dije al asistente de instalación de mi Enigmail que yo prefería no cifrar de forma predeterminada, de modo que si quiero encriptar mis mensajes tengo que hacerlo explícitamente como muestra esta figura.

Opciones en Thunderbird

Figura 3. Ya podemos gestionar cómodamente nuestros correos seguros en Thunderbird

O también así como explicaré ahora. Fíjate que las opciones más importantes (cifrado y firma) están muy a mano en la pantalla de Redacción de mensajes, disponibles en forma de icono en la parte inferior derecha.

figura-x-llave-lapiz-grandes

Figura 4. Enigmail pone 2 iconos para cifrar y firmar mensajes con el estándar OpenPGP

Acabamos de ver cómo podemos firmar y cifrar fácilmente nuestros mensajes, pero Enigmail también permite buscar e importar claves de servidores de claves, generar nuevos pares, etc., todo esto con la opción Administración de claves.

Administrar claves con Enigmail

Figura 5. Administrar claves con Enigmail es sencillo

¡Y esto es todo por hoy! Espero haber aportado un poco de luz a la gestión de correos seguros con PGP, GnuPG, y Thunderbird. Te invito a implantar esta solución en las máquinas de usuarios no técnicos para que puedan beneficiarse de esta tecnología. Con las claves ya en mano, y bien configurado Thunderbird, es sencillo cifrar y firmar los mensajes, solo hay que explicar a los usuarios cómo tienen que utilizar Thunderbird y Enigmail.