« GnuPG : Créer la paire de clé gpg parfaite : clé maitre, subkeys et support smartcard (yubikey) » : différence entre les versions

Aller à la navigation Aller à la recherche
(23 versions intermédiaires par le même utilisateur non affichées)
Ligne 183 : Ligne 183 :
<pre>
<pre>
$ gpg --list-keys 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951
$ gpg --list-keys 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951
pub  rsa8192/99FD9BFE6F9B8951 2017-07-07 [C]
pub  rsa8192/0x99FD9BFE6F9B8951 2017-07-07 [C]
      Key fingerprint = 7EBA 8211 BFF5 31EE 59E2 5CBD 99FD 9BFE 6F9B 8951
uid                [ultimate] testuser <testuser@domain.tld>
uid                [ultimate] testuser <testuser@domain.tld>
sub  rsa4096/0B4D29418F92CF1D 2017-07-07 [S]
sub  rsa4096/0x0B4D29418F92CF1D 2017-07-07 [S]
sub  rsa4096/91B74A739D6A4242 2017-07-07 [E]
sub  rsa4096/0x91B74A739D6A4242 2017-07-07 [E]
sub  rsa4096/256A58F8E560F1D7 2017-07-07 [A]
sub  rsa4096/0x256A58F8E560F1D7 2017-07-07 [A]
</pre>
</pre>


<pre>
<pre>
$ gpg --list-secret-keys 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951
$ gpg --list-secret-keys 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951
sec  rsa8192/99FD9BFE6F9B8951 2017-07-07 [C]
sec  rsa8192/0x99FD9BFE6F9B8951 2017-07-07 [C]
      Key fingerprint = 7EBA 8211 BFF5 31EE 59E2 5CBD 99FD 9BFE 6F9B 8951
uid                [ultimate] testuser <testuser@domain.tld>
uid                [ultimate] testuser <testuser@domain.tld>
ssb  rsa4096/0B4D29418F92CF1D 2017-07-07 [S]
ssb  rsa4096/0x0B4D29418F92CF1D 2017-07-07 [S]
ssb  rsa4096/91B74A739D6A4242 2017-07-07 [E]
ssb  rsa4096/0x91B74A739D6A4242 2017-07-07 [E]
ssb  rsa4096/256A58F8E560F1D7 2017-07-07 [A]
ssb  rsa4096/0x256A58F8E560F1D7 2017-07-07 [A]
</pre>
</pre>
Vous pouvez vérifier l'état de votre installation au moyen du paquet <code>hopenpgp-tools</code> :
<pre>gpg --export 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951 | hokey lint</pre>


=Générer un certificat de révocation pour la clé maître=
=Générer un certificat de révocation pour la clé maître=


Créez un certificat de révocation pour votre clé maître. Utilisez le flag <code> 1 = Key has been compromised</code> comme raison de révocation, et entrez un descriptif supplémentaire spécifiant que ce certificat de révocation a été créé lors de la création de la clé. Terminez par une ligne vide.
Créez un certificat de révocation pour votre clé maître. Utilisez le flag <code> 1 = Key has been compromised</code> comme raison de révocation, et entrez un descriptif supplémentaire spécifiant que ce certificat de révocation a été créé lors de la création de la clé. Terminez par une ligne vide.
<pre>gpg --output /media/veracrypt1/GNUPG_HOME/KEY_BACKUP/masterkey.gpg-revocation-certificate --gen-revoke 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951
<pre>gpg --output /media/veracrypt1/GNUPG_HOME/KEY_BACKUP/masterkey.gpg-revocation-certificate.key --gen-revoke 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951
Decision : 1 = Key has been compromised
Decision : 1 = Key has been compromised
> This revocation certificate was generated when the key was created.
> This revocation certificate was generated when the key was created.
Ligne 213 : Ligne 218 :


