cifrado / descifrado con varias claves

110

¿Es posible cifrar datos, de modo que se puedan descifrar con varias claves diferentes?

Ejemplo:

He cifrado datos con key1, pero quiero poder descifrarlos con las claves 2, 3 y 4.

es posible?

Glen Solsberry
fuente

Respuestas:

170

GnuPG realiza el cifrado de varias claves de forma estándar.

El siguiente comando cifrará doc.txtusando la clave pública para Alice y la clave pública para Bob. Alice puede descifrar usando su clave privada. Bob también puede descifrar usando su clave privada.

gpg --encrypt --recipient [email protected] \
    --recipient [email protected] doc.txt

Esta función se detalla en la sección de la guía del usuario titulada " Cifrado y descifrado de documentos "

David Segonds
fuente
Ídem. Sería genial saber cómo hacer eso, pero no puedo encontrar ocultar ninguna página de manual en él.
MarkusQ
@Mitch, publiqué una respuesta que puede tener nuestra respuesta. (Por favor, pruebe y recomiende si es así / no, ¡MUCHO apreciado!)
pythonlarry
@MarkusQ, vea mi enlace a Mitch, arriba. Prueba / gracias si puedes! :-)
pythonlarry
Entonces, ¿esto da como resultado 1 archivo cifrado que se puede leer usando una clave privada, no 1 archivo por clave?
user8675309
7
@ user8675309, Sí. Los datos están encriptados por una clave simétrica común. Solo la clave simétrica está encriptada por la clave pública de cada destinatario. No se trata de volver a cifrar todos los datos de cada destinatario.
wisbucky
55

si es posible

Sí, es posible el cifrado para varios destinatarios. También parece lógico cuando piensas que es posible que desees poder leer lo que le has enviado a alguien y hacerlo , debe estar en la lista de destinatarios.

Línea de comando

Aquí se explica cómo hacerlo a través de la gpglínea de comando (como se describe en la respuesta de David Segonds ):

gpg --encrypt \
  --recipient [email protected] \
  --recipient [email protected] \
clear-message.txt

Cliente GUI

Su GUI debe proporcionar una forma de cifrar para varias personas

Mecanismo

Hay una pregunta sobre seguridad de la información , tamaño de archivo GPG con varios destinatarios. , que explican el mecanismo de cifrado :

GPG cifra el archivo una vez con una clave simétrica, luego coloca un encabezado que identifica el par de claves de destino y una versión cifrada de la clave simétrica.

[...] Cuando se encripta para varios destinatarios, este encabezado se coloca varias veces, lo que proporciona una versión encriptada de la misma clave simétrica para cada destinatario .

Édouard López
fuente
4
un agradecimiento especial por las dos últimas frases: ¡dejaron todo exactamente claro ahora!
radistao
31

Los clientes GnuPG y PGP en general generalmente cifran los datos reales con una clave simétrica llamada "clave de sesión". Luego, la clave de sesión se cifra con cada "clave de destinatario" (es decir, las que especifica con -r / - destinatario). Esto a veces se denomina cifrado híbrido. . En este momento, creo que GnuPG de forma predeterminada usa claves de sesión de 256 bits y AES para cifrar los datos de texto sin formato en esa clave de sesión AES-256, y las claves de su destinatario son su RSA / DSA / ECDSA / etc. clave asimétrica en este caso.

Una razón para hacerlo de esta manera es que los algoritmos criptográficos simétricos como AES son generalmente mucho más rápidos que los asimétricos como RSA. Por lo tanto, GnuPG solo tiene que cifrar ~ 256 bits (la clave de sesión) con RSA, y puede usar AES para cifrar los datos (¡tan grandes como desee!) Con esa clave de sesión. Las máquinas Intel incluso tienen una instrucción incorporada, AES-NI , para realizar algunos pasos del algoritmo en el hardware, lo que hace que GnuPG sea más ágil en el cifrado / descifrado de datos.

Otra razón para hacerlo de esta manera es que permite que los documentos cifrados con PGP se cifren para varias partes sin tener que duplicar el tamaño del documento. Tenga en cuenta que cuando especifica varios destinatarios para un documento cifrado (p. Ej.gpg -ea -r Alice -r Bob -o ciphertext.asc ), el documento cifrado que se almacena (ciphertext.asc) no es el doble de grande que si lo acabara de cifrar a Alice.

Consulte también el --show-session-keyparámetro en la página de manual de gpg para poder descifrar solo la clave de sesión, por ejemplo, para permitir que un tercero descifre un documento que le está cifrado sin tener que transferirle su clave privada o los datos de texto sin formato.

hago
fuente
1
Gracias por la explicación de que el documento cifrado no es n veces mayor, donde n es el número de firmantes.
theartofbeing
4

Si es posible. Para empezar, el "cifrado de varias partes" de Google.

AFAIK, sin embargo, no hay que colocarlos y usarlos en paquetes.

- MarkusQ

PD: Para un bosquejo de cómo se podría hacer, considere esto. El mensaje cifrado consta de:

  • la carga útil, cifrada con un pad de un solo uso
  • el bloc de notas único, cifrado con key1
  • el teclado de un solo uso, encriptado con key2
  • ...
  • el teclado de un solo uso, encriptado con keyN

El destinatario que tiene la tecla i simplemente descifra su copia del pad con su clave y luego descifra la carga útil.

Sin embargo, esto es solo una prueba de que podría hacerse y sería una mierda como una implementación real. Si es posible, debe evitar utilizar su propio cifrado. Si no entiende por qué, definitivamente debería evitar utilizar su propio cifrado.

----- Editar ------------

Si me equivoco y las herramientas Gnu hacen eso, úselas. Pero parece que no puedo encontrar ninguna información sobre cómo hacerlo.

MarkusQ
fuente
1
Lo que podría ser malo de esto es que una vez que conoces el pad de un solo uso, tienes un texto sin formato conocido, junto con los valores encriptados para otras claves. Con esta información, podría facilitar la búsqueda de las otras claves.
Kibbee
2
Buscar en Google "encriptación multipartita" no aparece mucho. Es probable que tenga más suerte con el "cifrado de transmisión", que también abarca este caso.
staktrace
1
@Kibbee: Las claves no son secretas, son públicas. Por lo tanto, no importa que sea más fácil descubrir cuáles son. (Estos esquemas solo se usan con claves que solo se pueden usar para cifrar, no para descifrar).
David Schwartz
5
Estoy bastante seguro de que las implementaciones reales no usan un bloc de notas compartido de un solo uso (que debería ser tan grande como el texto sin formato y el texto cifrado, duplicando así el tamaño del mensaje), sino que en realidad usan una clave de cifrado simétrica compartida (que suele ser mucho más pequeño que el mensaje).
Joachim Sauer
-16

El RSA de varias claves (más de dos) es tal vez así: bueno, no soy un matemático, por lo que este algoritmo no es necesariamente seguro, solo quiero dar una idea con él.

m = p * q * r; p, q, r son números primos grandes

fi (m) = (p-1) (q-1) (r-1)

d == (e1 * e2 * e3 * ... * ei) ^ (- 1) (mod fi (m)); e1 ... ei son números arbitrarios, d se calcula para cumplir la ecuación

y1 == x ^ e1 (mod m)

y2 == y1 ^ e2 (mod m)

y3 == y2 ^ e3 (mod m)

...

x == yi ^ d (mod m)

Este algoritmo podría usarse, por ejemplo, para aumentar la velocidad de The Onion Router.

IQfighter
fuente