Sistemi di crittografia ibridi
OpenPGP definisce un sistema di crittografia ibrido , che combina il meglio della crittografia asimmetrica (chiave pubblica) e della crittografia simmetrica. Mentre la crittografia asimmetrica è ottima per la gestione delle chiavi, è molto lenta per la crittografia di grandi quantità di dati; la crittografia simmetrica d'altra parte richiederebbe lo scambio di chiavi con tutti quelli con cui si desidera comunicare individualmente, ma ha prestazioni eccezionali.
I sistemi di crittografia ibrida utilizzano la crittografia asimmetrica per crittografare una chiave casuale per la crittografia simmetrica, mentre il messaggio effettivo è simmetricamente crittografato. In OpenPGP, questa chiave è chiamata chiave di sessione .
Destinatari multipli
Questo ha un altro vantaggio: se devono essere indirizzati più destinatari, non è necessario crittografare il messaggio più volte. Invece, tutto ciò che deve essere fatto è la crittografia della chiave di sessione per tutti. Puoi osservare ciò osservando i pacchetti contenuti in un file dopo averli crittografati a più persone (qui, pgpdump
offre l'output migliore rispetto a gpg --list-packets
):
echo 'foo' | gpg --recipient a4ff2279 --recipient d745722b --encrypt | LANG=C pgpdump
Old: Public-Key Encrypted Session Key Packet(tag 1)(524 bytes)
New version(3)
Key ID - 0xCC73B287A4388025
Pub alg - RSA Encrypt or Sign(pub 1)
RSA m^e mod n(4093 bits) - ...
-> m = sym alg(1 byte) + checksum(2 bytes) + PKCS-1 block type 02
Old: Public-Key Encrypted Session Key Packet(tag 1)(268 bytes)
New version(3)
Key ID - 0xDAA855623A5E68F7
Pub alg - RSA Encrypt or Sign(pub 1)
RSA m^e mod n(2046 bits) - ...
-> m = sym alg(1 byte) + checksum(2 bytes) + PKCS-1 block type 02
New: Symmetrically Encrypted and MDC Packet(tag 18)(63 bytes)
Ver 1
Encrypted data [sym alg is specified in pub-key encrypted session key]
(plain text + MDC SHA1(20 bytes))
Il pacchetto chiave di sessione crittografato a chiave pubblica è contenuto twize, una volta per ogni chiave di crittografia (sotto). Le diverse dimensioni possono essere spiegate dalle diverse dimensioni dei tasti (RSA 2048k vs RSA 4096k per le sottochiavi). I dati sono nascosti in Pacchetto crittografato simmetricamente e MDC .