it-swarm.dev

Quali informazioni trapelano da un file crittografato OpenPGP?

Se un utente malintenzionato ottiene un file che è stato crittografato utilizzando una chiave pubblica OpenPGP, quali informazioni può dedurre l'autore dell'attacco?

Ad esempio, in quale misura l'autore dell'attacco può dedurre l'identità del destinatario previsto?

29
Flimm

L'ID chiave del destinatario è incluso in testo normale nel file crittografato. Altre informazioni forse interessanti "nascoste in bella vista" sono solo le dimensioni del file o il nome del file crittografato (se qualcuno lo invia senza alterazioni, ovviamente.)

Quello che potresti non capire è che l'ID chiave del destinatario è effettivamente un campo opzionale. Sezione 5.1 continua dicendo:

Un'implementazione può accettare o utilizzare un ID chiave pari a zero come ID chiave "jolly" o "speculativo". In questo caso, l'implementazione ricevente proverà tutte le chiavi private disponibili, verificando una chiave di sessione decifrata valida. Questo formato consente di ridurre l'analisi del traffico dei messaggi.

Puoi crittografare usando -R (o --hidden-recipient) contrassegna con gpg per evitare di rivelare la chiave pubblica del destinatario in un messaggio crittografato.

$ gpg -e -R [email protected] message.txt
$ $ gpg --verbose --verbose --decrypt message.txt.gpg 
:pubkey enc packet: version 3, algo 1, keyid 0000000000000000
    data: [2047 bits]
gpg: public key is 00000000
gpg: anonymous recipient; trying secret key aaaaaaaa ...
gpg: anonymous recipient; trying secret key bbbbbbbb ...
gpg: anonymous recipient; trying secret key cccccccc ...

:encrypted data packet:
    length: 76
    mdc_method: 2
gpg: encrypted with RSA key, ID 00000000
gpg: decryption failed: secret key not available
$

A questo punto, gpg scorre tutte le chiavi private che sta tentando di ottenere una chiave di sessione valida, poiché non è in grado di identificare la chiave pubblica utilizzata per la crittografia. Tuttavia, vedi anche questa risposta per sapere come differenziare i destinatari se l'attaccante ha accesso a un gran numero di messaggi.

Un lato pratico: gli indizi secondari possono trovarsi in vari registri. Ad esempio, un utente malintenzionato che ottiene tale messaggio potrebbe anche essere in grado di accedere (ad esempio) a .bash_history file con l'indirizzo del destinatario o un registro del web server con indirizzi IP che fornisce indizi su chi ha POST o chi ottiene il file, ecc.

26
kbs

Secondo RFC per il formato del messaggio OpenPGP, sezione 5.1 , ogni messaggio crittografato OpenPGP contiene almeno un pacchetto di chiavi di sessione crittografate a chiave pubblica, che a sua volta contiene queste informazioni di testo semplice:

  • l'ID chiave della chiave pubblica (secondaria) utilizzata per crittografare il messaggio, lunga otto ottetti. Questo può essere usato per dedurre l'identità del destinatario previsto .
  • un numero di un ottetto che identifica l'algoritmo a chiave pubblica utilizzato
  • un numero di versione del tipo di pacchetto

Se sono stati specificati più destinatari, saranno presenti più pacchetti di chiavi di sessione crittografate a chiave pubblica, uno per ciascun destinatario previsto.

Quindi, in sintesi, un utente malintenzionato can restringe l'identità del destinatario previsto in base a un messaggio crittografato OpenPGP.

Puoi dimostrarlo sperimentalmente a te stesso tentando di decrittografare un file in cui non hai la chiave pubblica. Come puoi vedere, gli ID chiave dei destinatari previsti, nonché il nome dell'algoritmo e il numero di versione:

$ gpg --encrypt -r '<[email protected]>' -r '<[email protected]>' --sign message.txt
$ GNUPGHOME=/tmp/empty gpg --verbose --verbose --decrypt message.txt.gpg
:pubkey enc packet: version 3, algo 16, keyid 9759103664E69CC1
    data: [2048 bits]
    data: [2047 bits]
gpg: public key is 64E69CC1
:pubkey enc packet: version 3, algo 16, keyid 9478F6114164312C
    data: [2048 bits]
    data: [2048 bits]
gpg: public key is 4164312C
:encrypted data packet:
    length: 171
    mdc_method: 2
gpg: encrypted with ELG-E key, ID 4164312C
gpg: encrypted with ELG-E key, ID 64E69CC1
gpg: decryption failed: secret key not available

Queste sono le informazioni di testo normale disponibili. Non so se siano altre informazioni che possono essere dedotte statisticamente.

12
Flimm