Menggunakan alat gpg-agent-connect merekonstruksi file kunci pribadi ssh

8

Saya kehilangan akses ke ~/.ssh/id_dsafile saya (file kunci pribadi OpenSSH dalam algoritma DSA), karena lupa frasa sandi.

Tapi, awalnya, saya sudah mengimpor gpg-agentdan melindunginya dengan frasa sandi agen gpg, yang saya tahu. Dan kunci pribadi masih berfungsi dengan baik di bawah gpg-agentbahkan sekarang, meskipun sekarang saya ingin merekonstruksi file kunci pribadi OpenSSH menggunakan apa yang disimpan gpg-agent.

Menggunakan gpg-connect-agentalat, dengan urutan perintah berikut, saya pikir saya dapat mengekstrak kunci privat (dalam format hex / ascii), meskipun saya tidak tahu bagaimana merekonstruksi ke format file kunci privat OpenSSH asli:

  1. Mulai gpg-connect-agentdengan --hexopsi.
  2. Di >prompt, dapatkan hex ID kunci menggunakan keyinfo --ssh-listperintah (tepatnya bidang ketiga yang memberikan hex ID kunci).
  3. Di >prompt, jalankan keywrap_key --export.
  4. Di >prompt, jalankan export_key <enter hex ID from step 2>atau export_key --openpgp <enter hex ID from step 2>.

Sekarang, setelah meminta frasa sandi, menerimanya dan mengkonfirmasinya, gpg-connect-agentalat menampilkan beberapa lusin baris kode hex & ascii, yang saya sangat curigai sebagai kunci pribadi ssh asli yang diimpor.

Kemudian, itu ditampilkan OK, pasti menyiratkan operasi itu berhasil.

Dengan asumsi apa yang ditampilkan memang kunci pribadi ssh saya (sesuai "help export_key", apa yang dibuang di layar adalah aeswrap-128 versi terenkripsi kunci; kemungkinan besar dienkripsi dengan frasa sandi agen gpg saya yang dikenal), beberapa bantuan tentang cara untuk mengkonversi info itu ke dalam format kunci privat ssh tradisional akan sangat dihargai (program perl / python / shell / C untuk melakukannya akan menjadi bonus!).

Hari
sumber

Jawaban:

1

Berharap untuk membantu, tapi saya sedikit keluar dari topik, karena saya menemukan pertanyaan ini sambil memiliki masalah yang tidak berhubungan. Selama pemutakhiran gpg 2.1.6-> 2.1.10 Saya menemukan masalah penguraian kunci pribadi Ed25519: https://bugs.gnupg.org/gnupg/issue2096 . Script yang saya tulis menggaruk gatal saya sendiri, dapat membuang kunci S-ekspresi yang tidak terlindungi yang dapat saya hexedit dan enkripsi ulang.

Jadi, mengenai pertanyaan ini, saya menulis skrip Python ( https://gist.github.com/zougloub/3058d56857ba400b7ec3 ) yang menggunakan agen gpg untuk mengekstrak S-ekspresi SSH private key yang tidak dilindungi, dengan mengambil kunci keywrap libassuan-escape , kunci terenkripsi, dan mendekripsi (menggunakan libgcrypt). Itu tidak sepenuhnya menjawab pertanyaan Anda, karena tidak membuang data dalam format SSH.

Semoga Anda bisa mendapatkan itu lebih lanjut, karena data setidaknya dalam kondisi dapat diuraikan sekarang.

Petunjuk lebih lanjut:

Saya penasaran untuk melihat apakah saya bisa melakukan lebih, tapi saya sudah kehilangan terlalu banyak waktu berkeliaran ... seseorang yang waras baru saja membuat ulang kunci SSH: D

Salam,

cJ Zougloub
sumber