Как OpenSSL / Mozilla NSS RSA подписывают и проверяют (функции PK11_Sign, PK11_Verify, PK11_VerifyRecover)? - PullRequest
2 голосов
/ 21 января 2011

У меня есть открытый и закрытый ключи RSA (все p, q, e, n, d) в формате PEM.Мне любопытно узнать:

  • Как PK11_Sign(), PK11_Verify() и PK11_VerifyRecover() ( из библиотеки OpenSSL / Mozilla NSS ) работают с RSA?
  • Как применяется дополнение к входному сообщению, которое нужно подписать?

Контекст моего вопроса таков: я видел, что PK11_Sign () добавляет некоторые отступы к моим входным данным во время подписания.Например (учитывая, что размер ключа составляет 162 бита):

my input = 31323334353036373839
padded input = 1FFFFFFFFFFFFFFFF0031323334353036373839

Я хотел бы знать:

  • Как называется эта схема заполнения и указатели на то, как она работает?
  • Какова схема заполнения по умолчанию для вышеупомянутых функций OpenSSL?Например, если я выполню «openssl rsautl -in input.txt -inkey mykey.pem -out signed.txt», какая схема заполнения будет использоваться?

1 Ответ

3 голосов
/ 21 января 2011
  • PK11_Sign и т. Д. Использует подписи PKCS # 1 v.1.5, включая заполнение, которое вы упоминаете.

  • Схема заполнения является частью алгоритма, называемого EMSA-PKCS1-V1_5-ENCODE. Я не верю, что у него есть имя, хотя оно может быть неофициально названо «Подпись подписи PKCS # 1 v.1.5». Это определено в стандарте PKCS # 1 .

  • Согласно документации по умолчанию для openssl rsautl используется подпись PKCS # 1 v.1.5, что подразумевает это заполнение.

...