¿Puedo verificar quién puede descifrar mi mensaje GPG después de cifrarlo?

14

Cuando envíe, digamos, una gran receta para el pastel de embudo a Alice y Bob usando GPG, puedo estar bastante seguro de que ambos podrán descifrarlo. Sin embargo, ¿puedo estar seguro, o probar después del hecho, que ellos serán los únicos que podrán? *

Contexto : asumí que esto era fácil: los mensajes gpg tienen una lista de posibles ID de claves de descifrado, que creo que siempre se garantizó que estaban completas. Sin embargo, luego me topé con la opción --try-all-secrets para gpg y ahora ya no estoy seguro. Si entiendo las opciones correctamente, puedo tener una clave que puede descifrar el mensaje, pero no está en la lista "pública" de destinatarios. La lista "pública" puede tener una ID de clave de todos los ceros para mostrar que está pasando algo, pero parece que no siempre es necesario. Entonces, eso me hizo pensar ...

Pregunta : ¿Podría saber (solo en base a la salida cifrada) si alguien ha modificado mi versión de gpg para agregar secretamente a Eve como destinatario anónimo? ¿Debería ser uno de los destinatarios para poder contar?

Sé que este escenario probablemente nunca ocurra en la práctica, y si un atacante pudiera reemplazar su gpg binary, este escenario probablemente sea el menor de sus preocupaciones, pero todavía tengo curiosidad.

*: Suponiendo que, por supuesto, sus claves privadas se mantienen privadas, nadie saca la manguera de goma o le paga a Alice para compartir la receta ganadora, y así sucesivamente.

    
pregunta Wander Nauta 03.04.2015 - 02:24
fuente

1 respuesta

18

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.
respondido por el Jander 03.04.2015 - 09:47
fuente

Lea otras preguntas en las etiquetas