Я работаю с DKIM и пытаюсь вычислить размер открытого ключа некоторых подписей DKIM. Из инструментов я знаю, что сейчас у Gmail 2048, но как я мог сам это выяснить (то есть, какие именно команды Linux и почему)?

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

1 ответ1

3

1) Вырежьте объект открытого ключа в кодировке base64:

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

2) Base64 декодирует его и ASN1 анализирует его:

$ cat base64-in.txt | base64 -d | openssl asn1parse -inform der
0:d = 0 hl = 4 l = 290 минусов: ПОСЛЕДОВАТЕЛЬНОСТЬ
4:d = 1 гл = 2 л = 13 минусов: ПОСЛЕДОВАТЕЛЬНОСТЬ
6:d = 2 hl = 2 l = 9 prim: ОБЪЕКТ: rsaEncryption
17:d = 2 hl = 2 l = 0 prim: NULL
19:d = 1 hl = 4 l = 271 prim: BIT STRING

3) Обратите внимание, что BIT STRING составляет 4 + 2 + 13 + 9 = 28 байт в структуре.

4) Разобрать битовую строку:

$ 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) Обратите внимание, что ключ составляет 257 байт. Но он начинается с D (старший бит установлен), поэтому начальный байт должен быть нулем, чтобы показать, что он положительный. Таким образом, он содержит 256 байтов без знака или 2048 бит.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .