it-swarm-eu.dev

Crittografare lo stesso file con GnuPG e la stessa chiave produrrà lo stesso testo cifrato?

Se crittografo lo stesso file due volte con GnuPG, usando la stessa chiave, otterrò lo stesso risultato? o sta usando qualche segmento random/psudeo-random per migliorare la sicurezza come rsynccrypto?

41
Didi Kohen

In generale, no, crittografare lo stesso file con la stessa chiave non produrrà lo stesso file, per tre motivi:

  • formato OpenPGP (implementato da GnuPG) utilizza crittografia ibrida : una chiave casuale simmetrica viene crittografata con la chiave pubblica del destinatario ( di tipo RSA o ElGamal) e tale chiave simmetrica viene utilizzata per crittografare il corpo del messaggio con un algoritmo di crittografia simmetrica. La crittografia ibrida viene utilizzata perché la crittografia asimmetrica è molto limitata nel suo intervallo (ad es. Una chiave RSA a 2048 bit non può crittografare più di 245 byte in una volta sola) e ha un overhead elevato (sia nella CPU che nella dimensione del messaggio risultante). Poiché la chiave simmetrica non viene salvata da nessuna parte sul lato del mittente, ogni volta verrà creata una nuova chiave casuale, che sarà diversa con una probabilità schiacciante.

  • La stessa crittografia asimmetrica è randomizzata. Ad esempio, con RSA , il riempimento include byte casuali. Ciò è necessario "in generale", perché la chiave pubblica è pubblica, quindi tutti la conoscono; se la crittografia fosse deterministica, gli aggressori potrebbero eseguire una ricerca esaustiva sul messaggio . Questo non sarebbe un problema nel caso specifico di OpenPGP (il messaggio è una chiave casuale, abbastanza grande da sconfiggere la ricerca esaustiva da solo), ma gli standard per RSA o ElGamal hanno un ambito più ampio e includono un riempimento casuale.

  • Quando si esegue la crittografia simmetrica stessa, viene utilizzato un IV casuale e sarà diverso (con una probabilità schiacciante) per ogni invocazione. Vedere sezione 5.7 per i dettagli.

Il terzo punto si applica anche quando si esegue la crittografia basata su password (la crittografia viene eseguita con una password, non con la chiave pubblica di un destinatario). La crittografia basata su password aggiunge anche una quarta randomizzazione, ovvero salt nella trasformazione da password a chiave .

50
Thomas Pornin

La crittografia GnuPG non è deterministica e quindi restituirà un output diverso per ogni corsa. La crittografia, quindi la decrittografia è ovviamente deterministica e restituirà sempre gli stessi contenuti.

Spiegazione:

GnuPG utilizza la crittografia asimmetrica, che è lenta durante la crittografia di enormi quantità di dati. Per questo motivo, utilizza la chiave privata per crittografare un codice a blocchi casuale che viene nuovamente utilizzato per crittografare i dati.

Ogni volta che stai crittografando i dati, verrà generato un nuovo codice a blocchi casuale, quindi i dati crittografati appariranno diversi.

Ho crittografato due volte lo stesso documento e calcolato i checksum MD5 dopo ogni crittografia:

$ gpg --encrypt test.txt
$ md5 test.txt.gpg
MD5 (test.txt.gpg) = f2f6a07e0d7ae9899315d0471c2596bc
$ gpg --encrypt test.txt
$ md5 test.txt.gpg
MD5 (test.txt.gpg) = b57d4c360b1c3c6b2202ce6c3d32cdd8
22
Jens Erat