Ho scritto un parser e un firmatario DKIM per Microsoft Exchange, quindi è abbastanza semplice. Basta notare che la chiave pubblica memorizzata nel DNS non è una tipica chiave pubblica, è in una forma più compatta chiamata "modulo soggetto chiave pubblica".
How can one determine the key length that is being used simply by looking at the headers ?
- Esegui una query TXT per i seguenti valori nell'intestazione:
{s value}
._ domainkey. {d value}
(ometti parentesi)
- Estrai il valore denominato "p=" nella query DNS precedente
- Utilizza un parser ASN.1 per determinare la lunghezza della chiave e altre cose che sono memorizzate all'interno di
Esempio di chiave pubblica a 2048 bit trovata in una query "p=" DKIM con un esponente di 65537
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoSd6ya7haEmQl1sWoEVVou8iC618evFqluT5zb
0aMEgBEfHSJRjT/FojPWqhjAtCYMAIggaE0ZxVzPDsMeRc3Mixy2WO9DWYAJuzwP7DyzUAclhGTfP4cG44SlbSsEsMM/91cu5zr9+TulnqPDxUyPvLZjGpJEHXoEWc4m
f6tbksyxZTI+wssw84NLfEs3VC4jN9P1CnfG2aTCC74lj1mePbEBCsg83+Ilz/dsDcH2FGmWVa5ytNCP7kkzyBYkfF09YpDiSXxowRGZbRkGveDvOP3ONUhLrXumpTP6
+/Hm34kbG/kGBSxNOXn8/2jf2m+08Bt8ci9Orzb2s8J81q6QIDAQAB
Basta incollare questa chiave nel decodificatore JavaScript ASN.1 per capire la lunghezza della chiave. La maggior parte dei programmatori avrà solo una biblioteca per capirlo.