Рейтинг:2

Как найти открытый ключ в цифровом сертификате

флаг cn

Я вижу то, что, по моему мнению, должно быть открытым ключом на вкладке «Подробности» для сертификата StackOverflow (см. снимок экрана ниже). Однако его длина составляет 2160 (количество символов (540), умноженное на 4 = 2160) бит, а не 2048, как указано.

Когда я просматриваю сведения о сертификате, используя openssl в cmd я вижу уменьшенную версию открытого ключа, которая составляет 514 полубайтов * 4 = 2056 бит, что на один байт меньше 2048.

Я заметил, что первый байт равен 00. Следует ли игнорировать первый байт, потому что он равен 0? Почему он отображается в openssl?

Если первый байт следует игнорировать, означает ли это, что фактический открытый ключ начинается с Би 2 и заканчивается в аф?

Почему Windows показывает дополнительные байты до и после открытого ключа на вкладке «Сведения»?

Я использовал Блокнот на снимке экрана, чтобы показать полное значение того, что находится на вкладке «Подробности».

введите описание изображения здесь

Обновлять:

Я понял, что большинство байтов - это модуль, а показатель степени 0x010001 находится в конце:

введите описание изображения здесь

Но что такое 02 03 между модулем и показателем?

И что такое 30 82 01 0а 02 82 01 01 00 перед модулем?

fgrieu avatar
флаг ng
Попробуйте вставить шестнадцатеричный код в [декодер ASN.1] (https://lapo.it/asn1js/)
dave_thompson_085 avatar
флаг cn
Ваш вопрос не в поиске открытого ключа — вы его уже нашли. Ваш вопрос _decoding_ это. Как говорится в https://datatracker.ietf.org/doc/html/rfc3279#section-2.3.1, это кодировка DER структуры ASN.1 RSAPublicKey из PKCS1, и, как говорит meshcollider, DER теперь находится в X.690, хотя https://en.wikipedia.org/wiki/X.690 легче читать, чем фактический документ ITU-T, как и https://letsencrypt.org/docs/a-warm-welcome-to-asn1- и-дер/ .
Рейтинг:4
флаг gb

Согласно X.690, формат начинается с 0x30 для обозначения последовательности. Далее идет общая длина. Первый байт длины 0x82. Поскольку здесь установлен старший бит, это означает, что этот байт кодирует длину длины. Другими словами, следующие 2 байта кодируют фактическую длину.Эти байты 0x010aили 266 байт.

Теперь мы попали в другую метку. На этот раз это 0x02, что означает целое число. Длина начинается с 0x82 опять же, поэтому мы знаем, что следующие 2 байта кодируют длину. Эти 0x0101, поэтому общая длина этого целого числа составляет 257 байт. Эти 257 байтов вы выделили. Причина дополнительной 0x00 байт включен в начало, потому что целые числа BER подписаны и представлены в дополнении до 2 - если бы не было начального нулевого байта, он был бы интерпретирован как отрицательное число, поскольку следующий байт 0xb2 имеет самый старший бит.

После этих 257 байт для модуля мы нажимаем еще один тег: 0x02 еще раз. Другое целое число. На этот раз первый байт (0x03) длины не имеет старшего установленного бита, поэтому длина составляет просто 3 байта. Эти 3 байта 0x010001, или 65537. Это публичный показатель.

И это всего 266 байтов, как и ожидалось для всей последовательности. Это просто те 2 целых числа.

DannyNiu avatar
флаг vu
Я отредактировал ответ, чтобы объяснить, почему там есть начальный нулевой байт.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.