web-dev-qa-db-fra.com

Créer un Yubikey de sauvegarde avec des clés PGP identiques

J'ai récemment acheté deux Yubikeys Neo que j'aimerais utiliser principalement pour le cryptage et l'authentification en utilisant la fonction de carte à puce avec GnuPG. J'ai lu quelques tutoriels sur le sujet (notamment ici et ici ) et j'ai réussi à générer et exporter vers le Yubikey un porte-clés avec le 3 des sous-clés pour signer, chiffrer et authentifier. En les utilisant, j'ai pu crypter un fichier en utilisant ma clé publique que je ne pouvais décrypter qu'en branchant le Yubikey. Génial.

Maintenant, je veux dupliquer cette configuration sur l'autre Yubikey pour servir de sauvegarde au cas où je perdrais mon appareil principal. Étant donné que la commande "keytocard" de gpg supprime les clés locales, je n'ai pu exporter les mêmes clés vers l'autre Yubikey qu'en effectuant et en restaurant une sauvegarde de mon répertoire .gnupg (qui ne semble pas correct), et même ainsi, lorsque j'essaie pour décrypter mon fichier de test, gpg demande spécifiquement la clé avec un numéro de série et il ne décryptera pas avec la clé de sauvegarde.

Existe-t-il un moyen d'utiliser deux Yubikeys différents comme sauvegarde comme celui-ci? Sinon, quelle est la meilleure façon de procéder pour y parvenir? (ce qui signifie: conserver une clé de sauvegarde que je peux utiliser pour décrypter mes fichiers au cas où je perdrais la clé principale).

13
Foaly

Après beaucoup d'essais et d'erreurs, j'ai finalement trouvé un moyen d'y parvenir. Voici une réponse à ma propre question au cas où cela aiderait quelqu'un:

