Jak wyeksportować prywatny / tajny klucz ASC w celu odszyfrowania plików GPG

88

Tło: Mój szef próbował wyeksportować do mnie klucz ASC z częściami publicznymi i prywatnymi, ale zawsze, gdy dostaję plik, część prywatna nigdy się nie ładuje i nie odszyfrowuje żadnych plików.

Próbowaliśmy wyeksportować klucz ASC przy użyciu:

  • Aplikacja Windows Kleopatra 2.1 (zawarta w gpg4win)
  • Asystent prywatności GNU aplikacji Windows (zawarty w gpg4win)

            Error: "Decryption failed. Secret Key Not available." 
    

Jak prawidłowo wyeksportować tajny lub prywatny klucz ASC, aby odszyfrować pliki GPG?

Brian McCarthy
źródło

Odpowiedzi:

185

Możesz wyeksportować klucz prywatny za pomocą narzędzia wiersza poleceń z GPG . Działa na powłoce Windows. Użyj następującego polecenia:

gpg --export-secret-keys

Normalny eksport z --exportnie będzie zawierał żadnych kluczy prywatnych, dlatego musisz użyć --export-secret-keys.

Edytować:

Podsumowując informacje podane w moich komentarzach, jest to polecenie, które pozwala wyeksportować konkretny klucz o ID 1234ABCD do pliku secret.asc:

gpg --export-secret-keys --armor 1234ABCD > secret.asc

Możesz znaleźć potrzebny identyfikator za pomocą następującego polecenia. Identyfikator to druga część drugiej kolumny:

gpg --list-keys

Aby wyeksportować tylko 1 określony tajny klucz zamiast wszystkich:

gpg --export-secret-keys keyIDNumber > exportedKeyFilename.asc

keyIDNumber to numer identyfikatora klucza dla żądanego klucza, który próbujesz wyeksportować.

Demento
źródło
4
@Brian: Spowoduje to zrzucenie klucza do konsoli. Jeśli chcesz zapisać go w pliku, możesz przekierować dane wyjściowe do dowolnej nazwy pliku („gpg --export-secret-keys> secret.asc”).
Demento
5
@Brian: To daje wynik w formacie ASCII, a nie binarnym. Jeśli zachowasz to w pliku, to nie ma znaczenia. Ale kiedy zechcesz to przekazać w inny sposób, wersja ASCII jest znacznie łatwiejsza w obsłudze (wysyłając ją w wiadomości e-mail, np.)
Demento Kwietnia
8
Może chcesz przenieść swój tajny klucz w inne miejsce. W takim przypadku należy zaszyfrować wyeksportowane dane: "gpg --export-secret-keys keyIDNumber | gpg -c> encrypted" odszyfrować za pomocą "gpg -o unencrypted encrypted".
rockdaboot
3
Klucze wyeksportowane z GnuPG pozostają zaszyfrowane (dlatego nie musisz wpisywać hasła klucza prywatnego), więc naprawdę nie ma potrzeby ich ponownego szyfrowania.
Ferry Boender
1
@FerryBoender Jesteś tego pewien ?
Josh Habdas
32

Wszystkie powyższe odpowiedzi są poprawne, ale może brakować jednego kluczowego kroku, musisz edytować zaimportowany klucz i „ostatecznie zaufać” temu kluczowi

gpg --edit-key (keyIDNumber)
gpg> trust

Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)

  1 = I don't know or won't say
  2 = I do NOT trust
  3 = I trust marginally
  4 = I trust fully
  5 = I trust ultimately
  m = back to the main menu

i wybierz 5, aby włączyć ten zaimportowany klucz prywatny jako jeden z kluczy

higuita
źródło
18

Zobacz zabieg Dark Otter

https://montemazuma.wordpress.com/2010/03/01/moving-a-gpg-key-privately/

Jeśli witryna nie działa, skorzystaj z kopii zapasowej archive.org:

https://web.archive.org/web/20170518155052/https://montemazuma.wordpress.com/2010/03/01/moving-a-gpg-key-privately/

co obejmuje dość bezpieczny sposób przesyłania kluczy. Możesz umieścić to zalecenie w skryptach powłoki pokazanych poniżej do wielokrotnego użytku.

Najpierw pobierz KEYID, który chcesz z listy pokazanej przez

$ gpg -K

Z wynikowej listy zanotuj KEYID (8 szesnastkowych po sekundzie), którego potrzebujesz do transferu.

Następnie wywołaj testowane sekwencje powłoki „export_private_key” na pierwszym koncie i wygeneruj swój pubkey.gpg + keys.asc. Następnie wywołaj na drugim koncie „import_private_key”. Oto ich treść wyświetlana z kotem (kopiuj i wklej zawartość):

