GPG es el acrónimo de GNU Privacy Guard, un sistema de cifrado de código abierto. Los usos más populares vienen de la mano de envío de emails cifrados o con firma digital, pero hoy vamos a ver cómo cifrar (que no encriptar) un archivo cualquiera, para poder enviarlo asegurándonos de que nadie más que el destinatario va a poder recibirlo. Eso sí, tanto remitente como receptor, deben conocer la clave de cifrado.
Cifrar un archivo
He creado un archivo de texto plano, en el que he escrito un mensaje.
user@my-laptop:~$ cat mi-archivo.txt
Shhhh... Este es un mensaje secreto...
Para cifrarlo, sólo tendremos que hacer lo siguiente:
user@my-laptop:~$ gpg -c mi-archivo.txt
Enter passphrase: <poner aquí cualquier clave>
Repeat passphrase: <repetir aquí la misma clave>
El archivo cifrado se llamará igual que el original, pero añadiendo la extensión .gpg. Esto genera un archivo llamado, en mi caso, mi-archivo.txt.gpg. Veamos qué contiene:
Perfecto, listo para enviar sin preocuparnos de nuestra privacidad.
Cabe decir, que es un buen sistema para guardar información (imágenes, backups, o cualquier archivo) de manera segura en servicios en la nube poco securos como Dropbox o Google. Si por algún motivo olvidas la contraseña, puedes olvidarte de recuperar el contenido.
Cómo descifrar el archivo
Descifrarlo es, si cabe, aún más facil que cifrarlo. Veamos como descifrar el arhivo de antes:
user@my-laptop:~$ gpg mi-archivo.txt.gpg
gpg: CAST5 encrypted data
gpg: encrypted with 1 passphrase
Enter passphrase: <usar la misma clave de antes>
user@my-laptop:~$ cat mi-archivo.txt
Shhhh... Este es un mensaje secreto...
GPG, tal y como se dice en la Wikipedia, es una herramienta para cifrar y firmar mensajes. Podriamos decir que es el hermano libre de PGP. Existen los proyectos GPG4win y macgpg2 que proveen de una versión de GPG para Windows y Mac respectivamente.
¿Para qué necesito cifrar y firmar mensajes?
Lo más conveniente sería que habitualmente hiciéramos uso de este tipo de herramientas, al menos para las comunicaciones que queramos mantener realmente en privado.
Por si no lo sabías, la mayoría de correos electrónicos, programas de mensajería como Messenger, accesos y contenido de páginas web, herramientas de videoconferencias, y un largo etcétera de utilidades que a priori pueden parecernos suficientemente privadas, se transmiten por Internet sin ningún tipo de encriptación. Esto quiere decir que si alguien es capaz de escuchar esta comunicación (muy sencillo mediante cualquier sniffer), puede llegar a ver todo lo que estamos haciendo.
Puede parecer poco probable que esto suceda, pero ni te imaginas la de oportunidades que se presentan al día para poder ser víctima de este tipo de espionaje: siempre que utilizas tu conexión wifi del móvil o portátil y te conectas a Internet en un bar, en una biblioteca pública, en la red cableada de tu oficina, incluso en la propia red inalámbrica de tu casa (ni te imaginas lo fácil que puede llegar a ser reventar la clave de una red wifi doméstica) puedes estar siendo espiado.
Sí, sé que suena paranoico, y probablemente lo sea, pero si necesitas una privacidad real, la mejor solución es encriptar o cifrar nuestras comunicaciones.
¿Cómo puedo encriptar un mensaje?
Para encriptar un mensaje con GPG (o con cualquier sistema de criptografía asimétrica), necesitamos generar un par de claves. Una de ellas será la clave pública, clave que todo el mundo deberá conocer, y la otra será la clave privada, que debe mantenerse en privado y sólo tú debes conocer, ya que eso nos garantizará los servicios de confidencialidad, autenticación, integridad y no repudio.
Para generar nuestro par de claves, utilizaremos Seahorse, un gestor de claves GPG para Gnome que facilita mucho todo el proceso. Si utilizas Gnome, te interesará instalar también los plugins de seahorse para nautilus, para disponer del menú contextual que te permita encriptar un archivo haciendo clic en el botón derecho. Instalar seahorse y el plugin puedes hacerlo escribiendo en la consola lo siguiente:
Tras la instalación, debes reiniciar nautilus. Para hacerlo puedes reiniciar el PC, o cerrar sesión y volver a entrar o simplemente escribiendo:
root@laptop:/home/root# killall nautilus
Aquí están las capturas que nos muestra cómo generar el par de claves paso a paso utilizando Seahorse:
Si utilizas Windows o Mac, prueba con GPG4Win o macgpg2, el proceso debe ser muy parecido, aunque nunca lo he probado. Si alguien tiene alguna experiencia con estas versiones estaré encantado de saber qué tal funcionan y poder intercambiar opiniones.
¿Y ahora qué?
Bien, pues ahora puedes encriptar y firmar documentos o archivos y enviárselos a quien quieras, con la certeza de que nadie, salvo la persona a la que le envías el mensaje, podrá leerlo. Para hacerlo, la persona que recibirá el mensaje encriptado debe disponer también de un par de claves como los que acabamos de generar, y tú debes conocer la clave pública del destinatario.
Vamos a ver un ejemplo de cómo exportar tu clave pública con Seahorse.
Para importar una clave pública y añadirla en tu lista de claves públicas, tan solo tienes que hacer doble clic en el fichero .asc o, dentro de Seahorse, hacer clic en Archivo » Importar… y seleccionar el archivo de clave pública.
Una vez tengas alguna clave pública del destinatario en el apartado de «Otras claves» ya podemos compartir mensajes encriptados con esa persona. El proceso es muy sencillo, aquí van las capturas de cómo cifrar un archivo paso a paso:
Ya está! Ahora solo tenemos que enviar el archivo encriptado por correo electrónico, mensajería instantánea o como queramos y nos hemos asegurado de que sólo el destinatario podrá descifrarlo. Si el fichero sufre alguna modificación durante el envío -malintencionadamente o no-, quedará corrupto y no podrá ser devuelto a su estado original (no podrá ser descifrado), por lo tanto se cumple el servicio de integridad. Si además de cifrarlo, hemos optado por firmarlo, el destinatario tendrá la certeza de que sólo quien lo envía ha podido ser el remitente, así que también se cumple el servicio de autenticación. Y desde luego nadie podrá conocer el contenido, salvo Albert en este caso, así que se cumple también el servicio de confidencialidad.
Por cierto, aquí dejo el enlace a mi clave pública por si alguien necesita enviarme algo realmente confidencial.