Resumen

  • RFC 2015 llevó PGP al marco multipart/signed: una parte MIME legible y una firma separada, pero calculada también sobre los encabezados de esa primera parte.
  • Las pasarelas que cambiaban ocho bits, finales CRLF, espacios o líneas From podían conservar el aspecto del mensaje y romper la relación criptográfica.
  • El resultado del verificador prueba una relación limitada entre bytes, firma y clave; identidad, intención, entrega y autoridad requieren registros distintos.

El cambio respecto de los primeros formatos PGP/MIME fue práctico. Con application/pgp, recuperar el contenido podía exigir analizar las estructuras internas de PGP. El modelo de RFC 1847 ofrecía una envoltura neutral: dos partes, la primera con el objeto firmado y la segunda con el material de control. RFC 2015 usó application/pgp-signature para la segunda. Así, entender MIME no obligaba a entender todo PGP.

Sin embargo, “legible” no significaba “libre para reescribir”. Para texto, la secuencia normativa era parte del control: escoger la representación, convertir los saltos de línea a CRLF, aplicar la codificación de transferencia, añadir los encabezados MIME de contenido y sólo después firmar encabezados y datos. Si se cambiaba el orden, se firmaba otro objeto.

Los encabezados estaban dentro de la frontera porque también gobiernan el significado. Cambiar Content-Type o Content-Transfer-Encoding podía hacer que los mismos octetos se interpretaran de otra manera. Proteger únicamente las frases visibles habría dejado modificable su etiqueta operativa.

El viejo correo de siete bits creó el conflicto decisivo. Una pasarela podía transformar ocho bits en Quoted-Printable o Base64 para alcanzar el siguiente sistema. Desde el punto de vista de la entrega era una mejora; desde el punto de vista de la firma era una sustitución del objeto. Por eso RFC 2015 exigió que el contenido firmado ya fuese seguro para siete bits antes de calcular la firma.

Incluso detalles heredados de los buzones importaban. Una línea que empezaba por From podía escaparse con >. Un salto entre redes podía quitar espacios finales. RFC 2015 codificó esos casos en su ejemplo, y RFC 3156 refinó después las reglas de espacios, CRLF y línea final. La normalización no era limpieza cosmética: era la construcción de una entrada reproducible.

El contenido sólo cifrado podía mantener ocho bits porque el receptor obtenía los datos al descifrar un bloque opaco. La firma separada planteaba otra tarea: el receptor ya tenía una parte visible y debía volver a calcular exactamente el mismo resumen. El cifrado posterior tampoco liberaba al objeto firmado interior de esta disciplina.

RFC 2480 mostró lo que ocurría cuando la interoperabilidad exigía desmontar el objeto. Una pasarela hacia un entorno incapaz de MIME debía ofrecer el túnel intacto, y también podía exponer el contenido sabiendo que arruinaba la firma. En ese caso debía conservar la firma y avisar de la pérdida. Firmar de nuevo en nombre del usuario no era una conversión inocua: transfería custodia de claves y autoridad a la pasarela, por lo que no debía activarse por defecto.

Una firma válida, entonces, no es una biografía ni un acuse de recibo. Dice que cierto verificador reconstruyó cierto objeto y validó una firma con cierta clave. Sólo una política de confianza aparte permite asociar esa clave con una identidad o un cargo. Tampoco una verificación fallida identifica la causa: alteración maliciosa, conversión benigna, almacenamiento dañado, clave equivocada y error de construcción pueden producir el mismo resultado negativo.

RFC 2015 hizo visible una condición de toda evidencia digital: antes de preguntar quién firmó, hay que saber qué representación sobrevivió al camino.

Fuentes