Cómo encriptar archivos con Yubikey y OpenPGP en Ubuntu

⚠️ Nota importante

Este artículo tiene más de un año. La tecnología evoluciona rápido, por lo que algunos contenidos o instrucciones pueden estar desactualizados. Recuerda buscar información reciente y actualizada.

YubiKey es una excelente herramienta con una multiplicidad de funciones de seguridad de gran utilidad para usuario principiantes y avanzados. Una de dichas funcionalidades es la capacidad de almacenar llaves criptográficas del estándar abierto y gratuito OpenPGP y cifrar archivos sensibles con estas. El proceso es relativamente sencillo y voy a tratar de utilizar la interfaz gráfica tanto como sea posible. Existen dos formas de lograr un objetivo similar. Es posible generar las llaves directamente en la YubiKey o generarlas en el ordenador y posteriormente exportarlas a la YubiKey. 

En el primer caso, se evita almacenar las llaves privadas en el ordenador por lo que estas no son susceptibles a malware y otro tipo de ataques que pueden desarrollarse a nivel local. La desventaja de esta opción es que si la YubiKey se extravía o daña por cualquier razón será absolutamente imposible recuperar la información encriptada (cifrada). En el segundo caso, las llaves son almacenadas inicialmente en el ordenador y se pueden respaldar por lo que en caso de pérdida de la YubiKey aún sería posible recuperar la información. La desventaja es que precisamente que hay que almacenar la llave privada en el ordenador. 

En este caso, voy a explicar como generar las llaves directamente en la YubiKey. Por esta razón no se puede enfatizar lo suficiente que si se pierde o daña la YubiKey no será posible recuperar los datos cifrados con ella. 

Preparación de Ubuntu

Antes de continuar es importante realizar la configuración básica de la YubiKey en Ubuntu (primer paso de mi tutorial).

En este caso, lo mejor es instalar todas las herramientas que podrían ser necesarias en algún punto. Para instalarlas recomiendo ejecutar el siguiente comando: 

sudo apt install seahorse-nautilus opensc-pkcs11 pcscd scdaemon gnupg2 pcsc-tools
  • seahorse-nautilus: permite encriptar archivos rápidamente desde el explorar de archivos usando interfaz gráfica.
  • pcscd, pcsc-tools y scdaemon: son necesarios para que Ubuntu detecte la YubiKey como Smart Card. 
  • gnupg2: para asegurarse utilizar una versión compatible. 
  • opensc-pksc11: no es del todo necesario para este tutorial pero podría ser de utilidad para firmar y autenticar usando OpenPGP.

Una vez instalados se debe conectar la YubiKey al ordenador y se ejecuta el siguiente comando con el propósito de verificar si la YubiKey está siendo identificada adecuadamente:

gpg --card-status

Si este comando genera un error o no presenta la información completa de la YubiKey (modelo, número de serie, llaves contenidas y demás información) será necesario seguir los pasos en caso de error. En caso contrario se continúa con la generación de las llaves criptográficas. 

SOLO EN CASO DE ERROR EN PASO ANTERIOR:

Se ejecuta el siguiente comando para que verificar que Ubuntu esté detectando correctamente la YubiKey:

pcsc_scan -n

Si se obtiene la información correcta de la llave se ejecuta el siguiente comando para asegurarse de usar una versión compatible/reciente de GnuPGP:

sudo ln -s /usr/bin/gpg2 /usr/local/bin/gpg

Se desconecta y vuelve a conectar la YubiKey y se vuelve a intentar con el comando:

pcsc_scan -n

Generación de llaves criptográficas

Para generar las llaves directamente en la YubiKey primero hay que insertar la YubiKey en un puerto USB y ejecutar el siguiente comando:

gpg --card-edit

Una vez en gpg/card> se ejecuta el comando:

admin

Después se ejecuta el comando:

generate

Se puede elegir realizar un respaldo de la llave priva pero no es un respaldo completo y no puede ser usado para recuperar información si se pierde la YubiKey. 

Se elige la fecha de caducidad de la llave (0 para dejar sin fecha de caducidad) y se confirma la fecha. 

Cuando lo solicite, es muy importante ingresar nombre, correo y opcionalmente algún comentario. Se revisan los cambios y se aceptan si están correctos. 

Cuando lo solicite el sistema, es necesario ingresar el PIN de administrador de OpenPGP de la YubiKey (no es el mismo que el administrator PIV de YubiKey). Si no has cambiado el PIN para OpenPGP o no tienes idea de cual es, es muy probable que este sea el predeterminado. El PIN de usuario predeterminado es 123456 y el PIN de administrador predeterminado es 12345678. Siempre es muy importante verificar cuál se está solicitando (la de usuario generalmente se solicita para el cifrado y la de administración para cambios en la configuración de la llave). Además, se recomienda cambiar estas claves y no dejar las predeterminadas; por seguridad (aunque de cualquier forma la llave privada no puede ser extraída, en teoría). 

Cifrado de archivos usando las llaves generadas

Se recomienda desconectar y volver a conectar la YubiKey antes de continuar. Al abrir Contraseñas y claves (o Seahorse) en Ubuntu es posible ver una llave personal PGP almacenada con el nombre utilizado en los pasos anteriores. Si esto es así, podemos utilizarla para encriptar o cifrar cualquier archivo. 

Para cifrar los archivos solo hay que hacer clic derecho en el explorador de archivos, hacer clic en Encriptar y elegir la llave creada:

Para cifrar el archivo es obligatorio ingresar el PIN de usuario cuando el sistema lo solicite. Es importante resaltar que los archivos pueden ser encriptados y desencriptados cuando la YubiKey está conectada al ordenador. 

Una vez cifrado se genera el archivo correspondiente con la extensión .pgp

Para desencriptar o descifrar los archivos en otro ordenador hay que seguir los siguientes pasos:

En primer lugar hay que ir  Contraseñas y claves en Ubuntu y seleccionar la llave criptográfica y exportarla (Archivo > Exportar). Una vez exportada debe ser importada (Archivo > Importar) en el ordenador donde se desea utilizar. En cualquier caso, es necesario conectar la YubiKey para poder cifrar o descifrar los archivos (en cualquiera de los ordenadores). El sistema solicita automáticamente el PIN de usuario y si la YubiKey no está conectada solicita que esta sea conectada a un puerto USB antes de continuar. 

El proceso si bien no es tan sencillo como idealmente lo debería ser, es posible para cualquier usuario con algunos conocimiento básicos de Linux. Si tienes alguna duda del proceso no dudes compartirla por medio de los comentarios. 

Fundador
Seguidor de Jesús. Escribo artículos en mi tiempo libre sobre temas de tecnología que me interesan.