Usando a ferramenta gpg-agent-connect, reconstrua o arquivo de chave privada ssh


8

Perdi o acesso ao meu ~/.ssh/id_dsaarquivo (arquivo de chave privada OpenSSH no algoritmo DSA) devido ao esquecimento da senha.

Mas, originalmente, eu o importei gpg-agente o protegi com uma senha de agente gpg, que eu sei. E a chave privada ainda está funcionando bem gpg-agentmesmo agora, embora agora eu deseje reconstruir o arquivo de chave privada do OpenSSH usando o que está armazenado gpg-agent.

Usando a gpg-connect-agentferramenta, com a seguinte sequência de comandos, acho que sou capaz de extrair a chave privada (no formato hex / ascii), embora não saiba como reconstruí-la para o formato original do arquivo de chave privada do OpenSSH:

  1. Comece gpg-connect-agentcom a --hexopção.
  2. No >prompt, obtenha o ID hexadecimal da chave usando o keyinfo --ssh-listcomando (para ser mais preciso, é o terceiro campo que fornece o ID hexadecimal da chave).
  3. No >prompt, execute keywrap_key --export.
  4. No >prompt, execute export_key <enter hex ID from step 2>ou export_key --openpgp <enter hex ID from step 2>.

Agora, depois de solicitar a senha, recebê-la e confirmá-la, a gpg-connect-agentferramenta exibe algumas dezenas de linhas de códigos hex & ascii, que eu suspeito muito ser a minha chave privada ssh privada importada.

Em seguida, ele mostra OK, certamente implicando que a operação foi bem-sucedida.

Supondo que o que é exibido seja realmente minha chave privada ssh (conforme "help export_key", o que foi despejado na tela é uma versão criptografada da chave aeswrap-128; provavelmente criptografada com a minha senha conhecida do agente gpg), alguma ajuda sobre como converter essas informações para o formato tradicional de chave privada ssh seria muito apreciado (um programa perl / python / shell / C para isso seria um bônus!).

Respostas:


1

Na esperança de ajudar, mas estou um pouco fora de tópico, porque me deparei com essa pergunta enquanto estava com um problema não relacionado. Durante uma atualização do gpg 2.1.6-> 2.1.10, encontrei um problema de análise de chave privada Ed25519: https://bugs.gnupg.org/gnupg/issue2096 . O script que escrevi arranha minha própria coceira, pode despejar uma chave de expressão S desprotegida que eu consegui hexeditar e criptografar novamente.

Portanto, com relação a essa pergunta, escrevi um script Python ( https://gist.github.com/zougloub/3058d56857ba400b7ec3 ) que usa o gpg-agent para extrair a chave privada SSH de expressão S desprotegida, recuperando a chave do pacote de chaves com escape de libassuan , a chave criptografada e descriptografando-a (usando libgcrypt). Ele não responde completamente à sua pergunta, pois não despeja os dados no formato SSH.

Espero que você possa ir mais longe, pois os dados estão pelo menos em um estado analisável agora.

Outras indicações:

Fiquei curioso para ver se eu poderia fazer a milha extra, mas já perdi muito tempo espreitando ... alguém sã teria regenerado uma chave SSH: D

Saudações,

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.