Nowy katalog .gnupg: importuj stare tajne klucze do nowej instalacji

9

Ponownie zainstalowałem swój system operacyjny (Ubuntu 16.04) i mam stary katalog .gnupg zawierający:

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

Chciałbym zaimportować moje stare klucze publiczne i prywatne do nowego programu gnupg. (Nie po prostu skopiowałem katalogu .gnupg do nowej instalacji, ponieważ rozumiem, że nowy gnupg2 ma pewne różnice w formacie bazy danych, które są częścią nowych opcji szyfrowania WE).

Następujące działało w przypadku kluczy publicznych, ale nie powiodło się w przypadku kluczy tajnych:

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

Ten ostatni odpowiedział:

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

Zauważ, że to nie otwiera mojego nowego tajnego pierścienia. Daje ten sam błąd przy próbie eksportu do pliku:

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

Ponieważ mój tajny klucz ma usuniętą prywatną część klucza głównego, próbowałem również tego samego --export-secret-subkeys, ale odpowiedź była taka sama. Umieszczenie mojego klucza ID (adresu e-mail) po eksporcie również nie działa. Z drugiej strony mogę wymienić klucze:

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

(Zakładam, że „zgubiono klucz” odnosi się do pozbawionego klucza tajnego klucza głównego.) Czy ktoś może mi pokierować, jak to rozwiązać?

Przy pomocy @Jens (poniżej) działa:

gpg --no-default-keyring --secret-keyring=~/.gnupg.old/secring.gpg --export-secret-keys | gpg --import
Przekątna
źródło

Odpowiedzi:

7

Przede wszystkim robisz coś w rodzaju „no-op”. gpgjest wciąż GnuPG 1.4.20 na Ubuntu 16.04, podczas gdy gpg2skoczył z GnuPG 2.0.28 do 2.1.11. Następnie, podczas gdy GnuPG 2.1 wprowadził pewne zmiany w formatach plików (nowy format magazynu kluczy „keybox” / .kbxi scalenie tajnego klucza z publicznym), nadal jest kompatybilny i po pierwszym wywołaniu wykona scalanie tajnego klucza gpg2. Format kluczy pozostaje stary, chyba że ręcznie go przekonwertujesz . Stary format jest w pełni obsługiwany, nowy format oferuje jedynie poprawę wydajności. Proponowana ścieżka migracji do nowego formatu skrzynki na klucze jest konwertowana w starym katalogu GnuPG zamiast przejścia na zupełnie nowy:

Aby przekonwertować istniejący plik pubring.gpg do formatu skrzynki na klucze, najpierw wykonaj kopię zapasową wartości ownertrust, a następnie zmień nazwę pliku na (na przykład) publickeys, aby nie został rozpoznany przez żadną wersję GnuPG, a następnie uruchom import, a na koniec przywróć wartości trusttr właściciela:

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

Następnie możesz zmienić nazwę pliku publickeys, aby mógł być używany przez starsze wersje GnuPG. Pamiętaj, że w tym przypadku masz dwie niezależne kopie kluczy publicznych. Wartości Ownertrust są przechowywane przez wszystkie wersje gpg w pliku trustdb.gpg, ale należy zachować powyższe środki ostrożności, aby zachować je przed importem.

Biorąc pod uwagę opublikowany komunikat o błędzie, wydaje się, że niektóre uprawnienia do nowego ~/.gnupgkatalogu domowego lub tajnego ~/.gnupg/secring.gpgklucza są niewystarczające do utworzenia klucza. Dzieje się tak często, jeśli GnuPG został wywołany przez użytkownika root przez przypadek.

Wiadomość z --list-keysnie jest normalnym wyjściem, ale wydaje się być komunikatem o błędzie. Aby wydrukować dowolny brelok, użyj --no-default-keyringi --secret-keyringopcje i --list-secret-keyscommdn (i generalnie zawsze poprzedzać opcje polecenia dla GnuPG):

gpg --no-default-keyring --secret-keyring=secring.gpg --list-secret-keys
Jens Erat
źródło
Ok, przybiłeś go w kwestii własności. Mój nowy secring.gpg był własnością root. Ponadto użycie --no-default-keyringi --secret-keyringprzedtem --list-secret-keysdaje rozpoznawalny wynik. Pozwól mi zobaczyć, co mam teraz.
Diagon
Pracuje! I dzięki za informacje o aktualizacji. Bardzo pomocny.
Diagon