En la reciente vulnerabilidad de DKIM, ¿cómo determinó alguien la longitud de la clave al mirar los encabezados?

10

Después de leer este artículo reciente: Vulnerabilidad de Wired-DKIM , tengo un par de preguntas.

¿Cómo se puede determinar la longitud de la clave que se está utilizando simplemente mirando los encabezados?

Y asumo que el ataque es el siguiente: corríjame si me equivoco:

  1. Factorice la clave privada (de corta longitud de clave) al conocer la clave pública, el mecanismo (es decir, RSA, etc.)

  2. Falsifique el correo electrónico, sustituya el hash DKIM por hash calculados ilegalmente

  3. Engaña al verificador para que piense que el origen del correo electrónico es correcto

pregunta sudhacker 25.10.2012 - 20:27
fuente

2 respuestas

10

He escrito un analizador y firmante DKIM para Microsoft Exchange, por lo que es bastante sencillo. Solo tenga en cuenta que la clave pública almacenada en DNS no es una clave pública típica, se encuentra en una forma más compacta llamada "forma de sujeto de clave pública".

  

¿Cómo se puede determinar la longitud de la clave que se está utilizando simplemente mirando los encabezados?

  1. Haga una consulta TXT para los siguientes valores en el encabezado:      {s value} ._ domainkey. {d value} (omita los paréntesis)
  2. Extraiga el valor denominado "p=" en la consulta DNS anterior
  3. Use un analizador ASN.1 para determinar la longitud de la clave y otras cosas que están almacenadas dentro de

Ejemplo de clave pública de 2048 bits encontrada en una consulta DKIM "p=" con un exponente de 65537

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoSd6ya7haEmQl1sWoEVVou8iC618evFqluT5zb
0aMEgBEfHSJRjT/FojPWqhjAtCYMAIggaE0ZxVzPDsMeRc3Mixy2WO9DWYAJuzwP7DyzUAclhGTfP4cG44SlbSsEsMM/91cu5zr9+TulnqPDxUyPvLZjGpJEHXoEWc4m
f6tbksyxZTI+wssw84NLfEs3VC4jN9P1CnfG2aTCC74lj1mePbEBCsg83+Ilz/dsDcH2FGmWVa5ytNCP7kkzyBYkfF09YpDiSXxowRGZbRkGveDvOP3ONUhLrXumpTP6
+/Hm34kbG/kGBSxNOXn8/2jf2m+08Bt8ci9Orzb2s8J81q6QIDAQAB

Simplemente pegue esta clave en el ASN.1 Javascript decoder para averiguar la longitud de la clave. La mayoría de los programadores solo tendrán una biblioteca para resolver esto.

    
respondido por el random65537 26.10.2012 - 05:56
fuente
3

El tamaño de la firma RSA depende del tamaño de la clave. Una clave de 512 bits produce una firma de 64 bytes de longitud. El encabezado termina con una firma codificada en Base64, así que con el relleno de mi memoria me dice que tendrá 88 bytes de longitud. Por lo tanto, la longitud de la clave se puede determinar con solo mirar una firma.

Factoriza la clave, firma con la clave (porque ahora la tienes) y envía con todos los encabezados esperados.

Para obtener una versión / explicación más larga de esto, consulte ¿Tamaño de la firma RSA? en StackOverflow.

    
respondido por el Jeff Ferland 26.10.2012 - 01:25
fuente

Lea otras preguntas en las etiquetas