Confusión en la descripción de la etiqueta OpenPGP 18/19

¿Alguien puede aclararme un poco de MDC y el cifrado de datos? en rfc 4880, dice:

El texto sin formato de los datos que se van a cifrar se pasa a través de la función hash SHA-1, y el resultado del hash se agrega al texto sin formato en un paquete de código de detección de modificación. La entrada a la función hash incluye los datos de prefijo descritos anteriormente; incluye todo el texto sin formato y luego también incluye dos octetos de valores 0xD3, 0x14. Estos representan la codificación de una etiqueta de paquete de código de detección de modificación y un campo de longitud de 20 octetos.

al principio, parece que el mdc (sin sus datos de encabezado) es solo: sha1([data]) -> hash_value

luego, la segunda oración hasta el punto y coma hace que parezca sha1(OpenPGP_CFB_extra_data + [data]) -> hash_value

las cosas después del punto y coma hacen que parezca que se supone que debo hacer sha1([data] + "\xd3\x14") -> hash_value. (esto no tiene ningún sentido, pero parece ser lo que está escrito)

¿Que esta pasando?

después de obtener el MDC correcto, ¿qué se hace con él? ¿Es su propio paquete, o algo como esto (según mi entendimiento) hecho ?:

tag18_header + encrypt(plaintext + "\xd3\x14" + 20 byte hash)

preguntado el 16 de mayo de 11 a las 17:05

1 Respuestas

Despues de leer RFC 4880 y partes de la GnuPG código fuente (g10 / cipher.c parece ser el lugar donde se maneja esto), interpreto que es así:

  • 0xd3 es la etiqueta del paquete MDC.
  • 0x14 es la longitud del paquete MDC (20 bytes).

El hash MDC se calcula así:

MCD_hash = SHA-1(OpenPGP_CFB_extra_data + [plaintext] + "\xd3\x14")

Luego, esto se agrega al mensaje de texto sin formato y se cifra:

encrypt(OpenPGP_CFB_extra_data + [plaintext] + "\xd3\x14" + MDC_hash)

Cuando se descifra, este hash se verifica calculando SHA-1 de todo menos los últimos 20 bytes y comparando el resultado con los últimos 20 bytes, como escribe RFC 4880 (la página de 50):

Durante el descifrado, los datos de texto sin formato deben tener hash con SHA-1, incluyendo los datos del prefijo, así como el etiqueta de paquete y campo de longitud del paquete de código de detección de modificación. El cuerpo del paquete MDC, tras el descifrado, se compara con el resultado del hash SHA-1.

contestado el 25 de mayo de 11 a las 23:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.