L'astuce était de ne pas essayer d'exporter les mêmes sous-clés vers les deux Yubikeys (gpg n'aime pas ça) mais de générer des sous-clés différentes. Dans mon trousseau de clés, j'ai 6 sous-clés: 3 pour le Yubikey principal (Sign, Encrypt, Auth) et 3 pour le Yubikey de sauvegarde. J'ai exporté les clés privées correspondantes vers les Yubikeys, qui cette fois n'ont pas eu besoin du hack pour restaurer une sauvegarde de .gnupg. Enfin, je crypte mes fichiers en utilisant les deux clés publiques, donc je peux les décrypter avec les Yubikeys:

gpg -e -r [keyid1]! -r [keyid2]! [file]

N'oubliez pas le point d'exclamation à la fin de chaque identifiant de clé. Sinon, pour une raison quelconque, gpg comprendra que pour chaque destinataire vous voulez "une clé dans le même trousseau de clés" et sélectionnera la même clé deux fois par défaut.

Maintenant, gpg acceptera l'une ou l'autre des clés privées pour déchiffrer le fichier. Dans le cas de Yubikeys, il vous demandera de brancher le premier, et si vous annulez, il demandera le second, afin que vous puissiez utiliser l'un ou l'autre. J'ai spécifié la clé principale dans le premier -r donc gpg demande directement le Yubikey principal et ne me dérange pas avec celui de sauvegarde. Pour simplifier les choses, j'ai alias toute la commande gpg avec les deux keyid pour yk_encrypt.

3
Foaly

trouvé ce texte de présentation qui dit qu'il y a une commande que vous pouvez exécuter qui dira essentiellement à votre application gpg locale de scanner la nouvelle carte et de l'utiliser à la place si les choses se gélifient. donc dans le cas de l'utilisation d'une carte de sauvegarde, pas le pire des cas pour lancer un "init" pour le faire fonctionner.

https://forum.yubico.com/viewtopic38a1.html?f=35&t=24

Fonctionnement

gpg-connect-agent "scd serialno" "learn --force"/bye

mettra à jour les talons de clé secrète pour les clés PGP sur la clé actuellement insérée. Donc, en exécutant cela après l'insertion de la clé, gpg utilisera la clé actuellement insérée.

8
MrTristan

Au lieu de sauvegarder un répertoire entier, vous pouvez exporter (créer une copie de sauvegarde de) la clé en utilisant par exemple.

gpg -a -o seckey.asc --export-secret-key ABCD1234

et l'importer à nouveau (après avoir déplacé vers la première carte) avec

gpg --import seckey.asc

GPG demande la carte spécifique car après avoir déplacé la clé vers la carte, elle stocke une clé talon sur votre système, qui lie cette clé à cette carte. Si vous supprimez la clé de gpg (par exemple gpg --delete-secret-and-public-key ABCD1234) et la référence (une parmi plusieurs potentiellement par exemple.

C:\users\someUser\AppData\Roaming\gnupg\private-keys-v1.d ou

/ home/someUser/.gnupg/private-keys-v1.d

), vous pouvez insérer le Yubikey de sauvegarde et

gpg --card-status

pour créer un stub référençant cette clé sur le deuxième Yubikey au lieu du premier.

Vous pourriez également garder la clé exportée sécurisée et l'utiliser comme sauvegarde, mais ce n'était pas la question posée.

4
user8675309

C'est possible.

  1. Générez les clés localement dans votre trousseau. Pas encore de Yubikey.
  2. Exportez les clés secrètes (y compris le maître et toutes les sous-clés). (N'oubliez pas le mot de passe que vous avez utilisé pour crypter vos clés, car le blob exporté sera crypté avec lui)
  3. Une fois les clés privées exportées et stockées dans un endroit sûr, enregistrez chaque clé dans le menu de modification des clés.
  4. Supprimez Yubikey 1, puis entrez dans le menu de modification de la clé que vous venez de déplacer.
  5. Utilisez la commande grip pour trouver les poignées de chaque clé.
  6. Vous trouverez un .key fichier pour chaque clavier de votre ~/.gnupg/private-keys-v1.d/* dossier ... supprimez-les, tout en veillant à ne rien supprimer d'autre (ne voulez pas effacer les clés privées pour les sonneries non liées)
  7. gpg2 --import les clés privées exportées que vous avez créées à l'étape 2.
  8. Vous avez à nouveau les clés privées dans votre trousseau de clés local. Insérez yubikey 2 et répétez l'étape 3.
  9. Maintenant, voici la partie difficile à expliquer ... ces fichiers de clés privées keygrip.key indiquent essentiellement à gpg "cette clé privée est dans Yubikey avec le numéro de série. Xxxxx", donc vous ne pouvez pas simplement échanger des cartes et utiliser soit ou ... vous avez pour exécuter certaines commandes entre les échanges ... ce qui est bien puisque vous n'échangerez probablement pas et que vous voulez juste une seconde pour une sauvegarde ... mais 2 ans plus tard, lorsque vous avez besoin de votre sauvegarde, vous risquez de trébucher parce que vous avez oublié à propos de ce petit problème. Une façon de le faire est de supprimer toutes les clés privées via la méthode du clavier que je vous ai montrée. Ensuite, exécutez simplement gpg2 --card-edit une fois et il détectera automatiquement + connectera votre carte aux clés privées des clés de pub de votre trousseau de clés (la suppression des clés ne supprime pas les clés de pub) ... ou exécutez gpg-connect-agent "scd serialno" "learn --force" /bye comme MrTristan a suggéré de réinitialiser les informations de relation entre la clé série et la clé privée.

Une fois que vous avez entré une clé privée dans le yubikey, vous ne pouvez pas la retirer, donc pour celui que vous avez déjà fait, il est trop tard.

En outre, un gros problème flagrant avec cette méthode: comment savez-vous que personne ne fait de journalisation + vol de votre sauvegarde de clé privée pendant que vous la faites ...

Cependant, cette méthode est meilleure que le simple stockage de clés privées sur votre disque. Comme votre surface d'attaque est réduite à la configuration initiale uniquement ... et à tout moment, vous devez retirer votre sauvegarde.

1
user3074620