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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline AlexDontsov2008  
#1 Оставлено : 23 ноября 2017 г. 10:36:19(UTC)
AlexDontsov2008

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

Группы: Участники
Зарегистрирован: 23.11.2017(UTC)
Сообщений: 1

Передо мной стоит задача реализации высокоуровневых функций шифрования, аналогичные функциям CryptEncryptMessage/СryptDecrypMessage, через низкоуровневые функции CryptEncrypt/CryptDecrypt.
Задача состоит в следующем:
1. Реализовать функцию myCryptEncryptMessage. Зашифровать данные с помощью myCryptEncryptMessage и расшифровать с использованием СryptDecrypMessage. В результате получить исходные данные.
2. Реализовать функцию myCryptDecryptMessage. Зашифровать данные с помощью CryptEncryptMessage и расшифровать с использованием myCryptDecryptMessage.

Собственно я установил демо-версию КриптоПро CSP 4.0 для OS Linux x64.
Шифрование и дешифрование данных, через указанные CryptEncryptMessage/СryptDecrypMessage функции, корректно работает.

Алгоритм реализации функции myCryptEncryptMessage достаточно прозрачен:
1. Получаем контекст криптопровайдера.
2. Генерируем сессионный ключ
3. Импортируем открытый ключ получателя зашифрованного сообщения из сертификата
4. Производим шифрование данных с помощью сессионного ключа
5. Зашифровываем сессионный ключ с помощью открытого ключа получателя зашифрованного сообщения
6. Получаем BLOB сессионного ключа и BLOB открытого ключа для замены необходимых частей структуры PKCS#7 enveloped-data
Непосредственно саму структуру PKCS#7 я получил с использованием CryptEncryptMessage

В качестве основы решения я опирался на пример: https://cpdn.cryptopro.r...example_EncryptFile.html

При данной реализации, функция должна отрабатывать без доступа к ключевому контейнеру отправителя зашифрованного сообщения и на выходе должен получаться PKCS#7 с соответствующими данными, такой что при передаче в функцию CryptDecryptMessage, на выходе должны получиться исходные данные.

Но при такой реализации возникают следующие проблемы, собственно которые я и хотел уточнить:
1. Ошибка при экспортировании(шифровании) сессионного ключа (NTE_BAD_KEY_STATE).
hKey = CryptGenKey(key_params); // флаг CRYPT_EXPORTABLE выставлен!
hPubKey = CryptImportPublicKeyInfo(recipient_certificate);
pbKeyData = CryptExportKey(hKey, hPubKey, SIMPLEBLOB);
(Обсуждение этой проблемы я нашел тут https://www.cryptopro.ru...ro/forum/view.asp?q=955)

2. Не совсем понятно какие части необходимо заменять в стуктуре PKCS#7. Я пробовал по примеру (https://www.cryptopro.ru/forum2/default.aspx?g=posts&t=2987), но к сожалению результат аналогичный

Собственно если существует возможность решить данную задачу, то прошу вас подсказать мне место, где я допустил ошибку. Если на практике эта задача не выполнима, то напишите по каким причинам. Заранее спасибо.
Offline Максим Коллегин  
#2 Оставлено : 23 ноября 2017 г. 17:16:25(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,407
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 721 раз в 625 постах
Думаю, вам стоит начать с изучения спецификаций. В качестве отправной точки можно взять https://www.cryptopro.ru/products/csp/tc26x509cms

Отредактировано пользователем 23 ноября 2017 г. 17:17:44(UTC)  | Причина: Не указана

Знания в базе знаний, поддержка в центре поддержки
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.