Génération de clés OpenPGP avec sauvegarde

Les instructions suivantes expliquent la génération des clés OpenPGP et la manière de les copier sur la Nitrokey. Cette méthode a l’avantage de fournir une sauvegarde des clés en cas de perte ou de casse de la Nitrokey. Les instructions sont basées sur l’interface de ligne de commande de GnuPG. Vous devez donc avoir installé GnuPG sur votre système. La version la plus récente de GnuPG pour Windows se trouve ici et la version la plus récente pour MacOS se trouve ici. Les utilisateurs de systèmes Linux sont invités à installer GnuPG avec l’aide du gestionnaire de paquets.

Génération de clés

Dans un premier temps, vous devez générer une clé localement. Vous pouvez décider des attributs de la clé à utiliser et, surtout, vous pouvez exporter la clé et la conserver quelque part, au cas où vous auriez besoin de la restaurer.

Clé principale et sous-clé de chiffrement

Nous pouvons utiliser la commande gpg --full-generate-key --expert pour lancer une génération de clé guidée avec toutes les options possibles. Vous pouvez choisir le type de clé (habituellement RSA (1) ou ECC (9)), la longueur de la clé et d’autres attributs. La sortie suivante est juste un exemple simple, vous pouvez choisir d’autres valeurs.

> 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]

Le tableau suivant illustre quel algorithme peut être utilisé sur quel dispositif, dans le cas où vous souhaitez utiliser différents attributs de clé.

Début Pro + Stockage Pro 2 + Stockage 2
rsa1024  
rsa2048
rsa3072  
rsa4096  
curve25519 (ECC)    
NIST (ECC)  
Brainpool (ECC)    
secp256k1    

Sous-clé pour l’authentification

Vous disposez maintenant d’une clé principale avec la capacité de signer et de certifier (marquée [SC]) et d’une sous-clé pour le cryptage (marquée [E]). Il est nécessaire d’avoir une autre sous-clé pour les cas d’utilisation dans lesquels l’authentification est nécessaire. Cette sous-clé est générée à l’étape suivante. Tapez gpg --edit-key --expert keyID pour lancer le processus, où « keyID » est soit l’identifiant de la clé, soit l’adresse email utilisée lors de la génération de la clé.

> 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>

Maintenant vous êtes dans le mode interactif de GnuPG et vous pouvez ajouter une clé en tapant simplement addkey. Vous devez choisir la clé que vous voulez utiliser. Il est crucial de choisir « set your own capabilities », car nous voulons avoir la capacité « authenticate » qui n’est pas disponible autrement. Nous basculons entre la signature et le cryptage en tapant s et e et nous activons l’authentification en tapant 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

On arrête avec « q ». Ensuite, nous devons répondre aux mêmes questions que précédemment. Enfin, nous avons un jeu de clés prêt à l’emploi que nous pouvons importer sur notre appareil.

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

C’est le bon moment pour sauvegarder votre clé. Veuillez garder cette sauvegarde en toute sécurité. La meilleure pratique consiste à ne jamais avoir cette clé sur un ordinateur ordinaire connecté à Internet, afin que la clé ne soit jamais compromise. Vous pouvez créer une sauvegarde avec quelque chose comme :

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

Importation de clés

Vous avez une clé principale et deux clés secondaires qui peuvent être importées dans votre Nitrokey. Avant de continuer, assure-toi que tu as bien une sauvegarde de la clé, si tu en as besoin. La commande keytocard utilisée dans les étapes suivantes va supprimer votre clé de votre disque !

Nous commençons le processus en accédant à nouveau à l’interface interactive de GnuPG avec gpg --edit-key --expert keyID, où keyID est soit l’identifiant de la clé, soit l’adresse email utilisée lors de la génération de la clé.

> 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

Nous venons d’importer la clé principale sur la carte. Maintenant nous procédons avec les deux sous-clés. Nous tapons key 1 pour sélectionner la sous-clé de cryptage et tapons keytocard à nouveau et sélectionnons le slot à utiliser.

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

Maintenant nous désélectionnons la première clé avec key 1 et sélectionnons la deuxième sous-clé avec key 2 et la déplaçons aussi avec keytocard. Ensuite, nous quittons et enregistrons les modifications.

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

Vos clés sont maintenant déplacées vers la Nitrokey et donc sécurisées dans le matériel. Félicitations !

Exportation de la clé publique et utilisation du serveur de clés

Bien que vous puissiez commencer à utiliser votre Nitrokey immédiatement après avoir généré les clés sur votre système, vous devez importer votre clé publique sur chaque système sur lequel vous souhaitez utiliser la Nitrokey. Pour être prêt, tu as donc deux options : Soit tu enregistres la clé publique où tu veux et tu l’utilises sur un autre système, soit tu enregistres la clé publique sur une page Web/un serveur de clés.

Génération d’un fichier de clé publique

Pour obtenir un simple fichier de votre clé publique, vous pouvez simplement utiliser gpg --armor --export keyID > pubkey.asc. Utilisez soit l’empreinte digitale comme « keyID » (regardez gpg -K pour l’obtenir) ou utilisez simplement votre adresse email comme identifiant.

Vous pouvez emporter ce fichier avec vous ou l’envoyer à qui vous voulez. Ce fichier n’est pas du tout secret. Si tu veux utiliser la Nitrokey sur un autre système, tu dois d’abord importer cette clé publique via gpg --import pubkey.asc et ensuite taper gpg --card-status pour que le système sache où chercher cette clé. C’est tout.

Téléchargement de la clé publique

Si vous ne voulez pas transporter un fichier de clé publique avec vous, vous pouvez le télécharger sur keyserver. Vous pouvez le faire en tapant gpg --keyserver search.keyserver.net --send-key keyID. Si vous utilisez une autre machine, vous pouvez simplement l’importer en utilisant gpg --keyserver search.keyserver.net --recv-key keyID.

Une autre possibilité est de changer le paramètre URL sur votre carte. Lancez à nouveau gpg --card-edit et définissez d’abord l’URL où se trouve la clef (par exemple sur le serveur de clefs ou sur votre page web, etc. A partir de maintenant, vous pouvez importer la clé sur un autre système en utilisant simplement la commande fetch dans l’environnement gpg --card-edit.