Как подписать документ на python с помощью M2Crypto, используя определенную технику заполнения?

StackOverflow https://stackoverflow.com/questions/1677594

Вопрос

Мне нужно подписать цифровым способом некоторый текст на python, используя закрытый ключ, хранящийся в файле .pem.Похоже, что M2Crypto является предпочтительным способом сделать это в наши дни, так что это то, что я использую.Я думаю, что я понимаю большую часть этого, но я запутался в том, как настроить заполнение.Чтобы быть конкретным, мне нужно проверить подпись в приложении для iPhone, используя схему заполнения, называемую kSecPaddingPKCS1SHA1 и описан примерно так:

Данные, которые должны быть подписаны, представляют собой хэш SHA1.Будет выполнено стандартное заполнение ASN.1, а также заполнение PKCS1 базовой операции RSA.

Не будучи криптоэкспертом, я имею лишь смутное представление, что это значит.Я попытался взглянуть на некоторые из RFC, но нашел их непроницаемыми.Я вижу, что методы шифрования / дешифрования объектов RSA принимают типы заполнения, но я не вижу ничего подобного, связанного с проверкой подписи.

Любая помощь, особенно с кодом, будет оценена по достоинству.

(В некотором смысле это обратное этот вопрос.)


Хорошо, приведенный ниже ответ, безусловно, правильный.Следующий код генерирует подпись для text который проверяется на iPhone с помощью kSecPaddingPKCS1SHA1 схема заполнения.

from M2Crypto import EVP
privkey = EVP.load_key("privkey.pem")
privkey.sign_init()
privkey.sign_update(text)
signature = privkey.sign_final()

(Извините за редакторскую правку, но могу я просто сказать, что криптохакеры - одни из самых отвратительных авторов документации во вселенной?)

Это было полезно?

Решение

AFAIK M2Crypto добавляет отступы там, где это необходимо.

Заполнение PKCS1 используется по умолчанию.

Но (опять же, только AFAIK) подписи не имеют отступов, отступы добавляются только к зашифрованным данным, чтобы предотвратить возможную атаку.
Редактировать:пользователь caf в комментарии говорит, что заполнение является обязательным для хорошей подписи.Я все еще рекомендую вам попробовать это с поведением M2Crypto по умолчанию, это может добавить его.

В сгенерированных документах M2Crypto вы можете видеть, что методы {public,private}_{encrypt,decrypt} имеют опцию заполнения, которая по умолчанию равна PKCS1, в то время как у sign menthod ее нет.

IMO просто попробуйте использовать параметры M2Crypto по умолчанию, вероятно, это сработает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top