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

8

Perdi o acesso ao meu arquivo ~/.ssh/id_dsa (arquivo de chave privada OpenSSH no algoritmo DSA), devido ao esquecimento da frase secreta.

Mas, originalmente, importei para gpg-agent e o protejei com uma frase-senha gpg-agent, que eu conheço. E a chave privada ainda está funcionando bem sob gpg-agent mesmo agora, embora eu agora queira reconstruir o arquivo de chave privada OpenSSH usando o que está armazenado em gpg-agent .

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

  1. Iniciar gpg-connect-agent com --hex opção.
  2. No prompt > , obtenha o ID hexadecimal da chave usando o comando keyinfo --ssh-list (para ser 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, após solicitar a senha, recebê-la e confirmá-la, a ferramenta gpg-connect-agent exibe algumas dezenas de linhas de hex & códigos ascii, que eu suspeito ser minha chave privada ssh importada original.

Em seguida, exibe OK , certamente indicando que a operação foi bem-sucedida.

Assumindo o que é exibido é de fato minha chave privada ssh (conforme "help export_key", o que foi despejado na tela é aeswrap-128 versão criptografada da chave; mais provavelmente criptografada com a minha frase-senha gpg-agent conhecida), alguns ajuda em como converter essa informação em formato de chave privada ssh tradicional seria muito apreciada (um programa perl / python / shell / C para fazer isso seria um bônus!).

    
por Hari 25.09.2015 / 16:34

1 resposta

1

Espero ajudar, mas estou um pouco fora do assunto, porque me deparei com essa questão enquanto tenho um problema não relacionado. Durante uma atualização 2.1.6- > 2.1.10 do gpg, encontrei um problema de análise de chave privada Ed25519: link . O script que escrevi arranha minha própria coceira, pode despejar uma chave de expressão S sem proteção que consegui hexeditar e criptografar novamente.

Então, com relação a essa questão, eu escrevi um script Python ( link ) que usa o gpg-agent para extrair o desprotegido Chave privada SSH de expressão S, recuperando a chave keywrap com escape libassuan, a chave criptografada e descriptografando-a (usando libgcrypt). Ele não responde completamente a sua pergunta, pois não despeja os dados no formato SSH.

Espero que você consiga mais, já que os dados estão pelo menos em um estado analisável agora.

Outras dicas:

  • O libgcrypt tem uma biblioteca de análise de expressões-s e alguns documentos: link

  • o gpg tem código C como sexp_key_extract , ssh_send_key_public , ssh_handler_request_identities

Eu estava curioso para ver se eu poderia fazer a milha extra, mas eu já perdi muito tempo escondendo ... alguém sensato teria apenas regenerado uma chave SSH: D

Atenciosamente,

    
por 26.01.2016 / 07:47

Tags