Может ли OpenSSL проверять и восстанавливать файлы, подписанные Crypto ++, с помощью RSA-PSSR? - PullRequest
0 голосов
/ 07 мая 2020

В основе этого лежит то, что мне будет предоставлен двоичный файл, подписанный с помощью CryptoPP, с подписью, включенной в файл, и ключом publi c, и я хочу иметь возможность проверить файл и извлеките данные (без его подписи) в другой файл.

Код, который используется для этого с Crypto ++, относительно тривиален, но я поискал и не нашел ничего похожего. Все, что я просматривал, похоже на сообщения, в которых подпись отдельная, но я не уверен, как мне определить, где в файле вытащить подпись.

Причина, по которой я хочу это сделать это то, что, учитывая, что у меня есть потребность в OpenSSL по другим причинам, я не хочу также включать Crypto ++ в свое приложение, если мне не нужно.

Существующий код проверки похож на этот :

const char *key = kPublicKey;  // hex encoded public key

CryptoPP::StringSource f( key, true, new CryptoPP::HexDecoder);
CryptoPP::RSASS< CryptoPP::PSSR, CryptoPP::SHA1 >::Verifier verifier(f);

CryptoPP::FileSource( packageFilename.toStdString().c_str(), true,
                      new CryptoPP::SignatureVerificationFilter(
                          verifier,
                          new CryptoPP::FileSink( recoveredFilename.toStdString().c_str()),
                          CryptoPP::SignatureVerificationFilter::THROW_EXCEPTION | CryptoPP::SignatureVerificationFilter::PUT_MESSAGE )
                    );

Что, как я уже сказал, выглядит банально, но, по-видимому, много всего происходит под капотом. По сути, этому дается имя файла, который включает в себя содержимое И подпись, и "верификатор", который включает ключ publi c, проверяет правильность содержимого файла и создает копию файла без подписи в нем. .

То, что я хочу сделать, это воспроизвести это с помощью OpenSSL, но я не уверен, есть ли в OpenSSL функции, которые позволят мне просто передать весь файл и опубликовать c ключ и позволить он определяет, где находится сама подпись, или если мне нужно как-то вытащить подпись из файла (она хранится в конце файла!), затем передать содержимое файла по крупицам в EVP_DigestVerifyUpdate, а затем передать подпись в Функция EVP_DigestVerifyFinal.

Любая помощь будет очень признательна.

ОБНОВЛЕНИЕ Я новичок в цифровой подписи, поэтому, возможно, упустил важность PSSR здесь. После некоторых дополнительных исследований я понял, что идея PSSR состоит в том, что подпись содержит сообщение. Возможно, все вышеперечисленное можно резюмировать следующим образом:

Учитывая ключ publi c и подпись PSSR, сгенерированную с помощью Crypto ++, возможно ли проверить сообщение и извлечь оригинал данные с использованием OpenSSL?

Из файлов (подписей), которые я просмотрел, которые были сгенерированы Crypto ++ с использованием его реализации PSSR, похоже, что данные не изменились; в конце просто добавлены дополнительные элементы (используется флаг SIGNATURE_AT_END). Я изо всех сил пытаюсь найти какую-либо ссылку на PSSR / PSS-R и OpenSSL с помощью Google.

...