Generación de claves OpenPGP con copia de seguridad#

(Nitrokey 3 - Linux)

Las siguientes instrucciones explican la generación de claves OpenPGP y cómo copiarlas en la Nitrokey. Este método tiene la ventaja de proporcionar una copia de seguridad de las claves en caso de perder o romper la Nitrokey. Las instrucciones se basan en la interfaz de línea de comandos de GnuPG. Por lo tanto, necesita tener GnuPG instalado en su sistema. La versión más reciente de GnuPG para Windows puede encontrarse aquí y la versión más reciente para MacOS puede encontrarse aquí. Los usuarios de sistemas Linux pueden instalar GnuPG con la ayuda del gestor de paquetes.

Generación de claves#

Al principio, necesitas generar una clave localmente. Puede decidir qué atributos de la clave utilizar y, lo que es más importante, puede exportar la clave y guardarla en algún lugar por si necesita restaurarla.

Clave principal y subclave de cifrado#

Podemos utilizar el comando gpg --full-generate-key --expert para iniciar una generación de clave guiada con todas las opciones posibles. Puedes elegir el tipo de clave (normalmente RSA (1) o ECC (9)), la longitud de la clave y otros atributos. La siguiente salida es un simple ejemplo, puedes elegir otros valores.

> gpg --full-generate-key --expert
gpg (GnuPG) 2.2.10; Copyright (C) 2018 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
   (7) DSA (set your own capabilities)
   (8) RSA (set your own capabilities)
   (9) ECC and ECC
  (10) ECC (sign only)
  (11) ECC (set your own capabilities)
  (13) Existing key
Your selection? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want for the subkey? (2048)
Requested keysize is 2048 bits
Please specify how long the key should be valid.
         0 = key does not expire
        = key expires in n days
      w = key expires in n weeks
      m = key expires in n months
      y = key expires in n years
Key is valid for? (0)
Key does not expire at all
Is this correct? (y/N) y

GnuPG needs to construct a user ID to identify your key.

Real name: Jane Doe
Email address: jane@example.com
Comment:
You selected this USER-ID:
    "Jane Doe "

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: key 0EFFB0704391497C marked as ultimately trusted
gpg: revocation certificate stored as '/home/nitrokey//.gnupg/openpgp-revocs.d/9D12C91F6FC4CD6E10A1727A0EFFB0704391497C.rev'
public and secret key created and signed.

pub   rsa2048 2018-09-17 [SC]
      9D12C91F6FC4CD6E10A1727A0EFFB0704391497C
uid                      Jane Doe
sub   rsa2048 2018-09-17 [E]

Nota

Para más información sobre los algoritmos compatibles, consulte la página faq

Subclave para la autenticación#

Ahora tienes una clave principal con capacidad para firmar y certificar (marcada como [SC]) y una subclave para el cifrado (marcada como [E]). Es necesario tener otra subclave para los casos de uso en los que se necesita autenticación. Esta subclave se genera en el siguiente paso. Escribe gpg --edit-key --expert keyID para iniciar el proceso, mientras que «keyID» es el id de la clave o la dirección de correo electrónico utilizada durante la generación de la clave.

> gpg --edit-key --expert jane@example.com
gpg (GnuPG) 2.2.10; Copyright (C) 2018 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Secret key is available.

sec  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb  rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
[ultimate] (1). Jane Doe

gpg>

Ahora estás en el modo interactivo de GnuPG y puedes añadir una clave simplemente escribiendo addkey. Tienes que elegir la clave que quieres usar. Es crucial elegir «set your own capabilities», porque queremos tener la capacidad de «autentificar» que no está disponible de otra manera. Activamos la firma y el cifrado escribiendo s y e y activamos la autenticación escribiendo a.

gpg> addkey
Please select what kind of key you want:
   (3) DSA (sign only)
   (4) RSA (sign only)
   (5) Elgamal (encrypt only)
   (6) RSA (encrypt only)
   (7) DSA (set your own capabilities)
   (8) RSA (set your own capabilities)
  (10) ECC (sign only)
  (11) ECC (set your own capabilities)
  (12) ECC (encrypt only)
  (13) Existing key
Your selection? 8

Possible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions: Sign Encrypt

   (S) Toggle the sign capability
   (E) Toggle the encrypt capability
   (A) Toggle the authenticate capability
   (Q) Finished

Your selection? s

Possible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions: Encrypt

   (S) Toggle the sign capability
   (E) Toggle the encrypt capability
   (A) Toggle the authenticate capability
   (Q) Finished

Your selection? e

Possible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions:

   (S) Toggle the sign capability
   (E) Toggle the encrypt capability
   (A) Toggle the authenticate capability
   (Q) Finished

Your selection? a

Possible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions: Authenticate

   (S) Toggle the sign capability
   (E) Toggle the encrypt capability
   (A) Toggle the authenticate capability
   (Q) Finished

Your selection? q

Terminamos con q. Después tenemos que responder a las mismas preguntas que antes. Finalmente, tenemos un conjunto de claves listo para ser importado a nuestro dispositivo.

RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits
Please specify how long the key should be valid.
         0 = key does not expire
        = key expires in n days
      w = key expires in n weeks
      m = key expires in n months
      y = key expires in n years
Key is valid for? (0)
Key does not expire at all
Is this correct? (y/N) y
Really create? (y/N) y
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.

