En esta serie veremos diversos elementos relacionados con GnuPG y Yubikey como Smartcard. Los post son específicos para Yubikey 4, pero podrían funcionar con Yubikey-Neo con algunas modificaciones.
Estos ejemplos están probados en:
- Fedora 26
- GnuPG 2.2.1
- Yubikey 4 (v2.1)
Verificar la Yubikey
Para los siguientes ejemplos se usará GnuPG2 ya que éste soporta llaves RSA de 4096. Comenzaremos verificando si se detecta la yubikey correctamente:
gpg2 --card-status
Deberíamos obtener una salida como la siguiente:
Reader ...........: Yubico Yubikey 4 OTP U2F CCID 00 00
Application ID ...: D2760X0XXXX10X0100060X2135710000
Version ..........: 2.1
Manufacturer .....: Yubico
Serial number ....: 01211511
Name of cardholder: [no establecido]
Language prefs ...: [no establecido]
Sex ..............: no especificado
URL of public key : [no establecido]
Login data .......: [no establecido]
Signature PIN ....: no forzado
Key attributes ...: rsa2048 rsa2048 rsa2048
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 0 3
Signature counter : 0
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]
General key info..: [none]
En caso que no nos arroje algo así, deberemos probar en otro puerto USB o deteniendo el PCSC:
sudo systemctl stop pcscd
Luego intentar nuevamente con el primer comando.
Creación de la llave
Yubikey 4 soporta llaves RSA (2048, 4096) y ECC (p256, p384). Existen 2 formas de crear la llave:
-
Crear la llave en la yubikey: es la forma más segura ya que la llave privada nunca deja el dispositivo USB. Se crea en ella y es imposible exportarla. Su contra está en que no existe forma de crear un respaldo.
-
Crear la llave en el computador y cargarla a la yubikey: este método es más flexible. Permite crear un respaldo de la llave privada o usar una llave ya creada previamente.
Creación de la llave en el computador (o usar una llave existente)
En este método debemos contar con una llave RSA. Podemos usar una creada previamente o crear una nueva.
Creación de la llave
- Iniciamos la creación de la llave
gpg2 --expert --full-gen-key
-
Seleccionamos el tipo de llave:
Por favor seleccione tipo de clave deseado: (1) RSA y RSA (por defecto) (2) DSA y ElGamal (3) DSA (sólo firmar) (4) RSA (sólo firmar) (7) DSA (permite elegir capacidades) (8) RSA (permite elegir capacidades) (9) ECC and ECC (10) ECC (sign only) (11) ECC (set your own capabilities) (13) Existing key
Debemos elegir
RSA y RSA
-
Elegimos el tamaño de la llave y subllave (2048 o 4096)
- Elegimos la duración de la llave. Por defecto 0, sin caducar.
- Ingresamos nombre y apellido para la llave
- Ingresamos el correo asociado a la llave
- Ingresamos un comentario opcional
-
Nos da la opción de agregar un clave para proteger la llave. Seguir los consejos para generar entropía. Al finalizar nos saldrá el resumen:
claves pública y secreta creadas y firmadas. pub rsa2048 2017-11-13 [SC] E13AFFD9469092542791CB2535285AFCE0ED7F45 uid Juan Pérez <jp@example.com> sub rsa2048 2017-11-13 [E]
-
Agregamos las subllave, para ello ingresamos al modo edición:
gpg2 --expert --edit-key [email protected]
-
Ingresamos el comando
addkey
Elegimos
RSA (sólo firmar)
, indicamos el tamaño y la duración. -
Ingresamos el comando
addkey
Elegimos
RSA (permite elegir capacidades)
, debemos usar F, C, A para alternar la capacidad de la llave indicada enAcciones permitidas actualmente:
hasta que quede sóloAutentificación
. Una vez hecho, presionar S. Elegir tamaño y duración. -
Si necesitamos, podemos agregar otras identidades a la llave con el comando
adduid
. Nos solicitará nombre, apellido y correo. -
Guardamos los cambios con
save
-
Exportamos las llaves con:
gpg2 --armor --export-secret-keys jp@example.com > respaldo_secreto_gpg.key
Mantener dicho archivo bajo total cuidado.
Pasar la llave GnuPG a la yubikey
- Insertamos la yubikey en el USB y validamos si es detectada (paso ya indicamos arriba)
-
Entramos en modo edición
gpg2 --expert --edit-key jp@example.com ... ... sec rsa2048/BA1D54E27D357BCD ccreado: 2017-11-13 caduca: nunca uso: SC confianza: absoluta validez: absoluta ssb rsa2048/F1C1D21AB68CC384 creado: 2017-11-13 caduca: nunca uso: E ssb rsa2048/8A9A91B693E1E57E creado: 2017-11-13 caduca: nunca uso: S ssb rsa2048/C8C3802A62992F34 creado: 2017-11-13 caduca: nunca uso: A
-
Ingresamos comando
key 1
y veremos que se selecciona la primera entrada ssb, quedandossb*
y que en este caso corresponde auso: E
- Ejecutamos comando
keytocard
, debemos elegir la opciónClave de cifrado
. Con ello se pará la subllave a la yubikey. - Ingresamos comando
key 1
seguido dekey 2
. Deberá estar conssb*
solo la subllave que indicauso: S
- Ejecutamos comando
keytocard
, debemos elegirClave de firmado
- Ingresamos comando
key 2
seguido dekey 3
. Deberá estar conssb*
solo la subllave que indicauso: A
- Ejecutamos comando
keytocard
- Finalmente guardamos los cambios con
save
Debemos exportar la llave pública para poder usar la yubikey en otros computadores (Explicado más abajo).
Creación de la llave en la yubikey
- Insertamos la yubikey en el USB y validamos si es detectada (paso ya indicamos arriba)
-
Edición de smartcard
gpg2 --card-edit ... ... gpg/tarjeta>
-
Pasamos al modo admin
gpg/tarjeta> admin
e ingresamos el comando para generar la llavegenerate
Te consultará si quieres guardar una copia externa. Indica no (n) ya que ese respaldo no sirve.
Te solicitará el PIN, por defecto en la yubikey
123456
-
Elegir el tamaño de la llave de firmado. Por defecto es 2048 pero puedes ampliarla hasta 4096 (aplica también para los puntos 5 y 6)
Te solicitará el PIN de admin, por defecto en la yubikey es
12345678
-
Elegir el tamaño de la llave de cifrado
- Elegir el tamaño de la llave de autenticación
-
Elegir la duración de la llave. Por defecto es 0. Las opciones son:
0 = la clave nunca caduca <n> = la clave caduca en n días <n>w = la clave caduca en n semanas <n>m = la clave caduca en n meses <n>y = la clave caduca en n años
Confirmamos la duración.
-
Ingresamos el nombre y apellido para la llave
- Ingresamos el correo asociado a la llave
- Podemos agregar algún comentario para la llave
- Validamos los datos en el resumen que se presenta y finalmente confirmamos
- Ingresamos nuevamente PIN de admin
Con esto ya tendremos la yubikey con una llave RSA, la cual es accedida por GnuPG como si fuera un Smartcard.
Debemos exportar la llave pública para poder usar la yubikey en otros computadores (Explicado más abajo).
Usar la yubikey en otro computador
Para poder usar la yubikey en otro equipo debemos contar con la parte pública (explicado arriba).
-
Importar la llave pública:
gpg2 --import archivo_llave_publica.gpg
-
Insertar la yubikey y ejecutar
gpg2 --card-edit
, una vez en modo edición usamos el comandofetch
- Validamos que esté disponible la llave
sec> rsa4096 2017-11-13 [SC] [caduca: 2019-11-13] F789EB5B1A5F55DF7F89D2450B1E0D6865FDE183 Número de serie de la tarjeta = 0006 05213571 uid [ absoluta ] Juan Pérez <juan@example.com> ssb> rsa2048 2017-11-13 [A] [caduca: 2019-11-13] ssb> rsa2048 2017-11-13 [E] [caduca: 2019-11-13]