¿Es posible agregar un destinatario a un archivo ya cifrado en GPG?


12

Asumiendo que he encriptado un archivo (posiblemente grande) usando GPG; p.ej

gpg --recipient "Some Name" -o this_file.gpg --encrypt this_file.txt

¿Es posible agregar otro destinatario sin descifrar primero el archivo, seguido de otro cifrado?

gnupg 

Cifró el archivo con la clave pública de "Some Name". ¿Y qué usará para otro destinatario?
ott--

66
@ott: Eso no es exactamente cómo funciona (AFAIK). PGP cifra el archivo con una clave simétrica, no con una clave pública de destinatarios. Luego, encripta por separado varias copias de esa clave simétrica utilizando la clave pública de cada destinatario.
RedGrittyBrick

@RedGrittyBrick No sé sobre pgp, pero gpg lo usa --symmetricpara eso. Con --recipientél utiliza la clave pública del destinatario. Puede haber más de 1 destinatario, pero debe hacerse en un comando, no en 2 comandos separados.
ott--

3
@ott: Leí que " También es posible cifrar un archivo simultáneamente para cualquier número de destinatarios múltiples por medio de un comando del formulariogpg -e -r <name1> -r <name2> ... <file> " Sin embargo, no lo he intentado yo mismo. Se ajusta a lo que aprendí de la criptografía hace muchos años, que es que casi siempre es más eficiente usar algoritmos simétricos rápidos para cifrar el texto del mensaje. Solo la clave del mensaje se cifra utilizando un cifrado asimétrico lento.
RedGrittyBrick

Respuestas:


8

Respuesta corta: no

En primer lugar, tenga en cuenta que si no es uno de los destinatarios, es completamente imposible. Ni siquiera tiene la capacidad de descifrar el archivo, y mucho menos agregar un destinatario. Incluso si lo cifraste hace dos segundos.

Suponiendo que es un destinatario, es técnicamente posible. El archivo en realidad está encriptado con una clave de sesión y la clave de sesión está encriptada con su clave pública, por lo que en teoría podría desencriptar la clave de sesión y volver a encriptarla a la clave de otra persona, y luego empaquetar todo en un archivo como si usted originalmente había encriptado el documento a ambas personas.

Sin embargo, gpg no tiene esta capacidad . Lo más cercano que puede obtener con gpg es

  1. Use la --show-session-keyopción para obtener la clave de sesión (que también parece descifrar el archivo, perdiendo el punto en este caso)
  2. Cifre esa clave de sesión en la clave pública de otra persona (en realidad, esto crea una nueva clave de sesión y usa esa clave de sesión para cifrar la clave de sesión original)
  3. Envía los dos archivos.
  4. El destinatario puede descifrar la clave de sesión y usar --override-session-keypara descifrar el mensaje original.

3

1) Esta situación es la razón por la cual siempre es una buena idea cifrar un archivo para usted (así como para los destinatarios previstos). RedGrittyBrick es correcto arriba al describir cómo funcionan GPG y PGP, que fluye en la respuesta de nathang arriba.

2) Sin embargo, si tiene el archivo original, es mejor que simplemente cree un nuevo archivo cifrado para el nuevo destinatario.

Suponiendo que no desea seguir la ruta de la clave de sesión de la sugerencia de nathang, si cifró el archivo para usted (como se indicó anteriormente en el n. ° 1), descifre y luego siga el paso n. ° 2 anterior.

Si no tiene el original ni lo cifró para usted, no puede recuperar los datos y no puede cifrarlos a nadie más sin que el primer destinatario le envíe una copia.


1
En realidad, no siempre es una buena idea. Ver PGP: ¿Incluyendo su clave pública como destinatario? ¿Alguna menos segura? en el intercambio de pilas de seguridad de la información para algunos argumentos a favor y en contra.
un CVn

0

¿Es posible agregar otro destinatario sin descifrar primero el archivo, seguido de otro cifrado?

No es posible sin descifrar en absoluto, pero parece que debería ser posible sin descifrar en un archivo :

gpg -d this_file.gpg | gpg -e -r "Some Name" -r "Another Name" -o this_file.gpg

Excepto que esto parece resultar en un archivo dañado (al menos a veces) porque gpgestá leyendo y escribiendo en el mismo archivo simultáneamente:

En su lugar, puede hacer lo siguiente (en un script) para evitar la necesidad de administrar el archivo descifrado:

gpg -d -o this_file.txt this_file.gpg

gpg -e \
    -r "Some Name" \
    -r "Another Name" \
    -o this_file.gpg \
    --batch --yes \
    this_file.txt

shred -u this_file.txt

shred, con la -uopción, sobrescribe de forma segura los datos y luego elimina el archivo que especifique. Existen programas similares para otras plataformas, como srmen Mac OS X.

O puede escribir su script de esta manera (cortesía de dave_thompson_085 ) para evitar incluso la necesidad de almacenar los datos descifrados en un archivo:

gpg -d this_file.gpg \
| gpg -e \
    -r "Some Name" \
    -r "Another Name" \
    -o this_file.gpg.new \
    --batch --yes

mv -f this_file.gpg.new this_file.gpg

2
No necesita escribir un archivo temporal claro si deja el cifrado en su lugar temporalmente: gpg -d file.gpg | gpg -e ... -o file.new; mv file.new file.gpgo su espejo mv file.gpg file.old; gpg -d file.old | gpg -e ... -o file.gpg. O (tal vez también) inteligentemente, simplemente mantenga el viejo inodo :{ rm file.gpg; gpg -d /dev/fd/3; } 3<file.gpg | gpg -e ... -o file.gpg
dave_thompson_085

@ dave_thompson_085 Interesante - ¡gracias!
Kenny Evitt
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.