Rekonstruieren Sie mit dem Tool gpg-agent-connect die private Schlüsseldatei ssh

8

Ich habe den Zugriff auf meine ~/.ssh/id_dsaDatei (OpenSSH-Datei mit privatem Schlüssel im DSA-Algorithmus) verloren, weil ich die Passphrase vergessen habe.

Aber ursprünglich habe ich es importieren lassen gpg-agentund es mit einer gpg-Agent-Passphrase geschützt, die ich kenne. Und der private Schlüssel funktioniert gpg-agentauch jetzt noch einwandfrei, obwohl ich jetzt die OpenSSH-Datei mit dem privaten Schlüssel unter Verwendung der darin gespeicherten Daten rekonstruieren möchte gpg-agent.

Mit dem gpg-connect-agentTool und der folgenden Befehlsfolge kann ich den privaten Schlüssel (im Hex / ASCII-Format) extrahieren, obwohl ich nicht weiß, wie ich ihn in das ursprüngliche OpenSSH-Dateiformat für private Schlüssel rekonstruieren kann:

  1. Beginnen Sie gpg-connect-agentmit der --hexOption.
  2. >Rufen Sie in der Eingabeaufforderung die Hex-ID des Schlüssels mit dem keyinfo --ssh-listBefehl ab (genauer gesagt, es ist das dritte Feld, das die Hex-ID des Schlüssels angibt).
  3. >Führen Sie in der Eingabeaufforderung aus keywrap_key --export.
  4. >Führen Sie in der Eingabeaufforderung export_key <enter hex ID from step 2>oder aus export_key --openpgp <enter hex ID from step 2>.

Nachdem das gpg-connect-agentTool nun zur Eingabe der Passphrase aufgefordert, diese empfangen und bestätigt hat, zeigt es einige Dutzend Zeilen mit Hex- und ASCII-Codes an, von denen ich sehr vermute, dass sie mein ursprünglich importierter privater SSH-Schlüssel sind.

Dann wird angezeigt OK, was sicher bedeutet, dass die Operation erfolgreich war.

Angenommen, es wird tatsächlich mein privater SSH-Schlüssel angezeigt (gemäß "help export_key" wurde auf dem Bildschirm eine mit aeswrap-128 verschlüsselte Version des Schlüssels ausgegeben; höchstwahrscheinlich mit meiner bekannten gpg-agent-Passphrase verschlüsselt) Es wäre sehr dankbar, diese Informationen in das traditionelle SSH-Format für private Schlüssel zu konvertieren (ein Perl / Python / Shell / C-Programm wäre ein Bonus!).

Hari
quelle

Antworten:

1

Ich hoffe zu helfen, aber ich bin ein bisschen außer Thema, weil ich auf diese Frage gestoßen bin, während ich ein nicht verwandtes Problem hatte. Während eines gpg 2.1.6-> 2.1.10-Upgrades trat ein Problem beim Parsen des privaten Schlüssels Ed25519 auf: https://bugs.gnupg.org/gnupg/issue2096 . Das Skript, das ich geschrieben habe, kratzt meinen eigenen Juckreiz. Es kann einen ungeschützten S-Ausdrucksschlüssel ausgeben, den ich hexeditieren und neu verschlüsseln konnte.

In Bezug auf diese Frage habe ich ein Python-Skript ( https://gist.github.com/zougloub/3058d56857ba400b7ec3 ) geschrieben, das gpg-agent verwendet, um den ungeschützten privaten SSH-Schlüssel mit S-Ausdruck zu extrahieren, indem der libassuan-maskierte Schlüsselumbruchschlüssel abgerufen wird , den verschlüsselten Schlüssel und entschlüsseln (mit libgcrypt). Ihre Frage wird nicht vollständig beantwortet, da die Daten nicht im SSH-Format ausgegeben werden.

Hoffentlich können Sie das weiter bringen, da sich die Daten jetzt zumindest in einem analysierbaren Zustand befinden.

Weitere Hinweise:

Ich war neugierig zu sehen, ob ich die Extrameile schaffen könnte, aber ich habe bereits zu viel Zeit verloren, um herumzusuchen ... jemand, der gesund ist, hätte gerade einen SSH-Schlüssel regeneriert: D.

Grüße,

cJ Zougloub
quelle