Статус: Участник
Группы: Участники
Зарегистрирован: 03.09.2014(UTC) Сообщений: 16  Откуда: Москва Сказал(а) «Спасибо»: 10 раз
|
Добрый вечер! В реестре Windows установлен сертификат (есть закрытый ключ). Используя cryptcp, зашифровываю файл (единственный сертификат правильно определяется): cryptcp.exe -encr -norev text.txt text.enc Расшифровываю файл (единственный сертификат правильно определяется): cryptcp.exe -decr -norev text.enc text.txt
Воспрос следующий, как зашифрованный файл text.enc расшифровать после этого используя CryptoAPI? (Планируется шифровать и расшифровывать на разных машинах, где закрытый ключ будет только на расшифровывающей)
Есть ли где-нибудь внятный пример? В одной из веток этого форума вообще прочитал, что "На открытых ключах непосредственно не шифруют. Везде делают сессионный ключ и пользуют симметричное шифрование" (http://www.cryptopro.ru/CryptoPro/forum/view.asp?q=166), после прочтения этого я окончательно запутался
Огромное количество документации, FAQ КриптоПРО, яндекс с гуглом не дают ответ на этот простой на первый взгляд вопрос в течении нескольких дней.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,982   Сказал «Спасибо»: 605 раз Поблагодарили: 2349 раз в 1845 постах
|
|
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 10.04.2013(UTC) Сообщений: 186  Сказал(а) «Спасибо»: 1 раз Поблагодарили: 81 раз в 62 постах
|
Добрый день!
Немного дополню Андрея. "На открытых ключах непосредственно не шифруют. Везде делают сессионный ключ и пользуют симметричное шифрование" – речь о криптографической сути преобразований и о некорректности употребленных Вами терминов. Действительно, открытый ключ в случае работы с российскими криптографическими алгоритмами используется для создания зашифрованного сообщения не напрямую. Происходит это так: создается временный случайный сессионный (для ГОСТ 28147-89) ключ, а также временная ключевая пара (т.н. эфемерный ключ). Сообщение шифруется на сессионном ключе. После этого на открытом ключе получателя и закрытом ключе временной ключевой пары производится VKO (по сути, Диффи-Хеллман + хэш), затем сессионный ключ зашифровывается на полученном ключе согласования. В сообщении оказываются (не считая атрибутов): 1) шифртекст сообщения (зашифрованный на сессионном ключе), 2) зашифрованный на ключе согласования сессионный ключ, 3) открытый ключ временной ключевой пары. На стороне получателя открытый ключ временной ключевой пары и закрытый ключ получателя используются для получения ключа согласования по VKO, который используется для расшифрования сессионного ключа, а сессионный ключ затем используется для расшифрования сообщения.
Все это можно произвести и вызовами CryptoAPI 1.0, но, конечно, удобнее всего использовать вызовы CryptoAPI 2.0 (CryptEncryptMessage) по аналогии с примером, указанным Андреем.
|
С уважением, Станислав Смышляев, к.ф.-м.н., Заместитель генерального директора ООО "КРИПТО-ПРО" Техническую поддержку оказываем здесь. Наша база знаний.
|
 2 пользователей поблагодарили Станислав Смышляев за этот пост.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,982   Сказал «Спасибо»: 605 раз Поблагодарили: 2349 раз в 1845 постах
