4 231
modifications
(33 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 112 : | Ligne 112 : | ||
gpg> save | gpg> save | ||
</pre> | </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 118 : | 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 132 : | 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 156 : | Ligne 175 : | ||
(Q) Finished | (Q) Finished | ||
4096 | 4096 | ||
1y | |||
save | gpg> save | ||
</pre> | </pre> | ||
Ligne 164 : | 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> | |||
=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 194 : | 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 214 : | 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 234 : | 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 248 : | 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 261 : | 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 396 : | 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 421 : | 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 429 : | 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 435 : | 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 459 : | 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 souhaitez sans bloquer l'applet de la yubikey (normalement après 3 erreurs, le PIN est bloqué) | |||
=En pratique= | =En pratique= |