Как работает подпись и проверка OpenSSL/Mozilla NSS RSA (функции PK11_Sign, PK11_Verify, PK11_VerifyRecover)?

У меня есть открытые и закрытые ключи 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 ", какая схема заполнения будет использоваться?

person gsbabil    schedule 21.01.2011    source источник


Ответы (1)


  • 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. подпись, которая подразумевает это заполнение.

person Rasmus Faber    schedule 21.01.2011