Hace poco tiempo quise cifrar unos archivos y carpetas para que nadie pudiera ver el contenido en caso de que se hicieran con dichos archivos y descubrí que el proceso para cifrar y descifrar utilizando claves PGP es extremadamente seguro y sencillo de utilizar.

En este post explico como crear las claves PGP para cifrar y descifrar archivos utilizando GnuPG (más conocido como gpg). Todo el proceso se hace desde el terminal tanto en linux como en windows pero si te resulta más cómodo utilizar una interfaz gráfica puedes instalar seahorse en linux (GnuPG para windows ya incluye una interfaz gráfica).

Instalar GnuPG

Ubuntu-logoEn Ubuntu

[usuario@equipo ~]$ sudo apt-get install gnupg gpg-crypter

fedora-logoEn Fedora

[usuario@equipo ~]$ su -c 'yum install gnupg gpg-crypter'

archlinux-logoEn Arch Linux

[usuario@equipo ~]$ sudo pacman -S gnupg gpg-crypter

windows8-logoEn Windows

  1. Descargamos gpg4win de la página oficial
  2. Ejecutamos el instalador
  3. Seguimos las instrucciones

Crear y eliminar las claves

Crear las claves

Para generar el par de claves necesarias abrimos un terminal (o una consola si usas windows) y escribimos lo siguiente:

[usuario@equipo ~]$ gpg --gen-key

Inmediatamente después de pulsar Enter nos irán apareciendo preguntas para identificar las claves, el algoritmo a utilizar, la longitud de la clave y finalmente introducir la contraseña. Después de introducir esta información se recogerán datos aleatorios y se generarán las claves.

Cuando introducimos el correo electrónico conviene que sea uno existente puesto que se utiliza para firmar el identificador de usuario. Además no deberíamos cambiarlo posteriormente o el correo de la clave no coincidirá.
Además de generar la clave pública y la privada también es muy recomendable crear un certificado de revocación y almacenarlo en un lugar seguro.

Eliminar las claves

Para eliminar las claves completamente tenemos que eliminar primero la clave secreta y después la clave pública.

[usuario@equipo ~]$ gpg --delete-secret-key correo@delaclave.com
[usuario@equipo ~]$ gpg --delete-keys correo@delaclave.com

Si tenemos una copia de nuestra clave pública en un servidor de claves públicas deberemos enviar el certificado de revocación para que los usuarios de la clave sepan que ya no es válida.

Revocar las claves

Generar el certificado de revocación

El certificado de revocación nos permite revocar las claves y la única manera de crear este certificado es mediante la clave privada. Esto hace que solo el emisor de la clave pueda revocar las claves.

Para generar el certificado:

[usuario@equipo ~]$ gpg --gen-revoke correo@delaclave.com

Revocar las claves

Para revocar las claves localmente lo único que debemos hacer es coger el certificado de revocación e importarlo.

[usuario@equipo ~]$ gpg --import clave-de-revocación.asc

Una vez que hemos revocado las claves localmente podemos enviar el certificado de revocación al servidor de claves públicas en el cual se encuentra la clave que hemos revocado.

[usuario@equipo ~]$ gpg --keyserver servidor --send correo@delaclave.com

Importar y exportar las claves

Exportar las claves

Para poder intercambiar archivos de forma segura tenemos que darle nuestra clave pública a la otra persona. Podemos exportar la clave y ponerla en nuestra página web, subirla a un servidor de claves públicas o hacérsela llegar al otro usuario con un pendrive o cualquier otro método que queramos.

La clave pública se exporta de la siguiente manera.

[usuario@equipo ~]$ gpg --export --armor correo@delaclave.com > miclave-publica.asc

También es buena idea exportar la clave privada para tener una copia de seguridad de esta clave. Al igual que el certificado de revocación, es muy importante almacenarla de forma segura para evitar comprometer la seguridad.

Exportamos la clave privada de la siguiente manera.

[usuario@equipo ~]$ gpg --export-secret-key --armor correo@delaclave.com > miclave-privada.asc
La opción --armor (-a) muestra la clave en caracteres ASCII. Es posible exportar las claves en un archivo binario utilizando la opción --output (-o).

Importar claves

Cuándo queramos añadir una clave a nuestro llavero (base de datos de las claves) tendremos que importarlas de la siguiente manera.

[usuario@equipo ~]$ gpg --import miclave.asc

De esta forma ya estamos preparados para verificar firmas y cifrar archivos o correos para enviar al usuario de la clave privada.

Otras opciones de administración de las claves

Listar las claves del llavero (base de datos):

[usuario@equipo ~]$ gpg --list-keys

Ver la firma de cada clave:

[usuario@equipo ~]$ gpg --list-sigs

Listar las claves secretas:

[usuario@equipo ~]$ gpg --list-secret-keys

Editar la una calve para cambiar la fecha de caducidad, añadir una huella digital o firmar la clave:

[usuario@equipo ~]$ gpg --edit-key correo@delaclave.com

Cifrado de archivos con las claves PGP

Una vez que ya tenemos las claves PGP creadas podemos empezar a usarlas para cifrar nuestros archivos.

Antes voy a comentar un punto importante para aquellos que no tengan muchos conocimientos sobre estas claves.

Cuándo ciframos nuestros archivos lo hacemos con la clave pública que poseemos y para descifrarlos necesitamos nuestra clave privada. Esto quiere decir que si le pasamos un archivo cifrado con nuestra clave pública a un amigo, éste no podrá descifrarlo porque no posee la clave privada correcta para llevar a cabo el descifrado.

En este caso lo que se hace es intercambiar las claves públicas. Tu le das a tu amigo tu clave pública, de esta manera cuándo tu amigo quiera darte un archivo cifrado utilizará esa clave pública para cifrarlo. Después te envía el archivo y tu mediante la clave privada descifras el archivo.

Otra función de estas claves es la firma electrónica. Tu firmas un archivo o correo con tu clave privada y se lo envías a un destinatario. El receptor del mensaje comprobará utilizando tu clave pública que la firma de ese mensaje o archivo es realmente tuyo.

Ahora que ya sabemos cómo se hace para intercambiar archivos de forma segura veamos como se debe hacer para cifrar y descifrar archivos.

Cifrar archivos con las claves PGP

En la siguiente imagen se puede ver un esquema del proceso de cifrado explicado anteriormente.

Cifrado con PGP

El comando para cifrar archivos con una clave PGP:

[usuario@equipo ~]$ gpg --encrypt --recipient correo@delaclave.com archivo.txt

Descifrar archivos con las claves PGP

En la siguiente imagen se puede ver un esquema del proceso de descifrado explicado anteriormente.

Descifrado PGP

El comando para descifrar archivos con una clave PGP:

[usuario@equipo ~]$ gpg -d archivo.txt.gpg > archivo.txt
Recuerda que primero hay que importar la clave privada para poder descifrar el archivo