|
И как примечание: CryptEncryptMessage не подходит для шифрования больших файлов. |
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 03.09.2014(UTC) Сообщений: 16  Откуда: Москва Сказал(а) «Спасибо»: 10 раз
|
Спасибо за пример, даже зная что искать не смог его накликать с главной страницы :), буду разбираться. Однако он не отвечает на вопрос, как расшифровать файл, зашифрованный cryptcp. Автор: Андрей *  CryptEncryptMessage не подходит для шифрования больших файлов. У cryptcp такая же проблема? Что он использует? В примере в CryptEncryptMessage, CryptDecryptMessage передаётся небольшое сообщение, поток файла мне "кусочками" скармливать? Если да то какого размера? Автор: svs  Действительно, открытый ключ в случае работы с российскими криптографическими алгоритмами используется для создания зашифрованного сообщения не напрямую. Происходит это так: создается временный случайный сессионный (для ГОСТ 28147-89) ключ, а также временная ключевая пара (т.н. эфемерный ключ). Сообщение шифруется на сессионном ключе. После этого на открытом ключе получателя и закрытом ключе временной ключевой пары производится VKO (по сути, Диффи-Хеллман + хэш), затем сессионный ключ зашифровывается на полученном ключе согласования. В сообщении оказываются (не считая атрибутов): 1) шифртекст сообщения (зашифрованный на сессионном ключе), 2) зашифрованный на ключе согласования сессионный ключ, 3) открытый ключ временной ключевой пары. На стороне получателя открытый ключ временной ключевой пары и закрытый ключ получателя используются для получения ключа согласования по VKO, который используется для расшифрования сессионного ключа, а сессионный ключ затем используется для расшифрования сообщения. Все это можно произвести и вызовами CryptoAPI 1.0, но, конечно, удобнее всего использовать вызовы CryptoAPI 2.0 (CryptEncryptMessage) по аналогии с примером, указанным Андреем.
А как шифрует cryptcp, чтобы я мог зашифрованный им файл расшифровать? Я просто в упор не вижу всех этих сложных преобразований в примере, или это всё сокрыто в реализации криптографических алгоритмов?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,982   Сказал «Спасибо»: 605 раз Поблагодарили: 2349 раз в 1845 постах
|
Все действия выполняет: CryptEncryptMessage \ CryptDecryptMessage.
|
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,982   Сказал «Спасибо»: 605 раз Поблагодарили: 2349 раз в 1845 постах
|
Автор: antiigor  Спасибо за пример, даже зная что искать не смог его накликать с главной страницы :), буду разбираться. Однако он не отвечает на вопрос, как расшифровать файл, зашифрованный cryptcp. Автор: Андрей *  CryptEncryptMessage не подходит для шифрования больших файлов. У cryptcp такая же проблема? Что он использует? В примере в CryptEncryptMessage, CryptDecryptMessage передаётся небольшое сообщение, поток файла мне "кусочками" скармливать? Если да то какого размера? Можно шифровать\расшифровывать несколько десятков Мб (в память загружается файл целиком). Для случая размеров в х Гб - применяется поточная обработка. Кстати, есть и об этом примечание на странице: Цитата:http://www.cryptopro.ru/products/other/cryptcp Версия 3.36 приложения командной строки cryptcp поддерживает потоковые операции работы с файлами при шифровании и ЭЦП, поэтому позволяет шифровать, подписывать и проверять подписи больших файлов. |
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 03.09.2014(UTC) Сообщений: 16  Откуда: Москва Сказал(а) «Спасибо»: 10 раз
|
Спасибо! Думаю что несколько десятков Мб устроят...
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 03.09.2014(UTC) Сообщений: 16  Откуда: Москва Сказал(а) «Спасибо»: 10 раз
|
Коллеги, хочу ещё поинтересоваться по поводу получения сертификата из файла. Сryptcp очень легко может использовать сертификат из файла с ключём -f, но используя CryptoAPI не понимаю как взять сертификат не из хранилища а из файла? Опять не могу найти подходящий пример :( Найти смог только как сертификат легко и просто достаётся из файла в .Net: X509Certificate2 cert1 = new X509Certificate2("alice.cer"); Но как это сделать используя CryptoAPI, чтоб потом использовать сертификат в CryptEncryptMessage? Или сертификат необходимо обязательно сперва импортировать в хранилище? Но ведь cryptcp то этого не делает (или делает, а потом удаляет?)
И ещё такой вопрос, здесь на форуме не однократно упоминались исходники csptest, но ссылки везде, где я встречал, к ним видут битые. Исходники где-то доступны?
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 03.09.2014(UTC) Сообщений: 16  Откуда: Москва Сказал(а) «Спасибо»: 10 раз
|
Неужели никто не работал с сертификатом из файла? На мой взгляд задача должна быть довольно распространённой, сертификат с открытым ключём, который используется всеми пользователями, лежит в базе или в директории клиента, и централизованно обновляется. Новым пользователям не нужно дополнительно устанавливать сертификат, при замене сертификата его нужно поменять только в одном месте. Нашёл на msdn как можно открыть хранилище сертификатов из файла *.sto: hFileStoreHandle = CertOpenStore( CERT_STORE_PROV_FILENAME, // the store provider type ENCODING_TYPE, // if needed, use the usual encoding types NULL, // use the default HCRYPTPROV 0, // accept the default for all dwFlags L"FileStore.sto" ); // the name of an existing file as a Unicode string Но тут во первых не понятно, как такое хранилище создать/экспортировать, а во вторых, насколько я понял, в реализации CertOpenStore от Крипто-ПРО для параметра lpszStoreProvider поддерживются только значения CERT_STORE_PROV_SYSTEM и CERT_STORE_PROV_MEMORY и CERT_STORE_PROV_COLLECTION (http://cpdn.cryptopro.ru/content/capilite/html/group___store_func_1g28c111878a454ae35bb38651664673f9.html) Исходники csptest канули в Лету? :) Отредактировано пользователем 8 октября 2014 г. 10:47:51(UTC)
| Причина: Не указана
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close