Статус: Участник
Группы: Участники
Зарегистрирован: 22.01.2014(UTC) Сообщений: 16  Откуда: Сургут Сказал(а) «Спасибо»: 1 раз
|
Здравствуйте, уважаемые эксперты! Помогите пожалуйста с (не)простым вопросом. Согласно вашему примеру производится зашифрование файла с использованием открытого ключа получателя и закрытого ключа отправителя. На выходе я получаю: зашифрованные данные, зашифрованный сессионый ключ и вектор инициализации. Расшифрование происходит без проблем, для этого используется: 1. зашифрованные данные 2. зашифрованный сессионный ключ 3. вектор инициализации 4. открытый ключ отправителя (сертификат) Вопрос. Подскажите пожалуйста, куда копать, чтобы после выполнения операции шифрования упаковать все данные вместе с сертификатом отправителя в один файл, содержащий всё необходимое для расшифрования получателем? Предполагается, что для этого необходимо использовать формат PKCS#7 (и расширение файла p7m). Но с примерами и документацией конкретно по этому вопросу мягко говоря ну очень скудно. Заранее спасибо!
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.01.2008(UTC) Сообщений: 675   Откуда: Йошкар-Ола Сказал «Спасибо»: 3 раз Поблагодарили: 95 раз в 68 постах
|
Просто есть "низкоуровневые" функции (использованные в этом примере), а есть "высокоуровневые", которые как-раз и работают с упакованными в ASN.1 структурами вроде PKCS#7.
Примерная последовательность шифрования: 1) CryptMsgOpenToEncode(...CMSG_ENVELOPED...); 2) CryptMsgUpdate; 3) CryptMsgClose;
Примеров очень много в MSDN. |
С уважением, Юрий Строжевский |
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 22.01.2014(UTC) Сообщений: 16  Откуда: Сургут Сказал(а) «Спасибо»: 1 раз
|
Да, нужны именно "низкоуровневые" функции, чтобы работать с данными в режиме потока, "высокоуровневые" для этого не подходят.
Понятно, что начинать надо с CryptMsgOpenToEncode(...CMSG_ENVELOPED...); Непонятно другое. Как упаковать в "конверт" зашифрованные данные, зашифрованный сессионный ключ, вектор инициализации и сертификат отправителя. Непонятно, надо ли сначала шифровать, а потом упаковывать, или это всё делается сразу? Примеров к сожалению не нашёл. Буду очень признателен, если вы поделитесь ссылкой на пример. Неужели этого никто никогда не делал? Все поголовно используют только "высокоуровневые" функции?
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.01.2008(UTC) Сообщений: 675   Откуда: Йошкар-Ола Сказал «Спасибо»: 3 раз Поблагодарили: 95 раз в 68 постах
|
Автор: aleksey.gallyamov  Да, нужны именно "низкоуровневые" функции, чтобы работать с данными в режиме потока, "высокоуровневые" для этого не подходят.
Понятно, что начинать надо с CryptMsgOpenToEncode(...CMSG_ENVELOPED...); Непонятно другое. Как упаковать в "конверт" зашифрованные данные, зашифрованный сессионный ключ, вектор инициализации и сертификат отправителя. Непонятно, надо ли сначала шифровать, а потом упаковывать, или это всё делается сразу? Примеров к сожалению не нашёл. Буду очень признателен, если вы поделитесь ссылкой на пример. Неужели этого никто никогда не делал? Все поголовно используют только "высокоуровневые" функции? Вы примеры то по этим функциям посмотрите. Там много что есть. Уверен, что все ваши потребности будут удовлетворены именно высокоуровневыми функциями. Также посмотрите на CryptMsgControl - тоже много что интересного можно найти. Если нужно лезть глубоко внутрь (в чём я пока сильно сомневаюсь), то смотрите RFC по работе с ГОСТ. |
С уважением, Юрий Строжевский |
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 22.01.2014(UTC) Сообщений: 16  Откуда: Сургут Сказал(а) «Спасибо»: 1 раз
|
От высокоуровневых функций пришлось отказаться в виду того, что у них существуют ограничение на объём обрабатываемых данных.
Глубоко внутрь лезть бы не хотелось. Нужно решить простую задачу: зашифровать файл и передать его получателю, чтобы он мог его расшифровать с использованием Крипто Про и ГОСТ-алгоритмов. Не должно быть ограничений на размер файла. Странно, что в примерах есть зашифрование/расшифрование файла без упаковки/распаковки в PKCS#7. По сути это бесполезные примеры, если только принимающая и отправляющая стороны не будут использовать одно и тоже ПО, которые будут использовать свой формат для передачи данных.
Т.е. вы не сталкивались с необходимостью шифрования/дешифрования в PKCS#7 в потоковом режиме?
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.01.2008(UTC) Сообщений: 675   Откуда: Йошкар-Ола Сказал «Спасибо»: 3 раз Поблагодарили: 95 раз в 68 постах
|
Автор: aleksey.gallyamov  От высокоуровневых функций пришлось отказаться в виду того, что у них существуют ограничение на объём обрабатываемых данных.
Глубоко внутрь лезть бы не хотелось. Нужно решить простую задачу: зашифровать файл и передать его получателю, чтобы он мог его расшифровать с использованием Крипто Про и ГОСТ-алгоритмов. Не должно быть ограничений на размер файла. Странно, что в примерах есть зашифрование/расшифрование файла без упаковки/распаковки в PKCS#7. По сути это бесполезные примеры, если только принимающая и отправляющая стороны не будут использовать одно и тоже ПО, которые будут использовать свой формат для передачи данных.
Т.е. вы не сталкивались с необходимостью шифрования/дешифрования в PKCS#7 в потоковом режиме? Сталкивался, более 10-ти лет назад, когда писал "КриптоАрм". И там используются высокоуровневые функции в потоковом режиме. Никаких ограничений у высокоуровневых функций по объёмам нет. Смотрите описание и примеры использования функций. |
С уважением, Юрий Строжевский |
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 22.01.2014(UTC) Сообщений: 16  Откуда: Сургут Сказал(а) «Спасибо»: 1 раз
|
Автор: Юрий  И там используются высокоуровневые функции в потоковом режиме. Это как  ? CryptEncryptMessage CryptDecryptMessage не поддерживают работу с потоками. Зашифровать/расшифровать можно только весь объём данных сразу. Попробуйте передать на вход 10 Гб к примеру. Пускай такой объём вряд ли понадобиться шифровать, важно чтобы такая возможность была и это работало.
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.01.2008(UTC) Сообщений: 675   Откуда: Йошкар-Ола Сказал «Спасибо»: 3 раз Поблагодарили: 95 раз в 68 постах
|
Автор: aleksey.gallyamov  Автор: Юрий  И там используются высокоуровневые функции в потоковом режиме. Это как  ? CryptEncryptMessage CryptDecryptMessage не поддерживают работу с потоками. Зашифровать/расшифровать можно только весь объём данных сразу. Попробуйте передать на вход 10 Гб к примеру. Пускай такой объём вряд ли понадобиться шифровать, важно чтобы такая возможность была и это работало. Мда... Внимательно читаем моё первое сообщение в этой теме. |
С уважением, Юрий Строжевский |
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 22.01.2014(UTC) Сообщений: 16  Откуда: Сургут Сказал(а) «Спасибо»: 1 раз
|
Автор: Юрий  Мда... Внимательно читаем моё первое сообщение в этой теме. А я-то думал, что CadesMsgOpenToEncode относится к "низкоуровневым" функциям: 
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 22.01.2014(UTC) Сообщений: 16  Откуда: Сургут Сказал(а) «Спасибо»: 1 раз
|
(имеется в виду CryptMsgOpenToEncode)
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close