Ключевое слово в защите информации
ключевое слово
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Adeptus  
#1 Оставлено : 24 ноября 2022 г. 13:59:39(UTC)
Adeptus

Статус: Новичок

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

thanks 1 пользователь поблагодарил Adeptus за этот пост.
yalandaev оставлено 24.11.2022(UTC)
Offline Андрей *  
#2 Оставлено : 24 ноября 2022 г. 14:08:55(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,081
Мужчина
Российская Федерация

Сказал «Спасибо»: 612 раз
Поблагодарили: 2375 раз в 1868 постах
При шифровании используется сертификат(ы).
Для ГОСТ по умолчанию используется 1.2.643.2.2.21 (ГОСТ 28147-89),
явно пробовали другой указывать?

При шифровании RSA - использовали RSA сертификаты?
Техническую поддержку оказываем тут
Наша база знаний
Offline Adeptus  
#3 Оставлено : 24 ноября 2022 г. 14:19:49(UTC)
Adeptus

Статус: Новичок

Группы: Участники
Зарегистрирован: 06.10.2022(UTC)
Сообщений: 9
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 1 раз в 1 постах
Возможно я не до конца понимаю логику шифрования методом CryptEncryptMessage.
Сертификат же должен использоваться для асимметричного шифрования сессионного ключа. В моем понимании, CryptEncryptMessage должен сгенерировать случайный сессионный ключ, который зашифруется асимметричным шифрованием с помощью публичного ключа сертификата. А уж каким алгоритмом шифруется контент - от сертификата не должно зависеть, по идее. Как связаны асимметричный алгоритм шифрования из сертификата и указанный мной в методе симметричный алгоритм?

RSA сертификаты не использовал.
Offline Adeptus  
#4 Оставлено : 24 ноября 2022 г. 14:22:02(UTC)
Adeptus

Статус: Новичок

Группы: Участники
Зарегистрирован: 06.10.2022(UTC)
Сообщений: 9
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 1 раз в 1 постах
Вопрос в догонку: как еще более явно указать методу CryptEncryptMessage, что контент нужно шифровать другим алгоритмом, а не тем что по-умолчанию?
Offline Андрей *  
#5 Оставлено : 24 ноября 2022 г. 14:47:56(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 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 вычислением имитовставки
Техническую поддержку оказываем тут
Наша база знаний
Offline Adeptus  
#6 Оставлено : 25 ноября 2022 г. 14:53:51(UTC)
Adeptus

Статус: Новичок

Группы: Участники
Зарегистрирован: 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
Offline Андрей *  
#7 Оставлено : 25 ноября 2022 г. 15:27:14(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 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 ?
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.