Pregunta

Estoy escribiendo una aplicación para obtener una mejor comprensión de DKIM. La especificación dice puedo recuperar una clave pública "codificado en DER ASN.1" del registro TXT dominio. Puedo ver la llave en "s1024._domainkey.yahoo.com" = "+ MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz QfiWYui / E9UGSXau / 2P8LjnTD8V4Unn + 2FAZVGE3kL23bzeoULYv4PeleB3gfm".

¿Cómo puedo utilizar esta clave de .NET? Los ejemplos que he visto pedir la llave en un X509Certificate2, o un archivo XML que contiene los RSAParameters.

CORRECCIÓN : copio / pegar la clave anterior de la herramienta DNS network-tools.com, que debe de haber cortado corto. nslookup me da la clave completa:

  

s1024._domainkey.yahoo.com text =   "K = RSA; t = y; p = MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz + QfiWYui / E9UGSXau2P8LjnTD8V4Unn + 2FAZVGE3kL23bzeoULYv4PeleB3gfm"   "JiDJOKU3Ns5L4KJAUUHjFwDebt0NP + sBK0VKeTATL2Yr / S3bTxhy + 1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj + XcwIDAQAB; n = A 1024 bit de clave;"

Así abelenky estaba en el camino correcto con BASE64 ..

¿Fue útil?

Solución

Este es el base64-codificación de la DER-codificación de un ASN.1 PublicKeyInfo que contiene una clave pública RSA.

A continuación es una traducción:

   0 30  159: SEQUENCE {
   3 30   13:   SEQUENCE {
   5 06    9:     OBJECT IDENTIFIER '1 2 840 113549 1 1 1'
  16 05    0:     NULL
            :     }
  18 03  141:   BIT STRING 0 unused bits, encapsulates {
  22 30  137:       SEQUENCE {
  25 02  129:         INTEGER
            :           00 EB 11 E7 B4 46 2E 09 BB 3F 90 7E 25 98 BA 2F
            :           C4 F5 41 92 5D AB BF D8 FF 0B 8E 74 C3 F1 5E 14
            :           9E 7F B6 14 06 55 18 4D E4 2F 6D DB CD EA 14 2D
            :           8B F8 3D E9 5E 07 78 1F 98 98 83 24 E2 94 DC DB
            :           39 2F 82 89 01 45 07 8C 5C 03 79 BB 74 34 FF AC
            :           04 AD 15 29 E4 C0 4C BD 98 AF F4 B7 6D 3F F1 87
            :           2F B5 C6 D8 F8 46 47 55 ED F5 71 4E 7E 7A 2D BE
            :           2E 75 49 F0 BB 12 B8 57 96 F9 3D D3 8A 8F FF 97
            :           73
 157 02    3:         INTEGER 65537
            :         }
            :       }
            :   }

El identificador de objeto indica que la siguiente cadena BIT contiene la codificación de un RSAPublicKey. Los números enteros son el módulo y el exponente público.

Puede decodificar las base 64 con Convert.FromBase64String , pero no creo NET tiene una funcionalidad integrada para analizar PublicKeyInfos, por lo que necesita utilizar una herramienta de 3 ª parte como BouncyCastle.

Otros consejos

Para cualquier persona interesada en este asunto yo sugeriría que el System.Security.Cryptography.X509Certificates.PublicKey que se puede utilizar para leer una clave pública DER codificado.

Esa cadena se parece a su algún tipo de base 64 codificación. Si convierte esa cadena de base 64 a un BLOB, entonces debe estar en formato ASN.1 válido.

BouncyCastle biblioteca, que ofrece una gran funcionalidad para estos casos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top