Подпись X509 значение размера - PullRequest
0 голосов
/ 23 апреля 2020

Вопрос в том, почему signatureValue такой большой, если он основан на хешах? Предположим, что алгоритм подписи равен sha256RSA. Не должно быть меньше в соответствии со следующими шагами:

  1. Рассчитать SHA256 га sh из tbsCertificate. Выход => 256 бит.
  2. Знак 256 бит ха sh с закрытым ключом RSA. Выход => 256 бит?

Но если вы видите размер signatureValue, он может иметь 2048, 4096, [больше?] Бит.

1 Ответ

0 голосов
/ 23 апреля 2020

Размер подписи не зависит от алгоритма хеширования, используемого для sh подписанных данных. Это зависит только от размера ключа.

Подпись RSA основана на модульном возведении в степень, т. Е. sig = m ^ d mod N, где:

  • m - сообщение для подписи
  • d частный показатель (его размер N / 2, т. Е. 1024 бита для RSA 2048).
  • N модуль
  • sig значение подписи

Для такого расчета конечным результатом является остаток от результата m ^ d, деленный на модуль (примерно, размер ключа RSA). m и d - довольно большие значения, и когда вы включаете одно за другим, значение будет огромным и не будет соответствовать даже длине модуля, поэтому используется последняя операция mod. И вы можете видеть, что нет такого термина, как "ха sh". Иногда (когда используются очень маленькие значения), размер результирующего значения может быть меньше размера модуля. В таких случаях значение подписи дополняется, чтобы соответствовать длине модуля.

Из необработанной подписи вы можете определить размер ключа RSA, но не можете вывести алгоритм ha sh, встроенный в сигнатуру, поэтому подпись содержит алгоритм asymmetri c и имя ha sh, например sha256RSA, в противном случае вам придется хранить алгоритм ha sh где-то в сообщении. Поскольку комбинация (алгоритм асимметрии c и алгоритм ha sh) конечна и довольно мала, было достаточно хорошо назначить уникальные OID для таких комбинаций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...