$ cat export_private_key 
gpg -K
echo "select private key"
read KEYID
gpg --output pubkey.gpg --export $KEYID
echo REMEMBER THE COMING PASS-PHRASE
gpg --output - --export-secret-key $KEYID | \
   cat pubkey.gpg - | \
   gpg --armor --output keys.asc --symmetric --cipher-algo AES256
ls -l pubkey.gpg keys.asc
####################  E X P O R T _ P R I V A T E _ K E Y  #####################

Teraz przenieś jakimś sposobem "pubkey.gpg" (jeśli to konieczne) i prywatny "keys.asc" na drugie konto i wywołaj pokazany poniżej program.

$ cat import_private_key 
gpg --no-use-agent --output - keys.asc | gpg --import
###################  I M P O R T _ P R I V A T E _ K E Y  ######################

W duchu Wydry „I to powinno być to”.

Wolfram J
źródło
Dziękujemy, że skrypt zawarł zarówno klucz publiczny, jak i prywatny w jednym pliku chronionym hasłem. Sprawia, że ​​moje życie jest o wiele lepsze!
codekoala
Opcja --no-use-agentjest przestarzała w wersji 2. gpg.
Josh Habdas
9

Myślę, że nie zaimportowałeś jeszcze klucza prywatnego, ponieważ komunikat o błędzie powiedział: Aby zaimportować klucz publiczny / prywatny z gnupg:

gpg --import mypub_key
gpg --allow-secret-key-import --import myprv_key
SIFE
źródło
pytałem o eksportowanie z komputera, który działa ... klucz można zaimportować tylko wtedy, gdy znajduje się na serwerze lokalnym.
Brian McCarthy
@Brian McCarthy: Co próbujesz powiedzieć?
SIFE
Czy naprawdę musimy importować klucz publiczny, jeśli prywatny został już zaimportowany? Jak rozumiem, klucz publiczny można wygenerować z dowolnego klucza prywatnego.
farhany
@farhany Myślę, że tak, ponieważ będziesz go potrzebować podczas podpisywania wiadomości.
SIFE
6

to zakończyło się dla mnie pracą:

   gpg -a --export-secret-keys > exportedKeyFilename.asc 

możesz nazwać keyfilename.asc dowolną nazwą, pod warunkiem, że będziesz mieć rozszerzenie .asc.
to polecenie kopiuje wszystkie tajne klucze na komputerze użytkownika do pliku keyfilename.asc w katalogu roboczym, w którym zostało wywołane.

Aby wyeksportować tylko 1 określony tajny klucz zamiast wszystkich:

   gpg -a --export-secret-keys keyIDNumber > exportedKeyFilename.asc

keyIDNumber to numer identyfikatora klucza dla żądanego klucza, który próbujesz wyeksportować.

Brian McCarthy
źródło
1
Możesz wyświetlić listę wszystkich dostępnych kluczy za pomocą "--list-keys". Druga kolumna będzie zawierała identyfikatory, takie jak „2048g / 1234ABCD”. Znajdź żądany klucz i wyeksportuj go za pomocą "gpg --export-secret-keys 1234ABCD> secret.asc", oczywiście zmieniając 1234ABCD z poprawnym ID. Możesz także dodać flagę „-a”. Zapisuje dane wyjściowe za pomocą znaków ASCII, na wypadek, gdyby wyjście binarne powodowało problemy.
Demento
@demento, dzięki za dodatkowe uwagi ... dodaję to do odpowiedzi
Brian McCarthy
2
nadal potrzebujesz -a, jeśli naprawdę chcesz asc
RichieHH
Jak następnie zaimportować je do innego komputera?
Natim
@Natim Wyobrażam sobie, że bierzesz exportedKeyFilename.ascdo innego komputera, a następnie robisz gpg --allow-secret-key-import --import exportedKeyFilename.ascw katalogu z .ascplikiem. Zobacz: unix.stackexchange.com/questions/184947/…
Brōtsyorfuzthrāx
5

Podobnie jak w przypadku odpowiedzi @Wolfram J, oto metoda szyfrowania klucza prywatnego za pomocą hasła :

gpg --output - --armor --export $KEYID | \
    gpg --output private_key.asc --armor --symmetric --cipher-algo AES256

Oraz odpowiednią metodę odszyfrowania:

gpg private_key.asc
Mateen Ulhaq
źródło
5

1. wyeksportuj tajny klucz (tak powinien był zrobić dla ciebie twój szef)

gpg --export-secret-keys yourKeyName > privateKey.asc

2.Import Secret Key (zaimportuj swój privateKey)

gpg --import privateKey.asc

3. jeszcze nie zrobione, nadal musisz ostatecznie zaufać kluczowi. Musisz się upewnić, że ostatecznie ufasz także kluczowi.

gpg --edit-key yourKeyName

Wpisz trust, 5, y, a następnie zakończ

Źródło: https://medium.com/@GalarnykMichael/public-key-asymmetric-cryptography-using-gpg-5a8d914c9bca

Michael James Kali Galarnyk
źródło