(2020-02-25 11:36:27 отредактировано Binger)

Как реализовать поточное шифрование? PKCS11, OpenSSL, C++

Upd
Здравствуйте. Подскажите, пожалуйста, как возможно реализовать поточное шифрование с помощью указанных api?
Смотрел пример из вашего SDK по PKCS11 и заметил, что поддерживается только механизм GOST28147-89 и RSA. Мне хотелось бы работать также с ключами ГОСТ Р 34.10-2012 512-бит, ГОСТ Р 34.10-2012 256-бит, ГОСТ Р 34.10-2001.
В OpenSSL пытался использовать функцию

CMS_encrypt()

с флагом

CMS_STREAM

но так и не смог понять и найти какой-либо информации в интернете по добавлению данных для шифрования. Нужна именно подкачка данных на шифрование, что в PKCS11 выполняет функция

C_EncryptUpdate()

Интересует CMS Enveloped Data структура. Приоритетнее использовать OpenSSL.

Re: Как реализовать поточное шифрование? PKCS11, OpenSSL, C++

Добрый день.

GOST28147-89 - это алгоритм симметричного шифрования, пригодный для шифрования большого массива данных.
ГОСТ Р 34.10-2012 - это алгоритм выработки ключевых пар и проверки ЭП.

Если хотите использовать имеющиеся ключевые пары, то нужно смотреть в сторону схемы выработки общего секрета VKO GOST R 34.10-2012. Для дальнейшей подстановки результата (симметричного ключа) в GOST28147-89.

Вот здесь описание хорошее:
https://esmart.ru/upload/iblock/765/v6. … Ext_12.pdf

Для хотелось бы выяснить, что шифруем и в каком контексте.

С уважением, Алексей Лазарев, Компания "Актив"

(2020-02-25 14:21:50 отредактировано Binger)

Re: Как реализовать поточное шифрование? PKCS11, OpenSSL, C++

Алексей Лазарев, шифрование данных. С одной стороны шифруем открытым ключом, с другой стороны расшифровываем закрытым ключом сертификата получателя шифрованного сообщения и читаем данные. Если на шифрование нужно привезти большой объём данных, то разбиваем их на порции - здесь мне и нужно поточное шифрование. Не знаю, что тут ещё добавить. Алексей, случайно не знаете, как добиться этого с помощью OpenSSL?

Re: Как реализовать поточное шифрование? PKCS11, OpenSSL, C++

Ясно, но проблема в том, что GOST R 34.10-2012 - это не RSA, и в нем не реализован функционал шифрования на открытом ключе.

С уважением, Алексей Лазарев, Компания "Актив"

(2020-02-26 12:06:20 отредактировано Binger)

Re: Как реализовать поточное шифрование? PKCS11, OpenSSL, C++

Алексей Лазарев, не разбираюсь в таких тонкостях, возможно, я неверно объяснил.

Было реализовано блочное шифрование с помощью функции CMS_encrypt() из OpenSSL, и в качестве одного из аргументов в функцию посылаются сертификаты получателей сообщения. А расшифрование уже происходит с использованием функции CMS_decrypt(), где также одним из аргументов передаётся закрытый ключ одного из сертификатов получателей и сообщение расшифровывается.

И по такому же пути хочется реализовать поточное шифрование.

Re: Как реализовать поточное шифрование? PKCS11, OpenSSL, C++

Добрый день,
Можно вот тут поизучать как это в принципе работает:

https://github.com/openssl/openssl/blob … /cms_enc.c

https://github.com/openssl/openssl/blob … apps/cms.c

С уважением, Алексей Лазарев, Компания "Актив"

Re: Как реализовать поточное шифрование? PKCS11, OpenSSL, C++

Алексей Лазарев, добрый день. Да я всё это смотрел уже, там нет реализации подгрузки данных на шифрование

Re: Как реализовать поточное шифрование? PKCS11, OpenSSL, C++

Binger, общая идея такова: выставляете флаг CMS_STREAM, в CMS_Content_Info устанавливаете ключ адресата и прочие, затем в BIO_new_CMS передаете данные которые нужно зашифровать, а на выходе они попадут в другой BIO.

Чтобы лучше разобраться - нужно хорошо изучить исходники OpenSSL.

Re: Как реализовать поточное шифрование? PKCS11, OpenSSL, C++

Павел Анфимов, Спасибо, буду разбираться дальше))