| 
	Статус: Участник
 Группы: Участники
 Зарегистрирован: 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,969  Сказал «Спасибо»: 605 разПоблагодарили: 2346 раз в 1842 постах
 
 |  | 
|  | 
    | 
              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,969  Сказал «Спасибо»: 605 разПоблагодарили: 2346 раз в 1842 постах
 
 | 
            
		      
                И как примечание: 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,969  Сказал «Спасибо»: 605 разПоблагодарили: 2346 раз в 1842 постах
 
 | 
            
		      
                Все действия выполняет: CryptEncryptMessage \ CryptDecryptMessage.
 | 
|  | 
    | 
              1 пользователь поблагодарил Андрей * за этот пост. |  | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Сотрудник
 Группы: Участники
 Зарегистрирован: 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 поддерживает потоковые операции работы с файлами при шифровании и ЭЦП, поэтому позволяет шифровать, подписывать и проверять подписи больших файлов. | 
|  | 
    | 
              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