Usando la herramienta gpg-agent-connect, reconstruya el archivo de clave privada ssh

8

Perdí el acceso a mi ~/.ssh/id_dsaarchivo (archivo de clave privada OpenSSH en el algoritmo DSA), debido a que olvidé la frase de contraseña.

Pero, originalmente, lo he importado gpg-agenty lo he protegido con una frase de contraseña del agente gpg, que sí sé. Y la clave privada todavía funciona bien gpg-agentincluso ahora, aunque ahora deseo reconstruir el archivo de clave privada OpenSSH utilizando lo que está almacenado gpg-agent.

Utilizando la gpg-connect-agentherramienta, con la siguiente secuencia de comandos, creo que puedo extraer la clave privada (en formato hexadecimal / ascii), aunque no sé cómo reconstruirla al formato de archivo de clave privada OpenSSH original:

  1. Comience gpg-connect-agentcon la --hexopción.
  2. En la >solicitud, obtenga la ID hexadecimal de la clave utilizando el keyinfo --ssh-listcomando (para ser precisos, es el tercer campo que proporciona la ID hexadecimal de la clave).
  3. En el >indicador, ejecute keywrap_key --export.
  4. En el >indicador, ejecute export_key <enter hex ID from step 2>o export_key --openpgp <enter hex ID from step 2>.

Ahora, después de solicitar la frase de contraseña, recibirla y confirmarla, la gpg-connect-agentherramienta muestra una docena de líneas de códigos hexadecimales y ascii, que sospecho que son mi clave privada ssh importada original.

Luego, se muestra OK, lo que seguramente implica que la operación fue exitosa.

Suponiendo que lo que se muestra es de hecho mi clave privada ssh (según "help export_key", lo que se arrojó en la pantalla es una versión cifrada de la clave aeswrap-128; muy probablemente cifrada con mi frase de contraseña conocida del agente gpg), alguna ayuda sobre cómo convertir esa información al formato de clave privada ssh tradicional sería muy apreciado (¡un programa perl / python / shell / C para hacerlo sería una ventaja!).

Hari
fuente

Respuestas:

1

Espero ayudar, pero estoy un poco fuera de tema, porque me topé con esta pregunta mientras tenía un problema no relacionado. Durante una actualización de gpg 2.1.6-> 2.1.10 me encontré con un problema de análisis de clave privada Ed25519: https://bugs.gnupg.org/gnupg/issue2096 . El script que escribí rasca mi propio picor, puede volcar una clave de expresión S desprotegida que pude hexadecimal y volver a cifrar.

Entonces, con respecto a esta pregunta, escribí un script de Python ( https://gist.github.com/zougloub/3058d56857ba400b7ec3 ) que usa gpg-agent para extraer la clave privada SSH de expresión S desprotegida, recuperando la clave de keywrap escapada de libassuan , la clave cifrada y descifrarla (usando libgcrypt). No responde completamente a su pregunta, ya que no descarga los datos en formato SSH.

Esperemos que pueda llegar más lejos, ya que los datos están al menos en un estado analizable ahora.

Otros punteros:

Tenía curiosidad por ver si podía hacer un esfuerzo adicional, pero ya he perdido demasiado tiempo buscando ... alguien cuerdo simplemente habría regenerado una clave SSH: D

Saludos,

cJ Zougloub
fuente