No necesariamente puede decirle a quién que puede descifrar un archivo GPG dado mirándolo, pero asumiendo que nadie tiene ningún conocimiento aparte de sus propias claves privadas y el archivo cifrado en sí mismo, es posible decirlo cuántas personas pueden.
Cuando cifras un mensaje, GPG genera una clave simétrica aleatoria, llamada "clave de sesión", y la usa para cifrar el mensaje. Luego hace un montón de copias de la clave de sesión y cifra cada una bajo una clave pública diferente, una para cada destinatario. A continuación, empaqueta todos estos "paquetes de claves encriptados" junto con el mensaje encriptado utilizando el formato de contenedor OpenPGP .
Lo importante es que si todo lo que tiene es el archivo cifrado, tiene que poder descifrar al menos uno de estos paquetes de clave de sesión cifrados para llegar al mensaje.
Puede listar todos los paquetes en un archivo encriptado usando el 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:
...
(El indicador --batch
evita que GPG me pida mi frase de contraseña, para que no pueda descifrar nada. Si está ejecutando un agente de GPG, tomará más que eso).
Esos "paquetes cifrados de pubkey" son paquetes de clave de sesión cifrados que se leyeron desde el archivo. El que tiene "keyid 123ABCDE0987654F" es un destinatario normal; la ID de la clave es una sugerencia para decirle qué clave se puede usar para descifrar el paquete. El que tiene "keyid 0000000000000000" es un destinatario anónimo: usted no sabe qué clave la descifra, pero sabe que está allí esperando a ser descifrado por algo . Si su gpg
se modificó para agregar a Eve como un destinatario anónimo, esto es lo que vería al inspeccionar el archivo .gpg con un binario limpio gpg
. También es lo que verías si agregaras un destinatario anónimo a propósito.
Sin embargo, si Eve es un poco más inteligente, hay un par de formas para ocultar aún más a los destinatarios:
- El valor keyid listado podría ser una mentira. El keyid de todos los ceros es solo una convención, y el keyid normal es solo una pista: podría haber cualquier cosa allí. Eve podría etiquetar su paquete de claves encriptadas usando el código de Bob y reemplazar el paquete legítimo de Bob con el de ella. Parecería un paquete para Bob, pero si intentara usarlo, el descifrado fallaría. Sólo Bob sería capaz de comprobar esto. La marca
--try-all-secrets
está relacionada de alguna manera, y podría ser útil si el keyid estaba accidentalmente equivocado.
- Eve no tiene que poner su paquete de claves en el archivo, ni siquiera crear un paquete de claves cifradas para sí misma. Pruebe las marcas
--show-session-key
y --override-session-key
en un archivo ficticio sin datos confidenciales. Esto le permitirá manejar la clave de sesión directamente en lugar de mantenerla oculta en paquetes de clave cifrada. Si Eve reemplazó su binario gpg
, podría (por ejemplo) que le envíe por correo electrónico la clave de sesión de cada archivo que cifre, junto con un hash de los datos cifrados para una fácil identificación. Esto viola el supuesto "sin conocimiento previo" de antes, pero sentí que la existencia de estas banderas hace que valga la pena mencionarlo.