Firmar, cifrar y descifrar correo electrónico

(En català al blog)

Hace unos días empecé a preparar una charla para la próxima fiesta ubuntaire para hablar sobre este tema, y me he dado cuenta de que en realidad poder acceder a estas funcionalidades es tan sencillo que podía escribir un artículo al respecto, intentando no complicarlo excesivamente.

Antes que nada pero, quería intentar desmontar la falacia del “a mi me da igual si me espían porque no tengo nada que ocultar”. Quien diga esto totalmente convencido (dudo que exista alguien así) lo primero que debería hacer es preguntarse si realmente no le importaría que alguien mirase lo que está escribiendo o mirando en el móvil por encima de su hombro. Seguramente le importaría. Seguramente también cierra el sobre cuando envía una carta, y las cortinas de su casa cuando no quiere ser visto, aunque no vaya a cometer ningún crimen. Además, hay mucha información que a lo mejor queremos compartir con alguien en concreto, pero con nadie más. Porque sí. O porque puede que si llega a la persona equivocada nos acabe perjudicando, aunque no implique la revelación de ningún delito. Puede que se trate de información empresarial que no queremos que nadie más conozca, especialmente la competencia. No, no nos da igual que nos espíen, y por esto es totalmente razonable adoptar unas medidas mínimas para proteger nuestra información.

Seguro que has leído alguna cosa sobre PGP o GnuPG, cuyas funcionalidades incluyen no solamente cifrar y descifrar correo electrónico, sino también cualquier tipo de texto o archivo. Vamos a ver pues algunos conceptos básicos y cómo acceder a estas funcionalidades porque realmente es muy sencillo y en pocos minutos podemos prepararnos para poder enviar y recibir correo electrónico cifrado (y también firmarlo)

Una de las primeras cosas que hay que tener claras es que el tipo de cifrado que nos interesa aquí es el cifrado asimétrico y en un momento veremos por qué. Seguramente conoces métodos de cifrado simétrico, como por ejemplo comprimir un fichero en un .zip y protegerlo con contraseña. ¿Por qué este cifrado se denomina simétrico? Pues porque la contraseña utilizada es la misma tanto para cifrar como para descifrar. ¿Y cuál es el problema si queremos compartir información con alguien? Evidentemente le tendremos que facilitar la contraseña a través de otro canal: si queremos proteger una información porque va a viajar a través de un canal inseguro como el correo electrónico y enviamos la contraseña por este mismo canal… seguramente no ganaremos nada en cuanto a seguridad. Y justo aquí es donde el cifrado asimétrico es interesante, porque funciona como una caja fuerte con dos llaves: una de ellas solamente sirve para cerrar, y la otra solamente para abrir. Lo bueno del caso es que para cifrar y descifrar texto o ficheros necesitamos lo que se conoce como par de claves , formado por una clave pública (es la llave que cierra en la analogía de la caja fuerte) y una clave privada (la llave que abre), con la gran ventaja que la clave pública se llama así precisamente porque es la que podemos compartir con el resto del mundo: cualquiera que nos quiera enviar información cifrada lo puede hacer con esta clave, pero solamente nosotros podremos descifrar esta información con nuestra clave privada, que como es privada no la compartimos con nadie y por lo tanto nadie más podrá descifrar estos datos. Con esto desaparece el problema que tiene el cifrado simétrico a la hora de compartir la contraseña!

Una advertencia antes de seguir adelante: el par de claves que necesitamos para hacer funcionar el invento, y más concretamente la clave privada, está protegida por una contraseña o frase de paso. Aquí no hay botón de “he olvidado la contraseña”: si la olvidas, olvídate también de poder descifrar nada, por lo tanto más te vale utilizar una contraseña que puedas recordar, o bien anótala y guárdala en un lugar seguro!

Bien, basta de avisos: vamos a generar el par de claves. Si lo quieres hacer a través del terminal encontrarás centenares de tutoriales para hacerlo, pero mi intención aquí es hacerlo de la forma más sencilla posible y por lo tanto mediante una interfaz gráfica. Yo te lo explicaré para sistemas GNU/Linux que es lo que conozco; seguramente para otros sistemas operativos habrá herramientas parecidas pero tendrás que buscarlas. Si utilizas Linux ya sabrás que normalmente hay diferentes herramientas para la misma funcionalidad, y por lo tanto podrás escoger la que más te guste usando tu gestor de paquetes preferido. Personalmente me siento cómodo con GPA, pero cada cual sabe sus gustos. Solamente un comentario más antes de generar el par de claves: en el caso de GPA las opciones por defecto te funcionarán a la perfección, pero si por cualquier motivo quieres escoger la longitud de la clave, antes tendrás que activar esta opción en el menú Edit — Preferences:

De todas formas, las siguientes capturas corresponden a la generación del par de claves sin haber activado esta opción (que realmente no es necesaria). El asistente nos guía por los siguientes pasos absolutamente sencillos y fáciles de completar:

1-Menú Keys — New key:

2 -Informamos nombre y correo electrónico:

3-No es imprescindible pero sí absolutamente recomendable hacer copia de seguridad:

4-Escribimos la frase de paso (exacto, la que no nos conviene olvidar!):

5-Si hemos hecho caso de la recomendación de hacer copia de seguridad, la guardamos en la carpeta elegida a tal efecto. ¡Ya está! En el gestor de claves podemos ver nuestro flamante par de claves, su identificador, fingerprint, validez (no entraremos ahora en estos conceptos)… ya puedes compartir la clave pública con cualquiera que tenga que enviarte información confidencial, subirla a servidores de claves… prueba a hacer clic con el botón derecho y mira las diferentes opciones.

A partir de aquí puedes aprender a cifrar, firmar y descifrar texto y archivos jugando con la aplicación que hayas elegido, buscar alguna extensión para el navegador que te facilite la vida a la hora de gestionar correo electrónico… ¡bienvenido al mundo del cifrado asimétrico!