2013-02-11 2 views
3

У меня есть открытый ключ RSA, некоторые данные и подпись этих данных. Мне нужно проверить подпись. Однако подпись не является дайджестом данных, а всего данных. (Сами данные только 16 байт, поэтому подписчик не удосужился хэширования данных, прежде чем подписать его.) Я могу проверить подпись в C, указав двигатель NULL при инициализации контекста:Проверка подписи не хешированных данных с Ruby OpenSSL

EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new(verify_key, NULL); 

Однако , Я не смог найти эквивалент в методе проверки Ruby OpenSSL :: PKey :: PKey. Этот метод требует объекта Digest, и нет дайджеста, который я могу найти, который на самом деле не хеш, а просто возвращает данные как есть. Я попытался создать свой собственный подкласс Digest, но я не думаю, что это может сработать, поскольку базовая библиотека OpenSSL не будет знать о существовании настраиваемого типа дайджеста.

Я застрял или есть способ решить эту проблему, учитывая, что я не могу изменить код, выполняемый подписывающим лицом?

+2

Использует ли это PKCS # 1v1.5 заполнение без хеширования (уродливое, но достаточно безопасное) или вообще не использует прописку (возможно, полностью сломан)? – CodesInChaos

+0

Он использует дополнение PKCS # 1v1.5 без хеширования. – Wammer

+2

Вы пытались найти такую ​​функцию, как 'public_decrypt'? Он может работать, поскольку обычно вы не должны шифровать с помощью закрытого ключа и дешифровать с помощью открытого ключа. С небольшой удачей он примет версию подписи PKCS # 1 (обратите внимание, что дополнение, используемое для шифрования и подписания, отличается в PKCS # 1). –

ответ

0

Резюмируя ответ от комментариев для того, чтобы удалить этот вопрос из фильтра «без ответа» ...

owlstead:

Вы пытались найти такую ​​функцию, как public_decrypt? Он может работать, поскольку обычно вы не должны шифровать с помощью закрытого ключа и дешифровать с помощью открытого ключа. С небольшой удачей он примет версию подписи PKCS # 1 (обратите внимание, что дополнение, используемое для шифрования и подписания, отличается в PKCS # 1).

Wammer:

Конечно - расшифровка подписи с помощью открытого ключа и проверки того, что он соответствует данным работает отлично. Пока это нормально работает со стандартным дополнением PKCS # 1, но я сделаю еще несколько исследований, чтобы увидеть, является ли различное шифрование и подписание прокладок проблемой на практике. Благодарю.

owlstead:

После расшифровки и проверки правильности заполнения, все, что осталось, это (если это возможно, безопасно) сравнить. Так что замена функции проверки довольно хорошо. Большая часть безопасности находится в модульной арифметике и дополнении.

Смежные вопросы