¿Por qué el tamaño del mensaje cifrado GPG no es proporcional al número de destinatarios y al tamaño del archivo?

3

Me he dado cuenta de que cuando uso GnuPG para cifrar un archivo para múltiples destinatarios, el tamaño del mensaje cifrado no parece ser directamente proporcional al número de destinatarios.

Por ejemplo, un archivo que probé tiene 836 bytes en texto sin formato.

  • cifrado para 1 destinatario, es de 1090 bytes
  • cifrado para 2 destinatarios, es 1619 bytes (810 bytes por destinatario)
  • cifrado para 9 destinatarios, es 4738 bytes (526 bytes por destinatario)
  • cifrado para 51 destinatarios, 26,397 bytes (517 bytes por destinatario)

Dado que los datos cifrados deben parecer aleatorios, creo que la diferencia no se debe a la compresión. No todas las 51 claves son del mismo tamaño / algoritmo de clave, pero no veo cómo esto podría explicar un tamaño de archivo promedio tan dramático.

¿Cómo es posible que pueda cifrar un archivo de 836 bytes para 51 personas, para que todos puedan descifrar mi archivo a su tamaño original sin agregar al menos 836 bytes por destinatario?

    
pregunta rose 05.12.2014 - 23:10
fuente

2 respuestas

6

Porque el mensaje completo no está cifrado por separado para cada destinatario.

En su lugar, se elige aleatoriamente una sola clave de cifrado simétrica, el mensaje se cifra una vez utilizando esa clave y, a continuación, la clave de cifrado se encripta por separado para cada destinatario, utilizando la clave pública de ese destinatario, y se anexa al mensaje cifrado.

Cada destinatario descifra el mensaje utilizando primero su clave privada para descifrar el cifrado simétrico, y luego descifra el mensaje utilizando esa clave.

Dado que las claves suelen ser mucho más cortas que el texto simple, esto ahorra mucho espacio. (También les permite a los destinatarios saber que todos han descifrado el mismo mensaje. Si los mensajes se cifraron por separado para el destinatario, un remitente engañoso podría enviar mensajes diferentes a cada destinatario, simulando que eran todas copias al carbón del mismo mensaje).

Con sus datos, al agregar el segundo destinatario se agregaron 527 bytes. El segundo destinatario probablemente tenía una clave de 512 bytes, más 15 bytes para identificar al destinatario. Los destinatarios sucesivos tendrán diferentes longitudes de clave y datos de identificación diferentes, por lo que la cantidad agregada para cada uno variará.

    
respondido por el ganbustein 05.12.2014 - 23:33
fuente
1

Sistemas de cifrado híbridos

OpenPGP define un sistema de encriptación híbrido , que combina lo mejor de la encriptación asimétrica (clave pública) y la encriptación simétrica. Si bien el cifrado asimétrico es excelente en la administración de claves, es muy lento para cifrar grandes cantidades de datos; el cifrado simétrico, por otro lado, requeriría el intercambio de claves con todas las personas con las que desea comunicarse de manera individual, pero tiene un gran rendimiento.

Los sistemas de encriptación híbrida usan encriptación asimétrica para encriptar una clave aleatoria para encriptación simétrica, mientras que el mensaje real está encriptado simétricamente. En OpenPGP, esta clave se denomina clave de sesión .

Receptores múltiples

Esto tiene otra ventaja: si se deben abordar múltiples destinatarios, no es necesario cifrar el mensaje varias veces. En su lugar, todo lo que debe hacerse es cifrar la clave de sesión para todos. Puede observar esto mirando los paquetes contenidos en un archivo después de cifrar a varias personas (aquí, pgpdump ofrece la mejor salida en comparación con 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))

El Paquete de claves de sesión encriptadas de clave pública está contenido en twize, una vez para cada clave (sub) de encriptación. El tamaño diferente puede explicarse por los diferentes tamaños de clave (RSA 2048k vs RSA 4096k para las subclaves). Los datos están ocultos en el Cifrado simétrico y el paquete MDC .

    
respondido por el Jens Erat 06.12.2014 - 01:33
fuente

Lea otras preguntas en las etiquetas