Calcolo del numero di bit nella chiave pubblica


0

Sto lavorando con DKIM e sto cercando di calcolare la dimensione della chiave pubblica di alcune firme DKIM. So dagli strumenti che Gmail ha ora il 2048, ma come potrei averlo capito da solo (cioè, che comandi esatti di Linux e perché)?

user@host$ dig txt 20120113._domainkey.gmail.com

; <<>> DiG 9.8.3-P1 <<>> txt 20120113._domainkey.gmail.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52228
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;20120113._domainkey.gmail.com. IN  TXT

;; ANSWER SECTION:
20120113._domainkey.gmail.com. 300 IN   TXT "k=rsa\; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1Kd87/UeJjenpabgbFwh+eBCsSTrqmwIYYvywlbhbqoo2DymndFkbjOVIPIldNs/m40KF+yzMn1skyoxcTUGCQs8g3FgD2Ap3ZB5DekAo5wMmk4wimDO+U8QzI3SD0" "7y2+07wlNWwIt8svnxgdxGkVbbhzY8i+RQ9DpSVpPbF7ykQxtKXkv/ahW3KjViiAH+ghvvIhkx4xYSIc9oSwVmAl5OctMEeWUwg8Istjqz8BZeTWbf41fbNhte7Y+YqZOwq1Sd0DbvYAD9NOZK9vlfuac0598HY+vtSBczUiKERHv1yRbcaQtZFh5wtiRrN04BLUTD21MycBX5jYchHjPY/wIDAQAB"

;; Query time: 262 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Nov 19 10:52:06 2012
;; MSG SIZE  rcvd: 462

La chiave pubblica può essere trovata codificata in base64 dopo "p =".
Robert

Risposte:


3

1) Tagliare l'oggetto chiave pubblica codificata base64:

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1Kd87 / UeJjenpabgbFwh + eBCsSTrqmwIYYvywlbhbqoo2DymndFkbjOVIPIldNs / m40KF + yzMn1skyoxcTUGCQs8g3FgD2Ap3ZB5DekAo5wMmk4wimDO + U8QzI3SD07y2 + 07wlNWwIt8svnxgdxGkVbbhzY8i + RQ9DpSVpPbF7ykQxtKXkv / ahW3KjViiAH + ghvvIhkx4xYSIc9oSwVmAl5OctMEeWUwg8Istjqz8BZeTWbf41fbNhte7Y + YqZOwq1Sd0DbvYAD9NOZK9vlfuac0598HY + vtSBczUiKERHv1yRbcaQtZFh5wtiRrN04BLUTD21MycBX5jYchHjPY / wIDAQAB

2) Base64 lo decodifica e ASN1 lo analizza:

$ cat base64-in.txt | base64 -d | openssl asn1parse -inform der
0: d = 0 hl = 4 l = 290 contro: SEQUENZA
4: d = 1 hl = 2 l = 13 contro: SEQUENZA
6: d = 2 hl = 2 l = 9 prim: OBJECT: rsaEncryption
17: d = 2 hl = 2 l = 0 prim: NULL
19: d = 1 hl = 4 l = 271 prim: BIT STRING

3) Si noti che BIT STRING è 4 + 2 + 13 + 9 = 28 byte nella struttura.

4) Analizza la stringa di bit:

$ cat base64-in.txt | base64 -d | openssl asn1parse -inform der -offset 28
0: d = 0 hl = 4 l = 257 prim: INTEGER: D 4A77CEFF51E2637A7A5A6E06 ...
261: d = 0 hl = 2 l = 3 prim: INTEGER: 010001

5) Si noti che la chiave è 257 byte. Ma inizia con a D (high bit set), quindi il byte principale deve essere uno zero per mostrare che è positivo. Quindi contiene 256 byte senza segno o 2.048 bit.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.