¿Por qué es problemático el cifrado (o firma) de largas filas en correos electrónicos con PGP?

13

Estoy utilizando Thunderbird con Enigmail y OpenPGP para cifrar y / o firmar correos electrónicos. En muchas ocasiones, Enigmail se queja de que tengo líneas muy largas en el correo y me pregunta cómo debería incluirlas.

Sin embargo, esto no parece seguir ninguna tendencia lógica. A veces se queja, a veces no.

Sin embargo, mi pregunta: ¿qué importa, en primer lugar, qué tan larga es una línea? Un salto de línea no es algo muy diferente a la letra A (está bien, es un CR y un LF en la mayoría de los casos) pero el algoritmo de cifrado solo ve bytes.

Tampoco pude encontrar ninguna explicación sobre esto en la documentación.

¿Puede alguien explicar por qué los saltos de línea son problemáticos para firmar / cifrar con PGP?

    
pregunta Jens 07.08.2015 - 12:09
fuente

3 respuestas

15

No puedo hacerlo más simple que esto :

  

Esencialmente, el problema ocurre cuando Enigmail adjunta un PGP en línea   firma a un correo electrónico en el editor de mensajes HTML de Thunderbird. El HTML   compositor es un componente diferente que el compositor de texto plano, y   realiza alguna "limpieza" en el cuerpo del mensaje después de que el usuario haga clic en enviar.   Esa es una receta obvia para problemas, ya que ocurre después de la   La firma se calculó sobre el mensaje. Cualquier alteración, incluyendo   aquellos que son invisibles para el usuario (como los cambios de espacios en blanco o   reemplazar caracteres especiales con códigos de caracteres HTML) alterará la   valor hash del mensaje, que es el elemento de la firma que   está cifrada por la clave privada del remitente.

     

En este caso, la alteración que le sucede al cuerpo del mensaje es   Línea automática de envoltura. Envoltura de línea de Thunderbird para mensajes HTML   rompe líneas que exceden los 79 caracteres (o cualquiera que sea el valor del   la preferencia mailnews.wraplength está establecida en), por lo que no todos los mensajes son   afectado. En un intento de evitar este problema, Enigmail realiza su   propia envoltura de línea en el cuerpo del mensaje justo antes de generar el   firma, en mailnews.wraplength - 2.

     

Sin embargo, hay invariablemente algunas situaciones cuando un solo   "palabra" tiene más de 77 caracteres; el ejemplo más simple es un largo   URL En estas situaciones, la línea automática Thunderbird   se realiza después de que Enigmail haya procesado el mensaje divide la línea larga   en el punto mailnews.wraplength cuando se envía, por lo tanto, el   La firma ya no se valida cuando el cliente PGP del destinatario del correo electrónico   lo comprueba.

    
respondido por el user45139 07.08.2015 - 13:01
fuente
3

TL; DR: este es el legado del correo electrónico.

Ni GnuPG, ni Thunderbird, ni probablemente ninguna otra implementación de OpenPGP se preocupará por la longitud de la línea. Pero toda la infraestructura de correo electrónico lo hace.

Legado de correo electrónico

Históricamente, el límite de 78 caracteres ( RFC 2822 ) surgió debido a lo habitual Limitaciones de los caracteres que caben en una pantalla por línea. Esto se ha ido desde hace mucho tiempo; mientras que algo alrededor de este número de caracteres, o incluso algo de fiebre, resultará en una mejor legibilidad que las líneas largas de la izquierda a la derecha de su pantalla 4K de 28 ", tenemos un software un poco más inteligente y fácil de usar que rompe líneas automáticamente a límites razonables.

Pero el correo electrónico es antiguo, al igual que los servidores y clientes de correo electrónico (aún en ejecución). Todavía hay algunos en la naturaleza que no admiten largas filas, porque nunca han sido necesarios (ya que no deberían ocurrir), y pueden (podrían) fallar en el manejo de dicho correo, o agregar ellos mismos nuevas líneas arbitrarias (que se interrumpirán). firmas).

Manejo de líneas largas en OpenPGP

Por esta razón, el blindaje ASCII (conversión de radix) por correo electrónico de OpenPGP se ajusta a un máximo de 76 caracteres seguros por línea. Por otro lado, los mensajes clearsigned no se volverán a envolver en la sección de texto claro, por lo tanto, Thunderbird / Enigmail te recordarán que debes mantener ese límite de caracteres.

El correo con codificación OpenPGP / MIME (y el correo con codificación MIME en general) no conoce este problema, ya que citado- la codificación imprimible se encarga de agregar saltos de línea necesarios, que se eliminan antes de que se calcule el hash del mensaje para verificar la firma.

    
respondido por el Jens Erat 07.08.2015 - 13:03
fuente
2

En el caso de la firma clara, lo que está firmado puede no ser exactamente lo que ha escrito.

Para ser robusto ( RFC4880 ):

  • las líneas que comienzan con "-" tienen el prefijo " <SP>- " (para evitar interpretaciones erróneas)
  • los finales de línea, cualesquiera que sean, se reemplazan con <CR><LF>
  • los espacios en blanco finales se ignoran

Para cumplir con los requisitos de SMTP ( RFC5322 ):

  • las líneas de mensaje NO DEBEN tener más de 78 caracteres (más <CR><LF> )
  • las líneas de mensaje NO DEBEN tener más de 998 caracteres (más <CR><LF> )
  • las líneas de mensaje no deben contener solo un "." (la señalización en banda ataca de nuevo) y se puede "arreglar" en el camino ( RFC5321 )

El punto aquí es que algunas modificaciones podrían cambiar la semántica de un mensaje, pero se supone que cambiar la cantidad de espacios en blanco al final de una línea no podría. La introducción de algunos cambios (nuevas líneas adicionales o la eliminación de un personaje) violaría la firma, por lo que un cliente de PGP debe asegurarse de que estos eventos no ocurran. Consulte también el error de Enigmail 494 .

(Algunas especulaciones: si ocasionalmente está utilizando caracteres que no son ASCII, esto puede hacer que su cliente de correo electrónico no use texto / sin formato, sino que utilice UTF-8 codificado en base64 que evita las complejidades anteriores.)

    
respondido por el mr.spuratic 07.08.2015 - 13:11
fuente

Lea otras preguntas en las etiquetas