Давайте представим, что у вас есть значение модуля 0b1010111111
(10 бит).
Если вы запустите EMSA-PSS-Encode(M, 10)
, то оно может (если оно способно генерировать числа, которые малы), производить 0b1111001011
.Это значение превышает модуль, поэтому оно математически эквивалентно 0b100001100
.При запуске проверки вы получите промежуточное значение 0b100001100
, а затем обнаружите, что ваша подпись не может быть проверена.Вы подписываете это снова, на этот раз это работает.Путаница в изобилии.
В конечном счете, ответ заключается в том, чтобы «иметь стабильный алгоритм, который максимально приближается к значению модуля, но не превышает его».Аналогичным образом, EMSA-PKCS1-v1_5
начинается с нулевого байта, чтобы гарантировать, что модуль всегда будет больше, чем закодированное значение.