У меня есть открытый ключ RSA, некоторые данные и подпись этих данных. Мне нужно проверить подпись. Однако подпись не является дайджестом данных, а всего данных. (Сами данные только 16 байт, поэтому подписчик не удосужился хэширования данных, прежде чем подписать его.) Я могу проверить подпись в C, указав двигатель NULL при инициализации контекста:Проверка подписи не хешированных данных с Ruby OpenSSL
EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new(verify_key, NULL);
Однако , Я не смог найти эквивалент в методе проверки Ruby OpenSSL :: PKey :: PKey. Этот метод требует объекта Digest, и нет дайджеста, который я могу найти, который на самом деле не хеш, а просто возвращает данные как есть. Я попытался создать свой собственный подкласс Digest, но я не думаю, что это может сработать, поскольку базовая библиотека OpenSSL не будет знать о существовании настраиваемого типа дайджеста.
Я застрял или есть способ решить эту проблему, учитывая, что я не могу изменить код, выполняемый подписывающим лицом?
Использует ли это PKCS # 1v1.5 заполнение без хеширования (уродливое, но достаточно безопасное) или вообще не использует прописку (возможно, полностью сломан)? – CodesInChaos
Он использует дополнение PKCS # 1v1.5 без хеширования. – Wammer
Вы пытались найти такую функцию, как 'public_decrypt'? Он может работать, поскольку обычно вы не должны шифровать с помощью закрытого ключа и дешифровать с помощью открытого ключа. С небольшой удачей он примет версию подписи PKCS # 1 (обратите внимание, что дополнение, используемое для шифрования и подписания, отличается в PKCS # 1). –