* Sauvegarde des clés privés :
* Sauvegarde des clés privés :
<pre>gpg --output /media/veracrypt1/GNUPG_HOME/KEY_BACKUP/masterkey_and_subkey_$(date +%Y%m%d).priv.gpg --export-secret-keys --armor 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951</pre>
<pre>gpg --output /media/veracrypt1/GNUPG_HOME/KEY_BACKUP/masterkey_and_subkey_$(date +%Y%m%d).priv.key --armor --export-secret-keys 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951</pre>
<pre>gpg --export-secret-subkeys --armor 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951 > /media/veracrypt1/GNUPG_HOME/KEY_BACKUP/subkey_only_$(date +%Y%m%d).priv.gpg</pre>
<pre>gpg --output /media/veracrypt1/GNUPG_HOME/KEY_BACKUP/subkey_only_$(date +%Y%m%d).priv.key --armor --export-secret-subkeys 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951</pre>


* Sauvegarde des clés publiques :
* Sauvegarde des clés publiques :
<pre>gpg --output /media/veracrypt1/GNUPG_HOME/KEY_BACKUP/masterkey_and_subkey_$(date +%Y%m%d).pub.gpg --export --armor 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951</pre>
<pre>gpg --output /media/veracrypt1/GNUPG_HOME/KEY_BACKUP/masterkey_and_subkey_$(date +%Y%m%d).pub.gpg --armor --export 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951</pre>
 
=Publication de la clé maîtres et des sous-clés sur les keyservers=
 
<pre>
gpg --keyserver hkp://keyserver.ubuntu.com --send-key 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951
gpg --keyserver hkp://pool.sks-keyservers.net --send-key 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951
gpg --keyserver hkp://keys.openpgp.org --send-key 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951
gpg --keyserver hkp://pgp.mit.edu --send-key 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951
</pre>
 
Vous pouvez aussi la publier localement sur votre site en WKD : [[GnuPG Web Key Directory : partage de clés gpg par le web]]


=Utilisation de votre clé=
=Utilisation de votre clé=


==Directement sur votre machine (sans smartcard)==
==Directement sur votre machine (sans smartcard)==
Sortez de votre trousseau maître :
<pre>
unset GNUPGHOME
gpgconf --kill gpg-agent
</pre>
Attention, désormais vous travaillerez dans le trousseau principal votre machine (<code>/home/USER/.gnupg/</code>)


Importez les subkeys dans votre trousseau gpg local :
Importez les subkeys dans votre trousseau gpg local :
<pre>gpg --import /media/veracrypt1/GNUPG_HOME/KEY_BACKUP/subkey_only.priv.gpg</pre>
<pre>gpg --import /media/veracrypt1/GNUPG_HOME/KEY_BACKUP/subkey_only_$(date +%Y%m%d).priv.key</pre>


<br>
<br>
Ligne 233 : Ligne 257 :
<pre>gpg --edit-key 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951</pre>
<pre>gpg --edit-key 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951</pre>
<pre>
<pre>
trust
gpg> trust
5
5
save
gpg> save
</pre>
</pre>


Ligne 253 : Ligne 277 :
==Avec une smartcard==
==Avec une smartcard==


Branchez votre smartcard puis editez la avec gpg :
Dans ce cas, nous continuons à travailler sur le trousseau maître (variable <code>GNUPGHOME</code>).
<pre>gpg --card-edit</pre>
Branchez votre smartcard, éditez la avec gpg et activez les commandes admin :
<pre>
gpg --card-edit
gpg> admin
</pre>


Configurez ces différentes options :
Configurez ces différentes options :
<pre>
<pre>
admin          (active les commandes admin)
passwd          (changer le pin, admin pin et reset code)
passwd          (changer le pin, admin pin et reset key)
                 (le pin sera demandé a chaque opération avec la clé)
                 (le pin sera demandé a chaque opération avec la clé)
name            (définir son nom)
name            (définir son nom)
Ligne 267 : Ligne 294 :
</pre>
</pre>


