Usando lo strumento gpg-agent-connect ricostruisci il file della chiave privata ssh


8

Ho perso l'accesso al mio ~/.ssh/id_dsafile (file della chiave privata OpenSSH nell'algoritmo DSA), a causa dell'oblio della passphrase.

Ma, in origine, l'ho fatto importare gpg-agente protetto con una passphrase di agente gpg, che conosco. E la chiave privata funziona ancora bene gpg-agentanche ora, anche se ora desidero ricostruire il file della chiave privata OpenSSH usando ciò che è archiviato gpg-agent.

Utilizzando lo gpg-connect-agentstrumento, con la seguente sequenza di comandi, penso di essere in grado di estrarre la chiave privata (in formato hex / ascii), anche se non so come ricostruirla nel formato di file della chiave privata OpenSSH originale:

  1. Inizia gpg-connect-agentcon l' --hexopzione.
  2. Nel >prompt, ottieni l'ID esadecimale della chiave usando il keyinfo --ssh-listcomando (per essere precisi è il terzo campo che fornisce l'ID esadecimale della chiave).
  3. Nel >prompt, eseguire keywrap_key --export.
  4. Nel >prompt, eseguire export_key <enter hex ID from step 2>o export_key --openpgp <enter hex ID from step 2>.

Ora, dopo aver richiesto la passphrase, averla ricevuta e confermata, lo gpg-connect-agentstrumento visualizza alcune decine di righe di codici hex e ascii, che sospetto fortemente essere la mia chiave privata ssh importata originale.

Quindi, mostra OK, implicando sicuramente che l'operazione è andata a buon fine.

Supponendo che ciò che viene visualizzato sia effettivamente la mia chiave privata ssh (come da "help export_key", ciò che è stato scaricato sullo schermo è la versione crittografata della chiave aeswrap-128; molto probabilmente crittografata con la mia passphrase di agente gpg noto), qualche aiuto su come convertire queste informazioni nel tradizionale formato di chiave privata ssh sarebbe molto apprezzato (un programma perl / python / shell / C per farlo sarebbe un bonus!).

Risposte:


1

Spero di aiutare, ma sono un po 'fuori tema, perché mi sono imbattuto in questa domanda pur avendo un problema non correlato. Durante un aggiornamento gpg 2.1.6-> 2.1.10 ho riscontrato un problema di analisi della chiave privata Ed25519: https://bugs.gnupg.org/gnupg/issue2096 . La sceneggiatura che ho scritto graffia il mio prurito, può scaricare una chiave di espressione S non protetta che sono stato in grado di modificare e ricrittografare.

Quindi, per quanto riguarda questa domanda, ho scritto uno script Python ( https://gist.github.com/zougloub/3058d56857ba400b7ec3 ) che utilizza gpg-agent per estrarre la chiave privata SSH non protetta con espressione recuperando la chiave keywrap con escape libassuan , la chiave crittografata e decodificandola (usando libgcrypt). Non risponde completamente alla tua domanda, in quanto non scarica i dati in formato SSH.

Spero che tu possa ottenerlo ulteriormente, dato che i dati sono almeno in uno stato analizzabile ora.

Ulteriori indicazioni:

Ero curioso di vedere se potevo fare il miglio in più, ma ho già perso troppo tempo a guardarmi intorno ... qualcuno di sano avrebbe appena rigenerato una chiave SSH: D

Saluti,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.