È possibile aggiungere un destinatario a un file già crittografato in GPG?


12

Supponendo di aver crittografato un file (possibilmente grande) usando GPG; per esempio

gpg --recipient "Some Name" -o this_file.gpg --encrypt this_file.txt

È possibile aggiungere un altro destinatario senza prima decrittografare il file, seguito da un'altra crittografia?

gnupg 

Hai crittografato il file con la chiave pubblica di "Some Name". E cosa deve usare per un altro destinatario?
ott--

6
@ott: Non è proprio così che funziona (AFAIK). PGP crittografa il file con una chiave simmetrica e non con una chiave pubblica dei destinatari. Quindi crittografa in modo separato diverse copie di quella chiave simmetrica utilizzando la chiave pubblica di ciascun destinatario.
RedGrittyBrick

@RedGrittyBrick Non conosco pgp, ma gpg lo usa --symmetricper questo. Con --recipientesso utilizza la chiave pubblica del destinatario. Potrebbe esserci più di 1 destinatario, ma deve essere eseguito in un comando, non in 2 comandi separati.
ott--

3
@ott: Ho letto che " È anche possibile crittografare un file contemporaneamente per un numero qualsiasi di destinatari multipli mediante un comando del modulogpg -e -r <name1> -r <name2> ... <file> " Non ho provato questo da solo. Si adatta a ciò che ho appreso di cripto molti anni fa, ovvero che è quasi sempre più efficiente utilizzare algoritmi simmetrici veloci per crittografare il testo del messaggio. Solo la chiave del messaggio viene crittografata utilizzando la crittografia asimmetrica lenta.
RedGrittyBrick il

Risposte:


8

Risposta breve: no

Prima di tutto, nota che se non sei uno dei destinatari, è completamente impossibile. Non hai nemmeno la possibilità di decrittografare il file, tanto meno aggiungere un destinatario. Anche se l'hai crittografato due secondi fa.

Supponendo che tu sia un destinatario, è tecnicamente possibile. Il file viene effettivamente crittografato con una chiave di sessione e la chiave di sessione viene crittografata con la chiave pubblica, quindi in teoria è possibile decrittografare la chiave di sessione e ricodificarla in chiave di un'altra persona, quindi impacchettare tutto insieme in un file proprio come se si aveva originariamente crittografato il documento per entrambe le persone.

Tuttavia, gpg non ha questa capacità . Il più vicino che puoi ottenere con gpg è

  1. Utilizzare l' --show-session-keyopzione per ottenere la chiave di sessione (che sembra anche decrittografare il file, mancando il punto in questo caso)
  2. Crittografa quella chiave di sessione sulla chiave pubblica di qualcun altro (in realtà, questo crea una nuova chiave di sessione e utilizza quella chiave di sessione per crittografare la chiave di sessione originale)
  3. Invia entrambi i file.
  4. Il destinatario può decrittografare la chiave di sessione e utilizzare --override-session-keyper decrittografare il messaggio originale.

3

1) Questa situazione è il motivo per cui crittografare un file a te stesso (così come i destinatari previsti) è sempre una buona idea. RedGrittyBrick è corretto sopra nel descrivere il funzionamento di GPG e PGP, che sfocia nella risposta nathang sopra.

2) Tuttavia, se si dispone del file originale, è meglio creare semplicemente un nuovo file crittografato per il nuovo destinatario.

Supponendo di non voler seguire il percorso della chiave di sessione dal suggerimento di nathang, se prima hai crittografato il file (come sopra nel n. 1), quindi decodificalo e quindi segui il passaggio n. 2 sopra.

Se non hai l'originale né lo hai crittografato con te stesso, non puoi recuperare i dati e non puoi crittografarli a nessun altro senza che quel primo destinatario ti rispedisca indietro una copia.


1
In realtà, non è sempre una buona idea. Vedi PGP: Includere la tua chiave pubblica come destinatario? Qualche meno sicuro? sullo scambio di stack di sicurezza delle informazioni per alcuni argomenti a favore e contro.
un CVn

0

È possibile aggiungere un altro destinatario senza prima decrittografare il file, seguito da un'altra crittografia?

Non è possibile senza decifrare affatto, ma sembra che dovrebbe essere possibile senza decrittografare in un file :

gpg -d this_file.gpg | gpg -e -r "Some Name" -r "Another Name" -o this_file.gpg

Tranne questo sembra comportare un file danneggiato (almeno a volte) perché gpgè sia leggere che scrivere nello stesso file contemporaneamente:

Invece, potresti fare quanto segue (in uno script) per evitare di dover gestire il file decrittografato:

gpg -d -o this_file.txt this_file.gpg

gpg -e \
    -r "Some Name" \
    -r "Another Name" \
    -o this_file.gpg \
    --batch --yes \
    this_file.txt

shred -u this_file.txt

shred, con l' -uopzione, sovrascrive in modo sicuro i dati di e quindi elimina il file specificato. Programmi simili esistono per altre piattaforme, come srmsu Mac OS X.

Oppure potresti scrivere il tuo script in questo modo (per gentile concessione di dave_thompson_085 ) per evitare persino di dover archiviare i dati decifrati in un file:

gpg -d this_file.gpg \
| gpg -e \
    -r "Some Name" \
    -r "Another Name" \
    -o this_file.gpg.new \
    --batch --yes

mv -f this_file.gpg.new this_file.gpg

2
Non è necessario scrivere un file temporaneo chiaro se si lascia temporaneamente il file crittografato in posizione: gpg -d file.gpg | gpg -e ... -o file.new; mv file.new file.gpgo il suo mirror mv file.gpg file.old; gpg -d file.old | gpg -e ... -o file.gpg. O (forse anche) abilmente basta mantenere il vecchio inode :{ rm file.gpg; gpg -d /dev/fd/3; } 3<file.gpg | gpg -e ... -o file.gpg
dave_thompson_085

@ dave_thompson_085 Interessante - grazie!
Kenny Evitt,
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.