À l'aide de l'outil gpg-agent-connect, reconstruisez le fichier de clé privée ssh

8

J'ai perdu l'accès à mon ~/.ssh/id_dsafichier (fichier de clé privée OpenSSH dans l'algorithme DSA), en raison de l'oubli de la phrase secrète.

Mais, à l'origine, je l'ai importé gpg-agentet protégé avec une phrase secrète d'agent gpg, que je connais. Et la clé privée fonctionne toujours bien sous gpg-agentmême maintenant, bien que je souhaite maintenant reconstruire le fichier de clé privée OpenSSH en utilisant ce qui est stocké gpg-agent.

En utilisant l' gpg-connect-agentoutil, avec la séquence de commandes suivante, je pense pouvoir extraire la clé privée (au format hex / ascii), bien que je ne sache pas comment la reconstruire au format de fichier de clé privée OpenSSH d'origine:

  1. Commencez gpg-connect-agentavec l' --hexoption.
  2. Dans l' >invite, obtenez l'ID hexadécimal de la clé à l'aide de la keyinfo --ssh-listcommande (pour être précis, c'est le troisième champ qui donne l'ID hexadécimal de la clé).
  3. À l' >invite, exécutez keywrap_key --export.
  4. À l' >invite, exécutez export_key <enter hex ID from step 2>ou export_key --openpgp <enter hex ID from step 2>.

Maintenant, après avoir demandé la phrase de passe, l'avoir reçue et confirmée, l' gpg-connect-agentoutil affiche quelques dizaines de lignes de codes hexadécimaux et ascii, que je soupçonne fortement d'être ma clé privée ssh importée d'origine.

Ensuite, il s'affiche OK, ce qui implique sûrement que l'opération a réussi.

En supposant que ce qu'elle affiche est bien ma clé privée ssh (selon "help export_key", ce qui a été vidé sur l'écran est une version cryptée aeswrap-128 de la clé; très probablement cryptée avec ma phrase secrète gpg-agent connue), un peu d'aide sur la façon dont convertir ces informations au format traditionnel de clé privée ssh serait très apprécié (un programme perl / python / shell / C pour le faire serait un bonus!).

Hari
la source

Réponses:

1

En espérant vous aider, mais je suis un peu hors sujet, car je suis tombé sur cette question tout en ayant un problème sans rapport. Lors d'une mise à niveau gpg 2.1.6-> 2.1.10, j'ai rencontré un problème d'analyse de clé privée Ed25519: https://bugs.gnupg.org/gnupg/issue2096 . Le script que j'ai écrit gratte ma propre démangeaison, il peut vider une clé d'expression S non protégée que j'ai pu hexedit et rechiffrer.

Donc, concernant cette question, j'ai écrit un script Python ( https://gist.github.com/zougloub/3058d56857ba400b7ec3 ) qui utilise gpg-agent pour extraire la clé privée SSH d'expression S non protégée, en récupérant la clé d'enveloppe de clé échappée libassuan , la clé chiffrée et la déchiffrer (en utilisant libgcrypt). Il ne répond pas complètement à votre question, car il ne vide pas les données au format SSH.

J'espère que vous pourrez aller plus loin, car les données sont au moins dans un état analysable maintenant.

Autres conseils:

J'étais curieux de voir si je pouvais faire le mile supplémentaire, mais j'ai déjà perdu trop de temps à fouiner ... quelqu'un sain d'esprit aurait juste régénéré une clé SSH: D

Cordialement,

cJ Zougloub
la source