Jak zaimportować tajny klucz gpg (skopiowany z jednej maszyny na drugą)?

153

Próbuję skopiować mój klucz gpg z jednej maszyny na drugą.

Ja robię:

gpg --export ${ID} > public.key
gpg --export-secret-key ${ID} > private.key

Przenieś pliki na nowy komputer, a następnie:

gpg --import public.key
gpg: nyckel [ID]: public key [Name, e-mail] was imported
gpg: Total number of treated keys: 1
gpg:                 imported: 1  (RSA: 1)

gpg --allow-secret-key-import private.key
sec  [?]/[ID] [Creation date] [Name, e-mail]
ssb  [?]/[SUB-ID] [Creation date]

Wszystko wygląda dla mnie dobrze, ale potem:

$ gpg -d [file].gpg
gpg: encrypted with 4096-bit RSA-key, id [SUB-ID], created [Creation date]
  [Name, e-mail]
gpg: decryption failed: secret key not accessible

Tak więc komunikat o błędzie mówi, że plik został zaszyfrowany za pomocą [SUB-ID], co wydaje się, że import tajnego klucza oznacza, że ​​został zaimportowany. ([SUB-ID] w obu wiadomościach jest taki sam).

Więc najwyraźniej robię coś złego, ale nie wiem co.

użytkownik50849
źródło

Odpowiedzi:

164

Musisz dodać --importdo wiersza poleceń, aby zaimportować klucz prywatny. Nie musisz używać --allow-secret-key-importflagi. Według strony podręcznika: „Jest to przestarzała opcja i nie jest nigdzie używana”.

gpg --import private.key
Celada
źródło
Czy jest szansa, że ​​wiesz także, dlaczego gpg2 -e -r [ID]mówi „Nie ma pewności, że ten klucz należy do określonego użytkownika”? Chciałbym zawrzeć to w pierwotnym pytaniu, ale zauważyłem to dopiero później.
user50849
1
GnuPG utrzymuje bazę danych zaufania, której używa, aby decydować, w jakim stopniu ufać, jakie klucze. Na przykład najbardziej ufaj swoim własnym kluczom, które nie są bezpośrednio ani pośrednio podpisane przez żaden zaufany klucz. Po zaimportowaniu do pustej bazy danych prawdopodobnie nie ma żadnych zaufanych kluczy. Ta zaufana baza danych jest oddzielna od samej bazy danych lub samych kluczy, więc importowanie kluczy nie czyni ich zaufanymi, chyba że są podpisane przez jakiś już zaufany klucz. Musisz zaznaczyć GnuPG, które klucze chcesz zaufać osobno.
Celada
3
@Celeda, dzięki, z --edit-key i poleceniem zaufania Udało mi się zdobyć klucz. Ponieważ moim pierwotnym pytaniem było, jak skopiować klucz z jednego komputera na drugi, myślę, że należałoby dodać coś o tym do swojej odpowiedzi. Wolałbym nie edytować twojej odpowiedzi, a wydaje się, że wiesz o tym znacznie więcej niż ja.
user50849
Nie sądzę, że rozumiem trustdb wystarczająco dobrze, aby o tym mówić w mojej odpowiedzi. Cieszę się, że udało ci się to wypracować, używając niejasnych wskazówek, które podałem w moim komentarzu.
Celada
Ok, zmieniłem tytuł oryginalnego pytania, aby lepiej pasowało do odpowiedzi. W ten sposób mogę zadać osobne pytanie trustdb. Dzięki za pomoc. :)
user50849
81

Powyżej jest tylko częściowa odpowiedź. Pełna odpowiedź to:

gpg --import private.key
  • Biorąc pod uwagę KEYID (np. FA0339620046E260) Z wyniku:

    gpg --edit-key {KEY} trust quit
    # enter 5<RETURN>
    # enter y<RETURN>
    
  • LUB użyj poniższego polecenia automatycznego:

    expect -c "spawn gpg --edit-key {KEY} trust quit; send \"5\ry\r\"; expect eof"
    

Na koniec sprawdź , czy klucz jest teraz zaufany [ultimate]zamiast[unknown]

gpg --list-keys
cmcginty
źródło
6
To powinna być zaakceptowana odpowiedź. Znacznie bardziej kompletny.
Ben Lindsay,
Co robią te dodatkowe polecenia?
Steiny,
@Steiny Sprawia, że ​​klucz jest zaufany z [ostateczny] zamiast [nieznany]. gpgtools.tenderapp.com/kb/faq/…
cmcginty
0

Importowałem z kopii zapasowej, która miała starą wersję gpg. Ponieważ stary komputer nie był dostępny, tylko kopia zapasowa, nie mogłem go najpierw wyeksportować. To działało dla mnie.

gpg --import old_home_dir/.gnupg/pubring.gpg
gpg --import old_home_dir/.gnupg/secring.gpg

Jeśli chcesz mieć możliwość importowania tajnych kluczy bez natychmiastowego wprowadzania hasła, skorzystaj z --batchopcji.

Aby zweryfikować klucze publiczne:

gpg --list-keys

Aby zweryfikować tajne klucze:

gpg --list-secret-keys
Jonathan Tran
źródło