Domanda

Sto scrivendo un app per ottenere una migliore comprensione di DKIM. La specifica dice che recuperare una "codifica DER ASN.1" chiave pubblica dal record di dominio TXT. Posso visto la chiave in "s1024._domainkey.yahoo.com" = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz + QfiWYui / E9UGSXau / 2P8LjnTD8V4Unn + 2FAZVGE3kL23bzeoULYv4PeleB3gfm".

Come posso utilizzare questa chiave da .net? Gli esempi che ho visto ottenere la chiave da un X509Certificate2, o di un file XML contenente le RSAParameters.

CORREZIONE : copio / incollato la chiave sopra dallo strumento DNS network-tools.com, che deve aver tagliato corto. nslookup mi dà la chiave completo:

  

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

Quindi abelenky era sulla strada giusta con BASE64 ..

È stato utile?

Soluzione

Questo è il base64 codifica del DER-codifica di un ASN.1 PublicKeyInfo contenente una chiave pubblica RSA.

Ecco una traduzione:

   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
            :         }
            :       }
            :   }

L'identificatore dell'oggetto indica che la seguente stringa BIT contiene la codifica di un RSAPublicKey. Gli interi sono il modulo e l'esponente pubblico.

È possibile decodificare i base64 con Convert.FromBase64String , ma non credo che .NET è dotato di funzionalità per l'analisi PublicKeyInfos, quindi è necessario utilizzare uno strumento 3rd party come BouncyCastle.

Altri suggerimenti

Per chiunque sia interessato a questo proposito vorrei suggerire il System.Security.Cryptography.X509Certificates.PublicKey , che può essere utilizzato per leggere una chiave pubblica codificato DER.

Questa stringa appare come la sua una sorta di codifica base-64. Se si converte quella stringa dalla base-64 a un BLOB, dovrebbe quindi essere in formato ASN.1 valido.

Prova il BouncyCastle biblioteca, offre grande funzionalità per questi casi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top