sec  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb  rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
ssb  rsa2048/61F186B8B0BBD5D5
     created: 2018-09-17  expires: never       usage: A
[ultimate] (1). Jane Doe

gpg> quit
Save changes? (y/N) y

Ahora es un buen momento para hacer una copia de seguridad de su clave. Por favor, mantenga esta copia de seguridad muy segura. Es una buena práctica no tener nunca esta clave en un ordenador normal que tenga conexión a Internet, para que la clave nunca se vea comprometida. Puedes crear una copia de seguridad con algo como:

> gpg --export-secret-keys jane@example.com > sec-key.asc

Clave de importación#

Tiene una llave principal y dos sub-llaves que pueden ser importadas a su Nitrokey. Antes de proceder, por favor, asegúrese de que realmente tiene una copia de seguridad de la clave, si la necesita. ¡El comando keytocard utilizado en los siguientes pasos borrará tu llave del disco!

Iniciamos el proceso accediendo de nuevo a la interfaz interactiva de GnuPG con gpg --edit-key --expert keyID, mientras que keyID es el id de la clave o la dirección de correo electrónico utilizada durante la generación de la clave.

> gpg --edit-key --expert jane@example.com
gpg (GnuPG) 2.2.10; Copyright (C) 2018 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Secret key is available.

sec  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb  rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
ssb  rsa2048/61F186B8B0BBD5D5
     created: 2018-09-17  expires: never       usage: A
[ultimate] (1). Jane Doe

gpg> keytocard
Really move the primary key? (y/N) y
Please select where to store the key:
   (1) Signature key
   (3) Authentication key
Your selection? 1

sec  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb  rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
ssb  rsa2048/61F186B8B0BBD5D5
     created: 2018-09-17  expires: never       usage: A
[ultimate] (1). Jane Doe

Acabamos de importar la clave principal a la tarjeta. Ahora procedemos con las dos subclaves. Escribimos clave 1 para seleccionar la subclave de encriptación y escribimos de nuevo keytocard y seleccionamos la ranura a utilizar.

gpg> key 1

sec  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb* rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
ssb  rsa2048/61F186B8B0BBD5D5
     created: 2018-09-17  expires: never       usage: A
[ultimate] (1). Jane Doe

gpg> keytocard
Please select where to store the key:
   (2) Encryption key
Your selection? 2

sec  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb* rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
ssb  rsa2048/61F186B8B0BBD5D5
     created: 2018-09-17  expires: never       usage: A
[ultimate] (1). Jane Doe

Ahora deseleccionamos la primera llave con key 1 y seleccionamos la segunda subclave con key 2 y la movemos también con keytocard. Después salimos y guardamos los cambios.

gpg> key 1

sec  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb  rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
ssb  rsa2048/61F186B8B0BBD5D5
     created: 2018-09-17  expires: never       usage: A
[ultimate] (1). Jane Doe

gpg> key 2

sec  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb  rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
ssb* rsa2048/61F186B8B0BBD5D5
     created: 2018-09-17  expires: never       usage: A
[ultimate] (1). Jane Doe

gpg> keytocard
Please select where to store the key:
   (3) Authentication key
Your selection? 3

sec  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb  rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
ssb* rsa2048/61F186B8B0BBD5D5
     created: 2018-09-17  expires: never       usage: A
[ultimate] (1). Jane Doe

gpg> quit
Save changes? (y/N) y

Sus llaves se han trasladado al Nitrokey y, por tanto, están aseguradas en el hardware. Enhorabuena.

Exportación de la clave pública y uso del servidor de claves#

Aunque puedes empezar a utilizar tu Nitrokey inmediatamente después de generar las claves en tu sistema, necesitas importar tu clave pública en cada sistema en el que quieras utilizar la Nitrokey. Así que para estar preparado tienes dos opciones: O bien guardas la clave pública en cualquier lugar y la utilizas en otro sistema o guardas la clave pública en una página web/servidor de claves.

Generación de un archivo de clave pública#

Para obtener un archivo simple de tu clave pública, puedes usar gpg --armor --export keyID > pubkey.asc. Utiliza la huella digital como «keyID» (mira gpg -K para obtenerla) o simplemente utiliza tu dirección de correo electrónico como identificador.

Puedes llevar este archivo contigo o enviarlo a quien quieras. Este archivo no es secreto en absoluto. Si quieres usar la Nitrokey en otro sistema, primero importa esta clave pública a través de gpg --import pubkey.asc y luego escribe gpg --card-status para que el sistema sepa dónde buscar esta clave. Eso es todo.

Carga de la clave pública#

Si no quieres llevar un archivo de claves públicas contigo, puedes subirlo a keyserver. Puedes hacerlo escribiendo gpg --keyserver search.keyserver.net --send-key keyID. Si estás usando otra máquina puedes simplemente importarlo usando gpg --keyserver search.keyserver.net --recv-key keyID.

Otra posibilidad es cambiar la configuración de la URL de tu tarjeta. Inicie gpg --card-edit de nuevo y establezca primero la URL donde se encuentra la clave (por ejemplo, en el servidor de claves o en su página web, etc.) a través del comando url. A partir de ahora puedes importar la llave en otro sistema simplemente utilizando el comando fetch dentro del entorno gpg --card-edit.