Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро CSP 5.0
»
Неверный contentEncryptionAlgorithm в результате шифрования функцией CryptEncryptMessage
Статус: Новичок
Группы: Участники
Зарегистрирован: 06.10.2022(UTC) Сообщений: 9  Сказал(а) «Спасибо»: 1 раз Поблагодарили: 1 раз в 1 постах
|
Здравствуйте! Столкнулся со странным поведением метода CryptEncryptMessage. Какой бы алгоритм шифрования я не передавал в ContentEncryptionAlgorithm.pszObjId, в полученной ASN.1 структуре в поле contentEncryptionAlgorithm я вижу 1.2.643.2.2.21 (ГОСТ 28147-89). Такое поведение наблюдается даже если передавать не ГОСТ алгоритмы, например szOID_NIST_AES256_ECB (2.16.840.1.101.3.4.1.41), или если вообще ничего не передавать в pszObjId. Воспроизводится на этом примере. Используется CSP 5.0.12000. В CAPILite точно такое же поведение. С чем связано такое поведение? Что нужно исправить в коде, чтобы я мог зашифровать данные алгоритмами AES, 3DES, RC2, RC4, ГОСТ Р 34.12-2015 Магма и ГОСТ Р 34.12-2015 Кузнечик? Есть ли примеры шифрования этими алгоритмами при помощи CryptEncryptMessage? Отредактировано пользователем 24 ноября 2022 г. 14:07:49(UTC)
| Причина: Не указана
|
 1 пользователь поблагодарил Adeptus за этот пост.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,081   Сказал «Спасибо»: 612 раз Поблагодарили: 2375 раз в 1868 постах
|
При шифровании используется сертификат(ы). Для ГОСТ по умолчанию используется 1.2.643.2.2.21 (ГОСТ 28147-89), явно пробовали другой указывать?
При шифровании RSA - использовали RSA сертификаты? |
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 06.10.2022(UTC) Сообщений: 9  Сказал(а) «Спасибо»: 1 раз Поблагодарили: 1 раз в 1 постах
|
Возможно я не до конца понимаю логику шифрования методом CryptEncryptMessage. Сертификат же должен использоваться для асимметричного шифрования сессионного ключа. В моем понимании, CryptEncryptMessage должен сгенерировать случайный сессионный ключ, который зашифруется асимметричным шифрованием с помощью публичного ключа сертификата. А уж каким алгоритмом шифруется контент - от сертификата не должно зависеть, по идее. Как связаны асимметричный алгоритм шифрования из сертификата и указанный мной в методе симметричный алгоритм?
RSA сертификаты не использовал.
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 06.10.2022(UTC) Сообщений: 9  Сказал(а) «Спасибо»: 1 раз Поблагодарили: 1 раз в 1 постах
|
Вопрос в догонку: как еще более явно указать методу CryptEncryptMessage, что контент нужно шифровать другим алгоритмом, а не тем что по-умолчанию?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,081   Сказал «Спасибо»: 612 раз Поблагодарили: 2375 раз в 1868 постах
|
псевдокод для примера поточного шифрования: Цитата: ContentEncryptAlgorithm: CRYPT_ALGORITHM_IDENTIFIER ... stStreamInfo.pfnStreamOutput = EncodeCallBack (вызывается для записи зашифрованного блока в итоговый файл)
ContentEncryptAlgorithm.pszObjId = oid алгоритма EnvelopedEncodeInfo. ContentEncryptionAlgorithm = ContentEncryptAlgorithm CryptMsgOpenToEncode (... EnvelopedEncodeInfo .. stStreamInfo ) в цикле чтение по частям и вызов: CryptMsgUpdate (или сразу в память весь файл, если небольшой) cryptMsgClose
oid алгоритма: Цитата: szOID_Gost28147_89_TC26_Z_ParamSet = '1.2.643.7.1.2.5.1.1'; EncryptAlgorithm_id_tc26_cipher_gostr3412_2015_kuznyechik = '1.2.643.7.1.1.5.2'; // алгоритм шифрования «Кузнечик» EncryptAlgorithm_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm = '1.2.643.7.1.1.5.2.1'; // алгоритм шифрования «Кузнечик» в режиме гаммирования CTR с механизмом преобразования ключа ACPKM EncryptAlgorithm_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac = '1.2.643.7.1.1.5.2.2'; // аалгоритм шифрования «Кузнечик» в режиме гаммирования CTR с механизмом преобразования ключа ACPKM c вычислением имитовставки
|
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 06.10.2022(UTC) Сообщений: 9  Сказал(а) «Спасибо»: 1 раз Поблагодарили: 1 раз в 1 постах
|
Никакой разницы между CryptMsgOpenToEncode и CryptEncryptMessage не заметил. Единственное, что получилось - указание алгоритмов EncryptAlgorithm_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm и EncryptAlgorithm_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac действительно влияет на результат. Но это работает и в CryptEncryptMessage. Если указать EncryptAlgorithm_id_tc26_cipher_gostr3412_2015_kuznyechik - то в результате всё равно получаю 1.2.643.2.2.21 (ГОСТ 28147-89). Вопрос с AES, 3DES, RC2, RC4 остается открытым - что надо сделать, чтобы гостовым сертификатом зашифровать данные этими указанными алгоритмами? Использовал такие идентификаторы: AES128 - 2.16.840.1.101.3.4.1.2 AES192 - 2.16.840.1.101.3.4.1.26 AES256 - 2.16.840.1.101.3.4.1.41 3DES - 1.3.6.1.4.1.4929.1.6 RC2 - 1.2.840.113549.3.2 RC4 - 1.2.840.113549.3.4
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,081   Сказал «Спасибо»: 612 раз Поблагодарили: 2375 раз в 1868 постах
|
Автор: Adeptus  Никакой разницы между CryptMsgOpenToEncode и CryptEncryptMessage не заметил. Единственное, что получилось - указание алгоритмов EncryptAlgorithm_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm и EncryptAlgorithm_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac действительно влияет на результат. Но это работает и в CryptEncryptMessage. Если указать EncryptAlgorithm_id_tc26_cipher_gostr3412_2015_kuznyechik - то в результате всё равно получаю 1.2.643.2.2.21 (ГОСТ 28147-89). Вопрос с AES, 3DES, RC2, RC4 остается открытым - что надо сделать, чтобы гостовым сертификатом зашифровать данные этими указанными алгоритмами? Использовал такие идентификаторы: AES128 - 2.16.840.1.101.3.4.1.2 AES192 - 2.16.840.1.101.3.4.1.26 AES256 - 2.16.840.1.101.3.4.1.41 3DES - 1.3.6.1.4.1.4929.1.6 RC2 - 1.2.840.113549.3.2 RC4 - 1.2.840.113549.3.4 а почему не используется путь через криптопровайдер - Crypto-Pro с поддержкой RSA и соответствующим сертификатом? по аналогии, а почему не шифруется, но с указанием ГОСТа соседей (Avest CSP), 1.2.112.0.2.1.28147.12 ? |
|
|
|
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро CSP 5.0
»
Неверный contentEncryptionAlgorithm в результате шифрования функцией CryptEncryptMessage
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close