Цифровая подпись в Python без кодировки ASN.1?

Нам необходимо создать цифровую подпись без кодировки ASN.1 для проверки последующим приложением. Мы можем сделать это с помощью openssl в командной строке:

openssl pkeyutl -sign -inkey keyfile < hash

Однако, когда я пытаюсь использовать цифровую подпись в Python (используя библиотеку PyCrypto), я не могу сделать это без библиотеки, включающей кодировки ASN.1 (то есть, если я не разветвляюсь PyCrypto, чтобы позволить мне удалить их). Библиотека rsa также не допускает этого. Существуют ли какие-то библиотеки или команды Python, которые я пропустил, которые допускают такую ​​гибкость?

1 ответ

Согласно этому ответу, команда OpenSSL, которую вы показываете, производит RSASSA-PKCS1-v1_5 сигнатура, которая всегда содержит закодированную структуру ASN.1 DER по определению: ваше предположение не действительно верно.

Однако нет необходимости и не рекомендуется для приемника реализовывать полный анализатор DER, когда алгоритм хеширования фиксирован. Он может просто проверить наличие определенной строки байтов (вместе с некоторыми другими байтами заполнения, и перед проверкой дайджеста в крайнем правом положении). Этот другой ответ показывает кодирование DER для самых популярных алгоритмов дайджеста.

Если вы действительно не хотите, чтобы в ваших подписях был указан ASN.1, вы можете переключиться только на RSASSA-PSS,

Другие вопросы по тегам