Как установить заполнение (OAEP) для функции PKCS7_decrypt, используя OpenSSL - PullRequest
2 голосов
/ 08 июля 2019

Я использую OpenSSL для шифрования и дешифрования полезной нагрузки данных CMS_envolped, но я хочу использовать шифр AES256 с дополнением OAEP (вместо дополнения PKCS 1.5). Когда я шифрую, используя заполнение PKCS1.5, я в порядке и могу расшифровать, но когда я шифрую и использую заполнение OAEP, я не могу расшифровать. Как установить тип заполнения при дешифровании с помощью PKCS7_decrypt?

В документах говорится только об одном флаге, который не применяется к отступам. Есть ли другой метод расшифровки OpenSSL, который я должен использовать для расшифровки, который поддерживает OAEP? Мне не удалось найти какие-либо документы по нему, но я по общему признанию не эксперт OpenSSL.

    guard PKCS7_decrypt(p7, privateKey, x509Cert, decryptedData, 0) == 1 else {
        throw OpenSSLTests.decryptException
    }

    ...

Это не имеет значения, но я использую OpenSSL в Swift на клиенте iOS.

1 Ответ

2 голосов
/ 12 июля 2019

Наконец нашел ответ на этот вопрос.

В документах нигде не упоминается заполнение OAEP, но кажется, что заполнение OAEP не поддерживается для функции PKCS7_decrypt в OpenSSL.Из того, что я могу сказать, как шифр, так и заполнение автоматически распознаются при попытке расшифровки.

Я попытался использовать функцию CMS_decrypt в OpenSSL, которая также не имеет флагов для указания заполнения, и он был в состояниипросто отлично расшифровать AES256 шифр с заполнением OAEP.

 ... 

    //nil would represent failure
    guard let cms = d2i_CMS_bio(encryptedDataBIO, nil) else {
        throw OpenSSLTestErrors.failedToLoadCMS
    }

   //1 indicates success
    guard CMS_decrypt(cms, key, x509Cert, nil, decryptedData, 0) == 1 else {
        throw OpenSSLTestErrors.failedToDecrypt
    }

Документы для CMS_decrypt расположены здесь

Я бы хотел больше разбираться в OpenSSLчтобы объяснить, почему функция PKCS7_decrypt не работает, тогда как CMS_decrypt - для элементов, зашифрованных с помощью дополнения OAEP.(или почему функция PKCS7_decrypt успешно выполняется с заполнением PKCS1.5)

Я также не вижу, где в функции CMS_encrypt на OpenSSL вы можете указать свой отступ.По умолчанию он использует PKCS1.5, затем я проверяю зашифрованные данные с помощью декодера.Я предполагаю, что есть способ установить это также, так как я смог расшифровать контент, зашифрованный с помощью другой библиотеки, которая позволяла задавать заполнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...