Non puoi necessariamente dire a chi può decodificare un determinato file GPG guardandolo, ma supponendo che nessuno abbia alcuna conoscenza oltre alle proprie chiavi private e al file crittografato stesso, è possibile dire quante persone possono.
Quando crittografate un messaggio, GPG genera una chiave simmetrica casuale, chiamata "chiave di sessione", e la utilizza per crittografare il messaggio. Quindi esegue un mucchio di copie della chiave di sessione e le crittografa con una chiave pubblica diversa, una per ciascun destinatario. Quindi pacchetti tutti questi "pacchetti chiave" crittografati insieme al messaggio crittografato utilizzando il formato contenitore OpenPGP .
La cosa importante è che se tutto quello che hai è il file crittografato, devi essere in grado di decifrare almeno uno di questi pacchetti di chiavi di sessione crittografati per poter accedere al messaggio.
Puoi elencare tutti i pacchetti in un file crittografato usando il comando gpg --list-packets
:
$ gpg --batch --list-packets myfile.gpg
:pubkey enc packet: version 3, algo 16, keyid 0000000000000000
data: [2048 bits]
data: [2046 bits]
gpg: anonymous recipient; trying secret key ABCDE123 ...
:pubkey enc packet: version 3, algo 16, keyid 123ABCDE0987654F
data: [2048 bits]
data: [2046 bits]
:encrypted data packet:
...
(Il flag --batch
impedisce a GPG di chiedermi la mia passphrase, in modo che non possa decrittografare nulla. Se stai utilizzando un agente GPG, ci vorrà più di quello.)
Quei "pacchetti crittografati da pubkey" sono pacchetti di chiavi di sessione crittografati che sono stati letti dal file. Quello con "keyid 123ABCDE0987654F" è un normale destinatario; l'ID della chiave è un suggerimento per dirti quale chiave può essere usata per decifrare il pacchetto. Quello con "keyid 0000000000000000" è un destinatario anonimo: non sai quale chiave lo decodificherà, ma sai che è lì in attesa di essere decifrato da qualcosa . Se la tua gpg
è stata modificata per aggiungere Eve come destinatario anonimo, questo è ciò che vedresti durante l'ispezione del file .gpg utilizzando un binario gpg
pulito. È anche quello che vedresti se avessi aggiunto un destinatario anonimo di proposito.
Se Eve è un po 'più intelligente, però, ci sono un paio di modi per nascondere ulteriormente i destinatari:
- Il valore keyid elencato potrebbe essere una bugia. Il keyid all-zero è solo una convenzione e il normale keyid è solo un suggerimento: potrebbe esserci qualcosa. Eve potrebbe etichettare il suo pacchetto chiave crittografato usando il keyid di Bob e sostituire il legittimo pacchetto di Bob con il suo. Sembrerebbe un pacchetto per Bob, ma se tentasse di usarlo, la decifrazione fallirebbe. Solo Bob sarebbe in grado di controllarlo. Il flag
--try-all-secrets
è in qualche modo correlato e potrebbe essere utile se il keyid fosse accidentalmente sbagliato.
- Eve non deve mettere il suo pacchetto chiave nel file, o addirittura creare un pacchetto chiave crittografato per se stesso. Prova i flag
--show-session-key
e --override-session-key
su un file fittizio senza dati sensibili. Questi ti permetteranno di gestire direttamente la chiave di sessione invece di tenerla nascosta nei pacchetti chiave crittografati. Se Eve ha sostituito il tuo gpg
binario, potrebbe (ad esempio) inviarle tramite email la chiave di sessione di ogni file che crittografate, insieme a un hash dei dati crittografati per una facile identificazione. Ciò viola il presupposto della "non conoscenza preliminare" di prima, ma ho sentito che l'esistenza di queste bandiere ha reso degno di menzione.