¿Cómo se construyen los mensajes PGP? [cerrado]

1

Recientemente he descubierto que openPGP, el protocolo que utiliza GnuPG, utiliza un sistema criptográfico híbrido al generar una clave de sesión aleatoria, que encripta el mensaje con una clave fuerte y simétrica, antes de encriptar la clave de sesión con los destinatarios públicos. llave.

Cuando ves un mensaje PGP real, ves lo que aparece en un bloque grande de caracteres base64 entre un encabezado claro y un pie de página. Sin embargo, si el texto cifrado del mensaje y el texto cifrado de la clave de sesión se envían uno junto al otro, ¿por qué aparece un mensaje PGP como un gran bloque de texto?

    
pregunta user4191887 07.11.2016 - 17:49
fuente

1 respuesta

2

Los mensajes PGP vienen en un formato binario sin formato que comprende varios paquetes como se especifica en RFC 4880 . No hay nada emocionante acerca de la sintaxis. Por ejemplo, cada paquete en un mensaje consiste en un encabezado y un cuerpo con el primer byte del encabezado que es la etiqueta del encabezado , etc. Puede diseccionar un mensaje PGP como lo haría con un paquete TCP .

Lo que identificaste como "un gran bloque de base64" se llama una armadura ASCII . Como sugiere su nombre y @SteffenUllrich señaló, protege el mensaje para que no se corrompa durante la transferencia representándolo con caracteres ASCII imprimibles. Todo lo que hace es basar 64 en el formato OpenPGP.

Si quisiera analizar un mensaje blindado ASCII, primero lo descodificaría y luego analizaría el flujo binario contenido según la especificación de sintaxis.

De la sección 2.4 de la RFC:

2.4.  Conversion to Radix-64

   OpenPGP's underlying native representation for encrypted messages,
   signature certificates, and keys is a stream of arbitrary octets.
   Some systems only permit the use of blocks consisting of seven-bit,
   printable text.  For transporting OpenPGP's native raw binary octets
   through channels that are not safe to raw binary data, a printable
   encoding of these binary octets is needed.  OpenPGP provides the
   service of converting the raw 8-bit binary octet stream to a stream
   of printable ASCII characters, called Radix-64 encoding or ASCII
   Armor.
    
respondido por el Arminius 07.11.2016 - 18:52
fuente

Lea otras preguntas en las etiquetas