Nuova directory .gnupg: importa vecchie chiavi segrete nella nuova installazione


9

Ho reinstallato il mio sistema operativo (Ubuntu 16.04) e ho una vecchia directory .gnupg contenente:

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

Vorrei importare le mie vecchie chiavi pubbliche e private nel nuovo gnupg. (Non ho semplicemente copiato la directory .gnupg nella nuova installazione, perché capisco che il nuovo gnupg2 presenta alcune differenze nel formato del database che fanno parte delle nuove opzioni di crittografia EC.)

Quanto segue ha funzionato per le chiavi pubbliche ma non è riuscito per le chiavi segrete:

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

Quest'ultimo ha risposto con:

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

Si noti che non riesce ad aprire il mio nuovo anello segreto. Dà lo stesso errore nel tentativo di esportare in un 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

Poiché la mia chiave segreta ha la parte privata della chiave principale rimossa, ho provato anche lo stesso --export-secret-subkeys, ma la risposta è stata la stessa. Anche l'inserimento del mio ID chiave (indirizzo e-mail) dopo l'esportazione non funziona. D'altra parte, posso elencare i tasti:

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 <Me@home.com>" ....
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

(Suppongo che "Chiave persa" si riferisca alla chiave master segreta spogliata.) Qualcuno può dirmi come risolverlo?

Con l'aiuto di @Jens (sotto), i seguenti lavori:

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

Risposte:


7

Prima di tutto, stai facendo una specie di "no-op". gpgè ancora GnuPG 1.4.20 su Ubuntu 16.04, mentre fa gpg2un salto da GnuPG 2.0.28 a 2.1.11. Quindi, mentre GnuPG 2.1 ha apportato alcune modifiche ai formati di file (nuovo formato keystore "keybox" / .kbxe fusione del portachiavi segreto in quello pubblico), è ancora compatibile e farà il keyring segreto unendosi alla prima invocazione di gpg2. Il formato del portachiavi rimane quello vecchio a meno che non venga convertito manualmente . Il vecchio formato è completamente supportato, il nuovo formato offre solo miglioramenti delle prestazioni. Il percorso di migrazione proposto nel nuovo formato keybox sta convertendo nella vecchia directory GnuPG anziché spostarsi in una completamente nuova:

Per convertire un file pubring.gpg esistente nel formato keybox, devi prima eseguire il backup dei valori del proprietario, quindi rinominare il file in (ad esempio) chiavi pubbliche, in modo che non venga riconosciuto da nessuna versione di GnuPG, quindi esegui l'importazione e infine ripristini i valori di fiducia del proprietario:

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

È quindi possibile rinominare il file publickeys in modo che possa essere utilizzato dalle versioni precedenti di GnuPG. Ricorda che in questo caso hai due copie indipendenti delle chiavi pubbliche. I valori del proprietario sono conservati da tutte le versioni di gpg nel file trustdb.gpg ma le precauzioni di cui sopra devono essere prese per tenerle al di sopra di un'importazione.

Considerando il messaggio di errore che hai pubblicato, sembra che alcune autorizzazioni sulla nuova ~/.gnupghome directory o sul keyring segreto ~/.gnupg/secring.gpgnon siano sufficienti per creare la chiave. Ciò accade spesso se GnuPG è stato invocato dall'utente root per errore.

Il messaggio da --list-keysnon è un output normale, ma sembra essere un messaggio di errore. Per stampare un portachiavi arbitraria, utilizzare le --no-default-keyringe --secret-keyringopzioni e il --list-secret-keyscommdn (e in genere sempre hanno opzioni precedono i comandi per GnuPG):

gpg --no-default-keyring --secret-keyring=secring.gpg --list-secret-keys

Ok, l'hai inchiodato sul problema della proprietà. Il mio nuovo secring.gpg era di proprietà di root. Inoltre, l'utilizzo --no-default-keyringe --secret-keyringprima --list-secret-keysproduce un output riconoscibile. Quindi, fammi vedere cosa ho adesso.
Diagon,

Lavori! E grazie per le informazioni sull'aggiornamento. Molto utile.
Diagon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.