4 231
modifications
(39 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 79 : | Ligne 79 : | ||
#Name-Comment: | #Name-Comment: | ||
Name-Email: testuser@domain.tld | Name-Email: testuser@domain.tld | ||
Expire-Date: | Expire-Date: 10y | ||
Passphrase: tmppassphrasepleaseedit | Passphrase: tmppassphrasepleaseedit | ||
# Do a commit here, so that we can later print "done" | # Do a commit here, so that we can later print "done" | ||
Ligne 87 : | Ligne 87 : | ||
</pre> | </pre> | ||
Notez qu'ici, notre clé maitre est configurée de manière à ne pouvoir réaliser que des opérations de certification d'autres clés (flag <code>C</code> ou <code>cert</code>) | Notez qu'ici, notre clé maitre est configurée de manière à ne pouvoir réaliser que des opérations de certification d'autres clés (flag <code>C</code> ou <code>cert</code>).<br> | ||
Notre clé maître est définie avec une expiration de 10 ans. Je vous conseil de toujours définir une date d'expiration à vos clés afin qu'elles expirent d'elles-mêmes si jamais vous la perdiez. Notez que la date d'expiration d'une clé gpg est modifiable a souhait, y compris après expiration, du moment que vous n'avez pas perdu la clé maître. | |||
Générez la clé maître dans le trousseau gpg maître que nous avons créé : | Générez la clé maître dans le trousseau gpg maître que nous avons créé : | ||
<pre>gpg --batch --gen-key --enable-large-rsa -a newkey</pre> | <pre>gpg --batch --gen-key --enable-large-rsa -a newkey</pre> | ||
Dans cet exemple, la clé | Dans cet exemple, la clé créée a l'identifiant <code>7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951</code>. | ||
==Ajout et modification des UIDs de la clé maître== | |||
Vous pouvez ajouter des <code>uid</code> à votre clé maître en utilisant la commande <code>adduid</code> du prompt gpg. Vous devez pour cela commencer par éditer votre clé maître : | Vous pouvez ajouter des <code>uid</code> à votre clé maître en utilisant la commande <code>adduid</code> du prompt gpg. Vous devez pour cela commencer par éditer votre clé maître : | ||
<pre>gpg --edit-key 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951</pre> | <pre>gpg --edit-key 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951</pre> | ||
Ligne 103 : | Ligne 105 : | ||
Si vous rencontrez un problème lors de la génération d'un uid, éditez la clé avec l'argument <code>--allow-freeform-uid</code> | Si vous rencontrez un problème lors de la génération d'un uid, éditez la clé avec l'argument <code>--allow-freeform-uid</code> | ||
Pour définir l'uid par défaut, ouvrez la clé avec <code>gpg --edit-key 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951</code>. Vous devriez voir la liste des uids ainsi qu'un numéro. Il faut sélectionner le numéro de l'uid souhaité avec <code>uid</code> puis le valide avec <code>primary</code> : | |||
<pre> | |||
gpg> uid 2 | |||
gpg> primary | |||
gpg> save | |||
</pre> | |||
=Facultatif: signer votre nouvelle clé avec votre ancienne clé (si vous en possédiez une)= | |||
Si vous possédez une précédente clé, et qu'elle est dans le même trousseau maître : | |||
<pre> | |||
gpg --default-key OLDKEYID --edit-key 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951 | |||
gpg> sign | |||
Really sign all user IDs? (y/N) y | |||
<vérifier les informations> | |||
Really sign? (y/N) y | |||
gpg> save | |||
</pre> | |||
Vous pouvez vérifier les signatures : | |||
<pre>gpg --check-signatures</pre> | |||
Ou voir la liste complète : | |||
<pre>gpg --list-signatures</pre> | |||
=Ajout des sous-clés (subkeys)= | =Ajout des sous-clés (subkeys)= | ||
Ligne 109 : | Ligne 137 : | ||
Pour commencer, nous allons créer une subkey de signature. Commencez par ouvrir votre clé maître : | Pour commencer, nous allons créer une subkey de signature. Commencez par ouvrir votre clé maître : | ||
<pre>gpg --edit-key 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951</pre> | <pre>gpg --expert --edit-key 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951</pre> | ||
Au prompt gpg, utilisez la commande <code>addkey</code>. Utilisez le type <code>RSA (sign only)</code>, la taille <code>4096</code> et éventuellement une date d'expiration (dans mon cas, | Au prompt gpg, utilisez la commande <code>addkey</code>. Utilisez le type <code>RSA (sign only)</code>, la taille <code>4096</code> et éventuellement une date d'expiration (dans mon cas, 1 an). Terminez en sauvegardant la clé (<code>save</code>) : | ||
<pre> | <pre> | ||
addkey | gpg> addkey | ||
(4) RSA (sign only) | (4) RSA (sign only) | ||
4096 | 4096 | ||
1y | |||
save | gpg> save | ||
</pre> | </pre> | ||
Ligne 123 : | Ligne 151 : | ||
Nous allons maintenant créer une subkey de chiffrement. Commencez par ouvrir votre clé maître : | Nous allons maintenant créer une subkey de chiffrement. Commencez par ouvrir votre clé maître : | ||
<pre>gpg --edit-key 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951</pre> | <pre>gpg --expert --edit-key 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951</pre> | ||
Au prompt gpg, utilisez la commande <code>addkey</code>. Utilisez le type <code>RSA (encrypt only)</code>, la taille <code>4096</code> et éventuellement une date d'expiration (dans mon cas, | Au prompt gpg, utilisez la commande <code>addkey</code>. Utilisez le type <code>RSA (encrypt only)</code>, la taille <code>4096</code> et éventuellement une date d'expiration (dans mon cas, 1 an). Terminez en sauvegardant la clé (<code>save</code>) : | ||
<pre> | <pre> | ||
addkey | gpg> addkey | ||
(6) RSA (encrypt only) | (6) RSA (encrypt only) | ||
4096 | 4096 | ||
1y | |||
save | gpg> save | ||
</pre> | </pre> | ||
==Clé d'authentification== | ==Clé d'authentification== | ||
Enfin, créons une subkey d'authentification | Enfin, créons une subkey d'authentification : | ||
<pre>gpg --expert --edit-key 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951</pre> | <pre>gpg --expert --edit-key 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951</pre> | ||
Au prompt gpg, utilisez la commande <code>addkey</code>. Utilisez le type <code>RSA (set your own capabilities)</code>, désactivez les flags de signature et de chiffrement, activez le flag d'authentification. Pour la taille, 4096 bits et éventuellement une date d'expiration (dans mon cas, | Au prompt gpg, utilisez la commande <code>addkey</code>. Utilisez le type <code>RSA (set your own capabilities)</code>, désactivez les flags de signature et de chiffrement, activez le flag d'authentification. Pour la taille, 4096 bits et éventuellement une date d'expiration (dans mon cas, 1 an). Terminez en sauvegardant la clé (<code>save</code>). Au prompt gpg on obtient : | ||
<pre> | <pre> | ||
addkey | gpg> addkey | ||
(8) RSA (set your own capabilities) | (8) RSA (set your own capabilities) | ||
(S) Toggle the sign capability (on désactive la signature activé par défaut) | (S) Toggle the sign capability (on désactive la signature activé par défaut) | ||
Ligne 147 : | Ligne 175 : | ||
(Q) Finished | (Q) Finished | ||
4096 | 4096 | ||
1y | |||
save | gpg> save | ||
</pre> | </pre> | ||
Ligne 155 : | Ligne 183 : | ||
<pre> | <pre> | ||
$ gpg --list-keys 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951 | $ gpg --list-keys 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951 | ||
pub rsa8192/ | 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/ | sub rsa4096/0x0B4D29418F92CF1D 2017-07-07 [S] | ||
sub rsa4096/ | sub rsa4096/0x91B74A739D6A4242 2017-07-07 [E] | ||
sub rsa4096/ | sub rsa4096/0x256A58F8E560F1D7 2017-07-07 [A] | ||
</pre> | </pre> | ||
<pre> | <pre> | ||
$ gpg --list-secret-keys 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951 | $ gpg --list-secret-keys 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951 | ||
sec rsa8192/ | 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/ | ssb rsa4096/0x0B4D29418F92CF1D 2017-07-07 [S] | ||
ssb rsa4096/ | ssb rsa4096/0x91B74A739D6A4242 2017-07-07 [E] | ||
ssb rsa4096/ | 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> | |||
<pre>gpg -- | |||
=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 189 : | 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. | <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 -- | <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 -- | <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/ | <pre>gpg --import /media/veracrypt1/GNUPG_HOME/KEY_BACKUP/subkey_only_$(date +%Y%m%d).priv.key</pre> | ||
<br> | <br> | ||
Ligne 209 : | 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 229 : | Ligne 277 : | ||
==Avec une smartcard== | ==Avec une smartcard== | ||
Branchez votre smartcard | 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> | ||
passwd (changer le pin, admin pin et reset code) | |||
passwd (changer le pin, admin pin et reset | |||
(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 243 : | Ligne 294 : | ||
</pre> | </pre> | ||
Attention, modifiez puis sauvegardez bien les différents | 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 | |||
* Le | Attention, modifiez puis sauvegardez bien les différents PINs : | ||
* | * 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 256 : | Ligne 309 : | ||
Ouvrez votre clé maître : | Ouvrez votre clé maître : | ||
<pre>gpg -- | <pre>gpg --edit-key 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951</pre> | ||
Afin de transférer chaque sous-clé sur la smartcard, il faut activer la | 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 391 : | Ligne 444 : | ||
gpg> key 3 (desélectionne la clé) | gpg> key 3 (desélectionne la clé) | ||
</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 | <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 416 : | Ligne 472 : | ||
<pre> | <pre> | ||
cd /media/veracrypt1/GNUPG_HOME/ | cd /media/veracrypt1/GNUPG_HOME/ | ||
srm - | srm -vr HOME/ | ||
tar -xf HOME_$(date +%Y%m%d).tar | tar -xf HOME_$(date +%Y%m%d).tar | ||
cd | cd | ||
Ligne 424 : | Ligne 480 : | ||
Exportez votre clé publique depuis votre trousseau maître : | Exportez votre clé publique depuis votre trousseau maître : | ||
<pre>gpg | <pre>gpg --armor --export 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951 > ~/gpg_pubkey.gpg</pre> | ||
<br> | <br> | ||
Ligne 430 : | Ligne 486 : | ||
<br><br> | <br><br> | ||
Puis importez | 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 454 : | 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= |