Я пытаюсь написать код, чтобы проверить некоторые подписи RSA. Подписи были сделаны с помощью инструмента OpenSSL командной строки, используя эквивалент этой командной строки:Проверка подписи RSAS OpenSSL: хэш и отступы?
openssl dgst -sha1 -sign private_key_file.pem <binary_data_file> sig
Я пытаюсь использовать libtomcrypt
сделать проверить:
Вот вызов сигнатуры функции проверки RSA в libtomcrypt
:
int rsa_verify_hash_ex(
const unsigned char *sig, unsigned long siglen, // signature to verify
const unsigned char *hash, unsigned long hashlen, // hash value to check against sig
int padding, // defined constant value, see below
int hash_idx, // identifies which hash algorithm, see below
unsigned long saltlen, // specify salt length, see below
int *stat, // output parameter, returns whether verify succeeded or not
rsa_key *key); // RSA public key to use for verify
Эта функция возвращает 0, если он работает без ошибок, иначе возвращает код ошибки. Если он работает без ошибок, выходной параметр stat
указывает, проверена ли подпись.
Большинство аргументов кажутся простыми: передайте подпись, чтобы проверить, значение хэша использовать для сравнения, и ключ RSA для использования для проверки. hash_idx
ясно из примера кода, прилагаемого к libtomcrypt
; это индекс в таблицу поддерживаемых алгоритмов хэширования, и я могу найти правильное значение для использования с этим фрагментом коды: hash_idx = find_hash("sha1")
Но я задаюсь вопрос о ценностях padding
и saltlen
. padding
меня не слишком беспокоит, так как есть только два возможных значения, и я могу просто попробовать их обоих. Но что я должен пройти за saltlen
?
Документация OpenSSL для функций OpenSSL для проверки RSA не показывает параметр saltlen
. Страница руководства для openssl dgst
(т. Е. Результат man dgst
) не обсуждает соль.
Так мои вопросы:
- Как я могу определить правильную длину соли использовать?
- вставить ли команда OpenSSL,
dgst
любой дополнительный материал на входе, таких как:(stdin)=
(я обнаружил, что (stdin)=
вещь путем поиска StackOverflow: Why are the RSA-SHA256 signatures I generate with OpenSSL and Java different?)
libtomcrypt
также имеет функцию под названиемpkcs_1_pss_decode()
который документирован, чтобы «декодировать закодированный PSS-блок». Есть ли вероятность, что это функция, которую мне нужно позвонить?
Спасибо за любую помощь, которую вы можете мне дать.
EDIT: благодаря помощи ниже, от @Jonathan Ben-Avraham, я смог получить эту работу сегодня. Ответы на мои вопросы:
- Использовать длину 0 для соли, без соли.
- Нет, OpenSSL не ничего лишнего вставки, такие как
(stdin)=
- мне нужно позвонить
rsa_verify_hash_ex()
, и мне нужно было указатьpadding
аргументLTC_LTC_PKCS_1_V1_5
.
Благодарим за отличный ответ. Вы дали мне инструменты, чтобы убедиться, что нет соли. У меня теперь есть код 'libtomcrypt', который успешно проверяет подписи! +1 и ответ принят. – steveha
@steveha: Спасибо! Вы также можете просмотреть более позднюю запись, касающуюся '' rsautl'': http://stackoverflow.com/questions/9951559/difference-between-openssl-rsautl-and-dgst –