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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline antiigor  
#1 Оставлено : 3 сентября 2014 г. 19:30:28(UTC)
antiigor

Статус: Участник

Группы: Участники
Зарегистрирован: 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 КриптоПРО, яндекс с гуглом не дают ответ на этот простой на первый взгляд вопрос в течении нескольких дней.
Offline Андрей Писарев  
#2 Оставлено : 3 сентября 2014 г. 20:24:59(UTC)
Андрей *

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

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

Сказал «Спасибо»: 605 раз
Поблагодарили: 2346 раз в 1842 постах
Какие несколько дней?
Начиная от Главной страницы сайта + несколько кликов:

http://cpdn.cryptopro.ru...ryptMessagesExample.html
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
antiigor оставлено 04.09.2014(UTC)
Offline Станислав Смышляев  
#3 Оставлено : 4 сентября 2014 г. 10:15:08(UTC)
Станислав Смышляев

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

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 81 раз в 62 постах
Добрый день!

Немного дополню Андрея. "На открытых ключах непосредственно не шифруют. Везде делают сессионный ключ и пользуют симметричное шифрование" – речь о криптографической сути преобразований и о некорректности употребленных Вами терминов. Действительно, открытый ключ в случае работы с российскими криптографическими алгоритмами используется для создания зашифрованного сообщения не напрямую. Происходит это так: создается временный случайный сессионный (для ГОСТ 28147-89) ключ, а также временная ключевая пара (т.н. эфемерный ключ). Сообщение шифруется на сессионном ключе. После этого на открытом ключе получателя и закрытом ключе временной ключевой пары производится VKO (по сути, Диффи-Хеллман + хэш), затем сессионный ключ зашифровывается на полученном ключе согласования. В сообщении оказываются (не считая атрибутов): 1) шифртекст сообщения (зашифрованный на сессионном ключе), 2) зашифрованный на ключе согласования сессионный ключ, 3) открытый ключ временной ключевой пары. На стороне получателя открытый ключ временной ключевой пары и закрытый ключ получателя используются для получения ключа согласования по VKO, который используется для расшифрования сессионного ключа, а сессионный ключ затем используется для расшифрования сообщения.

Все это можно произвести и вызовами CryptoAPI 1.0, но, конечно, удобнее всего использовать вызовы CryptoAPI 2.0 (CryptEncryptMessage) по аналогии с примером, указанным Андреем.

С уважением,
Станислав Смышляев, к.ф.-м.н.,
Заместитель генерального директора ООО "КРИПТО-ПРО"
Техническую поддержку оказываем здесь.
Наша база знаний.
thanks 2 пользователей поблагодарили Станислав Смышляев за этот пост.
Андрей * оставлено 04.09.2014(UTC), antiigor оставлено 04.09.2014(UTC)
Offline Андрей Писарев  
#4 Оставлено : 4 сентября 2014 г. 10:29:49(UTC)
Андрей *

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

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

Сказал «Спасибо»: 605 раз
Поблагодарили: 2346 раз в 1842 постах
И как примечание:
CryptEncryptMessage не подходит для шифрования больших файлов.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
antiigor оставлено 04.09.2014(UTC)
Offline antiigor  
#5 Оставлено : 4 сентября 2014 г. 11:33:40(UTC)
antiigor

Статус: Участник

Группы: Участники
Зарегистрирован: 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, чтобы я мог зашифрованный им файл расшифровать? Я просто в упор не вижу всех этих сложных преобразований в примере, или это всё сокрыто в реализации криптографических алгоритмов?
Offline Андрей Писарев  
#6 Оставлено : 4 сентября 2014 г. 11:44:14(UTC)
Андрей *

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

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

Сказал «Спасибо»: 605 раз
Поблагодарили: 2346 раз в 1842 постах
Все действия выполняет: CryptEncryptMessage \ CryptDecryptMessage.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
antiigor оставлено 04.09.2014(UTC)
Offline Андрей Писарев  
#7 Оставлено : 4 сентября 2014 г. 12:03:25(UTC)
Андрей *

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

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

Сказал «Спасибо»: 605 раз
Поблагодарили: 2346 раз в 1842 постах
Автор: antiigor Перейти к цитате
Спасибо за пример, даже зная что искать не смог его накликать с главной страницы :), буду разбираться. Однако он не отвечает на вопрос, как расшифровать файл, зашифрованный cryptcp.
Автор: Андрей * Перейти к цитате
CryptEncryptMessage не подходит для шифрования больших файлов.

У cryptcp такая же проблема? Что он использует? В примере в CryptEncryptMessage, CryptDecryptMessage передаётся небольшое сообщение, поток файла мне "кусочками" скармливать? Если да то какого размера?


Можно шифровать\расшифровывать несколько десятков Мб (в память загружается файл целиком).

Для случая размеров в х Гб - применяется поточная обработка.

Кстати, есть и об этом примечание на странице:
Цитата:

http://www.cryptopro.ru/products/other/cryptcp
Версия 3.36 приложения командной строки cryptcp поддерживает потоковые операции работы с файлами при шифровании и ЭЦП, поэтому позволяет шифровать, подписывать и проверять подписи больших файлов.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
antiigor оставлено 04.09.2014(UTC)
Offline antiigor  
#8 Оставлено : 4 сентября 2014 г. 12:08:46(UTC)
antiigor

Статус: Участник

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

Сказал(а) «Спасибо»: 10 раз
Спасибо! Думаю что несколько десятков Мб устроят...
Offline antiigor  
#9 Оставлено : 3 октября 2014 г. 16:01:59(UTC)
antiigor

Статус: Участник

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

Сказал(а) «Спасибо»: 10 раз
Коллеги, хочу ещё поинтересоваться по поводу получения сертификата из файла. Сryptcp очень легко может использовать сертификат из файла с ключём -f, но используя CryptoAPI не понимаю как взять сертификат не из хранилища а из файла? Опять не могу найти подходящий пример :(
Найти смог только как сертификат легко и просто достаётся из файла в .Net: X509Certificate2 cert1 = new X509Certificate2("alice.cer");
Но как это сделать используя CryptoAPI, чтоб потом использовать сертификат в CryptEncryptMessage? Или сертификат необходимо обязательно сперва импортировать в хранилище? Но ведь cryptcp то этого не делает (или делает, а потом удаляет?)

И ещё такой вопрос, здесь на форуме не однократно упоминались исходники csptest, но ссылки везде, где я встречал, к ним видут битые. Исходники где-то доступны?
Offline antiigor  
#10 Оставлено : 8 октября 2014 г. 10:46:05(UTC)
antiigor

Статус: Участник

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

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