Direktori .gnupg baru: Mengimpor kunci rahasia lama ke instalasi baru

9

Saya telah menginstal ulang OS saya (Ubuntu 16.04) dan memiliki direktori .gnupg lama yang berisi:

gpg-agent.conf  
gpg-agent-info-<hostname> 
gpg.conf  
private-keys-v1.d  
pubring.gpg  
secring.gpg  
S.gpg-agent  
trustdb.gpg

Saya ingin mengimpor kunci publik & pribadi lama saya ke gnupg baru. (Saya tidak hanya menyalin direktori .gnupg ke instalasi baru, karena saya mengerti bahwa gnupg2 baru memiliki beberapa perbedaan dalam format basis data yang merupakan bagian dari opsi enkripsi EC baru.)

Berikut ini berfungsi untuk kunci publik tetapi gagal untuk kunci rahasia:

gpg --export --keyring=~/.gnupg.old/pubring.gpg | gpg --import
gpg --export-secret-keys --keyring=~/.gnupg.old/secring.gpg | gpg --import

Yang terakhir merespons dengan:

gpg: can't open `~/.gnupg/secring.gpg'  <== New Secret Keyring
gpg: WARNING: nothing exported
gpg: no valid OpenPGP data found.
gpg: Total number processed: 0

Perhatikan bahwa gagal membuka cincin rahasia baru saya . Ini memberikan kesalahan yang sama ketika mencoba untuk mengekspor ke file:

gpg --export-secret-keys --keyring=~/.gnupg.old/secring.gpg > secret.asc

gpg: can't open `~/.gnupg/secring.gpg'  <== New Secret Keyring
gpg: WARNING: nothing exported

Karena kunci rahasia saya memiliki bagian pribadi dari kunci master dilucuti, saya juga mencoba yang sama, dengan --export-secret-subkeys, tetapi tanggapannya sama. Menempatkan ID kunci saya (alamat email) setelah ekspor juga tidak berfungsi. Di sisi lain, saya dapat membuat daftar kunci:

gpg --list-keys --keyring=~/.gnupg.old/secring.gpg

gpg: Oops; key lost!
node 0x1e7ee00 01/00 type=secret-key
node 0x1e9cbd0 00/00 type=user-id  "Me <[email protected]>" ....
node 0x1e99dd0 00/00 type=signature  class=13 keyid=XXXXXXXX ts=1383637282
node 0x1e9c510 00/00 type=secret-subkey
node 0x1eaa210 00/00 type=signature  class=18 keyid=XXXXXXXX ts=1449138073
node 0x1eaf1f0 00/00 type=secret-subkey
node 0x1eaf580 00/00 type=signature  class=18 keyid=XXXXXXXX ts=138363647

(Saya berasumsi "Kunci hilang" mengacu pada kunci master rahasia yang dilucuti.) Adakah yang bisa mengarahkan saya cara mengatasi ini?

Dengan bantuan @Jens (di bawah), yang berikut ini berfungsi:

gpg --no-default-keyring --secret-keyring=~/.gnupg.old/secring.gpg --export-secret-keys | gpg --import
Diagon
sumber

Jawaban:

7

Pertama-tama, Anda melakukan semacam "no-op". gpgmasih GnuPG 1.4.20 di Ubuntu 16.04, sementara gpg2melakukan lompatan dari GnuPG 2.0.28 ke 2.1.11. Kemudian, ketika GnuPG 2.1 membuat beberapa perubahan pada format file (format keystore baru "keybox" / .kbxdan menggabungkan keyring rahasia ke yang publik), itu masih kompatibel dan akan melakukan penggabungan keyring rahasia setelah doa pertama gpg2. Format keyring tetap yang lama kecuali Anda mengubahnya secara manual . Format lama didukung penuh, format baru hanya menawarkan peningkatan kinerja. Jalur migrasi yang diusulkan ke format keybox baru mengonversi dalam direktori GnuPG lama alih-alih pindah ke yang benar-benar baru:

Untuk mengonversi file pubring.gpg yang ada ke format keybox, pertama-tama Anda membuat cadangan nilai trust sendiri, lalu ganti nama file tersebut menjadi (misalnya) publickeys, sehingga tidak akan dikenali oleh versi GnuPG mana pun, kemudian jalankan impor, dan akhirnya kembalikan nilai-nilai ownertrust:

$ cd ~/.gnupg
$ gpg --export-ownertrust >otrust.lst
$ mv pubring.gpg publickeys
$ gpg2 --import-options import-local-sigs --import publickeys
$ gpg2 --import-ownertrust otrust.lst

Anda kemudian dapat mengganti nama file publickeys sehingga dapat digunakan oleh versi GnuPG yang lebih lama. Ingatlah bahwa dalam hal ini Anda memiliki dua salinan kunci publik yang independen. Nilai-nilai ownertrust disimpan oleh semua versi gpg di file trustdb.gpg tetapi tindakan pencegahan di atas perlu dilakukan untuk menjaga mereka lebih dari impor.

Mempertimbangkan pesan kesalahan yang Anda poskan, tampaknya beberapa izin pada ~/.gnupgdirektori home baru atau keyring rahasia ~/.gnupg/secring.gpgtidak cukup untuk membuat kunci. Ini sering terjadi jika GnuPG dipanggil dari pengguna root secara tidak sengaja.

Pesan dari --list-keysbukanlah keluaran normal, tetapi tampaknya merupakan pesan kesalahan. Untuk mencetak keyring sewenang-wenang, menggunakan --no-default-keyringdan --secret-keyringpilihan dan --list-secret-keyscommdn (dan umumnya selalu memiliki pilihan mendahului perintah untuk GnuPG):

gpg --no-default-keyring --secret-keyring=secring.gpg --list-secret-keys
Jens Erat
sumber
Ok, Anda memahaminya pada masalah kepemilikan. Secring.gpg baru saya dimiliki oleh root. Juga, menggunakan --no-default-keyringdan --secret-keyringsebelum --list-secret-keysmenghasilkan output yang dikenali. Jadi, biarkan saya melihat apa yang saya dapatkan sekarang.
Diagon
Bekerja! Dan terima kasih atas info peningkatannya. Sangat membantu.
Diagon