Come esportare la chiave ASC privata / segreta per decrittografare i file GPG


89

Background: il mio capo ha provato a esportarmi una chiave ASC con parti pubbliche e private, ma ogni volta che ricevo il file la parte privata non viene mai caricata e non decrittografa alcun file.

Abbiamo provato a esportare la chiave ASC utilizzando:

  • Applicazione Windows Kleopatra 2.1 (inclusa in gpg4win)
  • Applicazione Windows GNU Privacy Assistant (incluso in gpg4win)

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

Come esportare correttamente una chiave asc segreta o privata per decrittografare i file gpg?

Risposte:


186

Puoi esportare la chiave privata con lo strumento della riga di comando da GPG . Funziona sulla shell di Windows. Usa il seguente comando:

gpg --export-secret-keys

Una normale esportazione con --exportnon includerà alcuna chiave privata, quindi è necessario utilizzare --export-secret-keys.

Modificare:

Per riassumere le informazioni riportate nei miei commenti, questo è il comando che permette di esportare una specifica chiave con ID 1234ABCD nel file secret.asc:

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

Puoi trovare l'ID di cui hai bisogno usando il seguente comando. L'ID è la seconda parte della seconda colonna:

gpg --list-keys

Per esportare solo 1 chiave segreta specifica invece di tutte:

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

keyIDNumber è il numero dell'ID della chiave per la chiave desiderata che stai tentando di esportare.


4
@ Brian: questo scaricherà la chiave sulla console. Se vuoi salvarlo in un file, puoi reindirizzare l'output a un nome file arbitrario ("gpg --export-secret-keys> secret.asc").
Demento

5
@ Brian: questo ti dà l'output in ASCII e non in binario. Se lo tieni in un file, non ha molta importanza. Ma una volta che vuoi passarlo in qualche altro modo, la versione ASCII è molto più facile da gestire (inviandola in linea in un'e-mail ad esempio)
Demento

8
Forse vuoi portare la tua chiave segreta in un'altra posizione. In questo caso dovresti crittografare i dati esportati: "gpg --export-secret-keys keyIDNumber | gpg -c> encrypted" decrittografarli con "gpg -o unencrypted encrypted".
rockdaboot

3
Le chiavi esportate da GnuPG rimangono crittografate (motivo per cui non è necessario inserire la passphrase della chiave privata), quindi non è davvero necessario crittografarla di nuovo.
Ferry Boender

1
@FerryBoender Ne sei sicuro ?
Josh Habdas

32

Tutte le risposte di cui sopra sono corrette, ma potrebbe mancare un passaggio cruciale, è necessario modificare la chiave importata e "in definitiva fidarsi" di quella chiave

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

e seleziona 5 per abilitare la chiave privata importata come una delle tue chiavi


18

Guarda il trattamento di Dark Otter

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

Se il sito non è attivo, utilizza il riferimento al backup di archive.org:

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

che include un modo ragionevolmente sicuro per trasferire le chiavi. Potresti inserire questa raccomandazione negli script di shell mostrati di seguito per un uso ripetuto.

Per prima cosa prendi il KEYID che desideri dall'elenco mostrato da

$ gpg -K

Dalla lista risultante annotare il KEYID (gli 8 esadecimali che seguono sec) necessario per il trasferimento.

Quindi invoca gli script di shell testati "export_private_key" sul primo account e genera il tuo pubkey.gpg + keys.asc. Successivamente invoca sul secondo account "import_private_key". Ecco il loro contenuto mostrato con cat (copia e incolla contenuto):

$ 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  #####################

Ora trasferisci in qualche modo il "pubkey.gpg" (se necessario) e il privato "keys.asc" al secondo account e invoca il programma mostrato di seguito.

$ 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  ######################

Nello spirito di Otter "E quello, dovrebbe essere, quello".


Grazie per lo script per includere sia la chiave pubblica che quella privata in un file protetto da passphrase. Rende la mia vita molto migliore!
codekoala

L'opzione --no-use-agentè obsoleta nella versione gpg 2.
Josh Habdas

9

Penso che non avessi ancora importato la chiave privata come diceva l'errore del messaggio, Per importare la chiave pubblica / privata da gnupg:

gpg --import mypub_key
gpg --allow-secret-key-import --import myprv_key

stavo chiedendo di esportare da un computer che funziona ... puoi importare la chiave solo se è su un server locale.
Brian McCarthy

@Brian McCarthy: Cosa stai cercando di dire?
SIFE

Abbiamo davvero bisogno di importare la chiave pubblica se quella privata è già stata importata? A quanto ho capito, una chiave pubblica può essere generata da una qualsiasi cosa privata.
farhany

@farhany Penso di sì, perché ne avrai bisogno quando firmi il tuo messaggio.
SIFE

6

questo ha finito per funzionare per me:

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

è possibile denominare keyfilename.asc con qualsiasi nome purché si mantenga l'estensione .asc.
questo comando copia tutte le chiavi segrete sul computer di un utente in keyfilename.asc nella directory di lavoro in cui è stato chiamato il comando.

Per esportare solo 1 chiave segreta specifica invece di tutte:

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

keyIDNumber è il numero dell'ID della chiave per la chiave desiderata che stai tentando di esportare.


1
Puoi elencare tutte le chiavi disponibili con "--list-keys". La seconda colonna conterrà ID come "2048g / 1234ABCD". Trova la chiave desiderata ed esportala con "gpg --export-secret-keys 1234ABCD> secret.asc", ovviamente cambiando 1234ABCD con l'ID corretto. Puoi anche aggiungere il flag "-a". Scrive l'output con caratteri ASCII, nel caso in cui l'output binario causi problemi.
Demento

@demento, grazie per il feedback aggiuntivo ... lo aggiungo alla risposta
Brian McCarthy

2
hai ancora bisogno del -a se vuoi davvero asc
RichieHH

Come si importano quindi su un altro computer?
Natim

@Natim immagino che prendi exportedKeyFilename.ascsull'altro computer e poi fai gpg --allow-secret-key-import --import exportedKeyFilename.ascnella directory con il .ascfile. Vedi: unix.stackexchange.com/questions/184947/…
Brōtsyorfuzthrāx

5

Simile alla risposta di @Wolfram J, ecco un metodo per crittografare la tua chiave privata con una passphrase :

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

E un metodo corrispondente per decrittografare:

gpg private_key.asc

5

1.Esporta una chiave segreta (questo è ciò che il tuo capo avrebbe dovuto fare per te)

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

2.Importare la chiave segreta (importa la tua chiave privata)

gpg --import privateKey.asc

3.Non ancora fatto, devi comunque fidarti di una chiave. Dovrai assicurarti di fidarti anche di una chiave.

gpg --edit-key yourKeyName

Inserisci fiducia, 5, ye poi esci

Fonte: https://medium.com/@GalarnykMichael/public-key-asymmetric-cryptography-using-gpg-5a8d914c9bca

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.