Attention, modifiez puis sauvegardez bien les différents pins.
Le PIN par défaut est <code>123456</code> tandis que le ADmin PIN et <code>12345678</code>. Les PINs peuvent être définis jusqu'à 127 caractères ASCII pour une longueur minimale de 6 caractères (PIN) et 8 caractères (Admin PIN).
* Le pin par défaut sera demandé pour les opérations de chiffrement, signautre ou authentification avec la yubikey. Il se bloque après 3 essais infructueux.
 
* Le admin pin permet de débloquer le pin et de modifier les clés stockés.
Attention, modifiez puis sauvegardez bien les différents PINs :
* La reset key permet de remettre à zero la smartcard.
* Le Pin sera demandé pour les opérations de chiffrement, signature ou authentification avec la smartcard. Il se bloque après 3 essais infructueux.
* Le Admin PIN permet de débloquer le pin, le modifier, et modifier les clés stockés.
* Le Reset code permet de remettre à zéro le compteur du PIN principal si vous avez fait 3 essais infructueux.


<br>Créez un backup du dossier contenant votre trousseau maître (car lors du transfert des subkeys vers la smartcard, les privkey sont effacés du trousseau gpg..) :
<br>Créez un backup du dossier contenant votre trousseau maître (car lors du transfert des subkeys vers la smartcard, les privkey sont effacés du trousseau gpg..) :
Ligne 280 : Ligne 309 :


Ouvrez votre clé maître :
Ouvrez votre clé maître :
<pre>gpg --home /media/veracrypt1/GNUPG_HOME/HOME/ --edit 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951</pre>
<pre>gpg --edit-key 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951</pre>


Afin de transférer chaque sous-clé sur la smartcard, il faut activer la selection avec la commande <code>toggle</code> puis les sélectionner une à une avec la commande <code>key <NUMÉRO></code>. La clé sélectionné s'affichera suivi d'une étoile (*). Pour la transférer, on lance la commande <code>keytocard</code> puis on sélectionne le bon slot sur la smartcard. Pour savoir quelle clé doit aller dans quel slot, aidez vous de la ligne <code>usage</code> : S pour Signature, E pour Encryption, A pour Authentification.
Afin de transférer chaque sous-clé sur la smartcard, il faut activer la sélection avec la commande <code>toggle</code> puis les sélectionner une à une avec la commande <code>key <NUMÉRO></code>. La clé sélectionné s'affichera suivi d'une étoile (*). Pour la transférer, on lance la commande <code>keytocard</code> puis on sélectionne le bon slot sur la smartcard. Pour savoir quelle clé doit aller dans quel slot, aidez vous de la ligne <code>usage</code> : S pour Signature, E pour Encryption, A pour Authentification.


===Transfert de la clé de signature===
===Transfert de la clé de signature===
Ligne 415 : Ligne 444 :


gpg> key 3              (desélectionne la clé)
gpg> key 3              (desélectionne la clé)
gpg> save
</pre>
</pre>
===Finalisation du transfert===
<pre>gpg> save</pre>


===Vérification après transfert===
===Vérification après transfert===


La commande suivante :
La commande suivante :
<pre>gpg --home /media/veracrypt1/GNUPG_HOME/HOME/ --list-secret-keys</pre>  
<pre>gpg --list-secret-keys</pre>  


Devrait retourner :
Devrait retourner quelque chose ressemblant à :
<pre>
<pre>
sec  rsa8192 2017-07-07 [C]
sec  rsa8192 2017-07-07 [C]
Ligne 440 : Ligne 472 :
<pre>
<pre>
cd /media/veracrypt1/GNUPG_HOME/
cd /media/veracrypt1/GNUPG_HOME/
srm -r HOME/
srm -vr HOME/
tar -xf HOME_$(date +%Y%m%d).tar
tar -xf HOME_$(date +%Y%m%d).tar
cd
cd
Ligne 448 : Ligne 480 :


