Posso verificare chi può decodificare il mio messaggio GPG dopo averlo crittografato?

14

Quando invio, per esempio, una grande ricetta per torta ad imbuto ad Alice e Bob usando GPG, posso essere abbastanza sicuro che entrambi saranno in grado di decrittografarlo. Tuttavia, posso essere sicuro, o provare dopo il fatto, che saranno gli unici a poter? *

Contesto : ho pensato che fosse facile: i messaggi gpg hanno una lista di possibili ID delle chiavi di decrittografia, che ho sempre pensato fosse completo. Tuttavia, mi sono imbattuto nell'opzione --try-all-secrets per gpg e ora non ne sono più sicuro. Se comprendo correttamente le opzioni, posso avere una chiave in grado di decifrare il messaggio, ma non è nella lista "pubblica" dei destinatari. L'elenco "pubblico" potrebbe avere un ID di chiave a zero per mostrare che c'è qualcosa in corso ma sembra che non sia sempre necessario. Quindi, questo mi ha fatto pensare ...

Domanda : Sarei in grado di dire (basato solo sull'output crittografato) se qualcuno ha modificato la mia versione di gpg per aggiungere segretamente Eve come destinatario anonimo? Dovrei essere uno dei destinatari per poterlo dire?

So che questo scenario probabilmente non si verificherebbe mai nella pratica e se un utente malintenzionato fosse in grado di sostituire il tuo gpg binario questo scenario sarebbe probabilmente l'ultima delle tue preoccupazioni, ma sono comunque curioso.

* Assumendo ovviamente che le loro chiavi private siano private, nessuno tocchi il tubo di gomma o paghi ad Alice per condividere la ricetta vincente, e così via.

    
posta Wander Nauta 03.04.2015 - 02:24
fonte

1 risposta

19

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.
risposta data 03.04.2015 - 09:47
fonte

Leggi altre domande sui tag