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).
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
.
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.
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.
C'est possible.
grip
pour trouver les poignées de chaque clé..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)gpg2 --import
les clés privées exportées que vous avez créées à l'étape 2.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.