Exportez votre clé publique depuis votre trousseau maître :
Exportez votre clé publique depuis votre trousseau maître :
<pre>gpg --home /media/veracrypt1/GNUPG_HOME/HOME/ --armor --export 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951 > ~/gpg_pubkey.gpg</pre>
<pre>gpg --armor --export 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951 > ~/gpg_pubkey.gpg</pre>


<br>
<br>
Ligne 454 : Ligne 486 :
<br><br>
<br><br>


Puis importez la dans le trousseau par défaut de gpg  
Arrêtez de travailler dans votre trousseau maître :
<pre>gpg --import < ~/gpg_pubkey.gpg</pre>
<pre>
unset GNUPGHOME
gpgconf --kill gpg-agent
</pre>
 
Puis importez votre clé publique dans le trousseau par défaut de gpg. Il est nécessaire de lancer un card-status pour que gpg détecte les clés privées.
<pre>
gpg --import < ~/gpg_pubkey.gpg
gpg --card-status
</pre>


Accordez une confiance totale à votre clé :
Accordez une confiance totale à votre clé :
<pre>gpg --edit-key 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951</pre>
<pre>gpg --edit-key 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951</pre>
<pre>
<pre>
trust
gpg> trust
5
5
save
gpg> save
</pre>
</pre>


Ligne 478 : Ligne 519 :


Notez encore une foi le symbole dièse (<code>#</code>) qui signifie que la clé privée maître n'est pas disponible dans ce trousseau, et le symbole <code>></code> qui signifie que les sous-clés privés sont stockés sur une smartcard.
Notez encore une foi le symbole dièse (<code>#</code>) qui signifie que la clé privée maître n'est pas disponible dans ce trousseau, et le symbole <code>></code> qui signifie que les sous-clés privés sont stockés sur une smartcard.
==Yubikey: Imposer de toucher la yubikey pour les opérations openpgp==
Par défaut, lors d'une première opération avec le smartcard, le PIN vous sera demandé. Le PIN sera ensuite mis en cache dans la yubikey (pas dans gpg-agent), et le seul moyen de vider le cache est de débrancher/rebrancher la smartcard. Vous pouvez ajouter une coucher de sécurité en imposant de touche la yubikey afin de valider l'opération (ainsi, une action physique est nécessaire).<br><br>
Cela n'est possible que depuis les Yubikeys 4.<br>
Pour chaque type de clé, vous pouvez définir 4 statut :
<pre>
  Off (default)  No touch required
  On              Touch required
  Fixed          Touch required, can't be disabled without a full reset
  Cached          Touch required, cached for 15s after use
  Cached-Fixed    Touch required, cached for 15s after use, can't be disabled
                  without a full reset
</pre>
Attention, notez bien que si vous activez le mode <code>Cached-Fixed</code> ou <code>Fixed</code>, vous ne pourrez plus modifier cette configuration sans remettre à zéro totalement la smardcard de la yubikey !
<pre>
ykman openpgp keys set-touch sig on
ykman openpgp keys set-touch enc on
ykman openpgp keys set-touch aut on
ykman openpgp keys set-touch att on
</pre>
Sous linux, vous pouvez installer https://github.com/maximbaz/yubikey-touch-detector pour être averti visuellement de la nécessité de toucher la yubikey
Note : il semblerait que killer l'agent (<code>gpgconf --kill gpg-agent</code>) ou le smartcard daemon (<code>gpgconf --kill scdaemon</code>) permette à GPG de redemander le pin. Néanmoins dans les faits cela provoque uniquement une désynchronisation entre l'état de l'applet GPG de la yubikey (qui est déverrouillé) et l'état connu par gpg-agent (qui pense l'applet verrouillé). Pour preuve, constatez que vous pouvez taper autant de pin erroné que souhaité (normalement après 3 erreurs, le PIN est bloqué)


=En pratique=
=En pratique=
4 203

modifications

Menu de navigation