31.07.2001 17:25:54Работа с ключами при шифровании Ответов: 7
Антон Кузнецов
Вопрос 1: При шифрации в созданном мной приложении могу я использовать один и тот же ключ для зашифрования и расшифрования?

Вопрос 2: Где и как организуется хранение открытых ключей других пользователей?
 
Ответы:
31.07.2001 19:10:12Игорь Курепкин
Вообще при шифровании по ГОСТу (или по DES) всегда используется один и тот же ключ. Это ключ является сеансовым (сформированным на соединение, или сообщение).
Данный сеансовый ключ передается получающей стророне в нашем случае с использованием алгоритма Diffi-Helman.

Вопрос в следующем. Какой уровень вы хотите использовать для встраивания.

Рекомендую почитать http://www.cryptopro.ru/CryptoPro/forum/myforum.asp?q=14

При выборе уровня встраивания соответственно и будут определяться вопросы по хранению открытых ключей.
01.08.2001 9:48:24Антон Кузнецов
Посоветуйте тогда каким путем мне лучше пойти. Моя задача: Есть несколько клиентов, они посылают мне сообщения (в виде файлов, по модему), при этом они должны зашифровать и подписать свои файлы. Я должен расшифровать и убедиться, что данное сообщение действительно от данного клиента.
В данном случае никакие Центры сертификации мне не помогут и реализовывать это надо самому.
01.08.2001 9:57:40Игорь Курепкин
А почему вам не помогут никакие центры сертификации.

Если вы говорите, что вам нужно реализовывать все самому, то в результате вам придется:
1. Делать либо защищенный справочник открытых ключей, где вы будете ставить в соответствие открытых ключ и пользователя.
2. Либо воспользоваться уже готовым.

Попробуйте ответить на несколько вопросов.
1. Где будут генериться ключи (все в центре, пользователи будут делать сами).
2. Как происходит общение. Могут ли пользователь общаться между собой.
3. Как пользователям будут доставляться открытые ключи (с кем они будут общаться).
4. Что делать когда ключ скомпроментирован.

В резульатате вам все равно придется:
1. Делать формат хранения открытого ключа (а это уже есть и называется Х.509)
2. Делать реализацию справочников (есть и называется STORE)
3. Придумывать что то про компрометация (это CRL)

Рекомендую для начала почитать "Руководство администратора"
http://www.cryptopro.ru/CryptoPro/doc/Admin.pdf



01.08.2001 10:25:15Антон Кузнецов
1. Ключи буду генерировать я
2. Пользователи общаются только со мной.
3. пользователям доставляться открытые ключи будут на дискете лично в руки
4. Что делать когда ключ скомпроментирован? - Выдать новый ключ

>В резульатате вам все равно придется:
>1. Делать формат хранения открытого ключа (а это >уже есть и называется Х.509)
>2. Делать реализацию справочников (есть и >называется STORE)
>3. Придумывать что то про компрометация (это CRL)
Сейчас мне это надо реализовать несколько локально (без выхода в инет и не используя центры сертификации (лишняя морока)). Возникает вопрос как мне реализовать мою задачу, если это уже все есть? Как я понимаю все равно придется дописывать самому. Возникает следующий вопрос где взять инфу по реализации моей задачи с использованием уже всего готового (как Вы говорите)? У Вас на сайте я ничего конкретного по поводу реализации ничего не нашел (кроме справочника программиста, но и там возникает куча вопросов: как хранить ключи, как с помощью ключей шифровать и расшифровывать (с помощью одного и тогоже ключа сессии не получается зашифровать и расшифровать сообщение)).

>Рекомендую для начала почитать "Руководство >администратора"
>http://www.cryptopro.ru/doc/Admin.pdf

Спасибо, читал.
01.08.2001 11:37:54Игорь Курепкин
Ну вообще все хорошо.

Если нет желания использовать центр, ключ и сертификат пользователя делается теми же функциями CryptoAPI. Пример есть в наших тестах на сервере.

Недостаток такого использования.
1. Делается ключ и сертификат пользователя на ключевой носитель не записывается.
2. Отсутствует формально центр сертификации (что в перспективе по закону может оказаться не удобно). можно конечно это место и назвать центром.

Можно вместо функций на C пользоваться COM (xenroll). Задача которого сделать запрос и установить сертификат пользователя (и центра если он там есть). В процессе установки сертификат пользователя запишется на дискету.

А вообще я бы преложил поставить 2000 сервер, включить на нем центр сертификации и делать ключи пользователей на нем централизованно.

Писать программ нужно нисколько. Можно изменить внешний вид HTML и все.

01.08.2001 11:56:46Антон Кузнецов
>>Если нет желания использовать центр, ключ и >>сертификат пользователя делается теми же >>функциями CryptoAPI. Пример есть в наших тестах >>на сервере.

>>Недостаток такого использования.
>>1. Делается ключ и сертификат пользователя на >>ключевой носитель не записывается.

А куда записывается? И что сним можно сделать после генерации?

>>2. Отсутствует формально центр сертификации
>>(что в перспективе по закону может оказаться не >>удобно). можно конечно это место и назвать >>центром.

Как можно организовать хранение ключей своими средствами?

Как я понял для зашифрования используется закрытый ключ отправителя и открытый ключ получателя, а для расшифрования наоборот. Так как это реализуется на практике? У Вас в руководстве по программированию этого не описано.
01.08.2001 12:59:05Игорь Курепкин
>>>А куда записывается? И что сним можно сделать после генерации?

Если вы скомпилите тест с нашего сервера или воьмете уже готовую тестовую программу, то увидете что сертификат записывается просто в файл.

>>>>Как можно организовать хранение ключей своими средствами?

Организовать хранение секретных ключей нельзя никак. Они хранятся в том виде и на тех носителях, что реализовано в СКЗИ.

Открытые ключи можете хранить как угодно, обеспечив их целостность. Например в виде подписанного сертификата.

>>>>Как я понял для зашифрования используется закрытый ключ отправителя и открытый ключ получателя, а для расшифрования наоборот. Так как это реализуется на практике? У Вас в руководстве по программированию этого не описано.

Для шифрования используется симметричный сеансовый ключ. Это ключ шифруется по алгорутму DH с использованием открытого ключа получателя.
Расшифровывается на секретном ключе получателя.

Еще раз. Не советую вам пользоваться функциями низкого уровня. Вы на разртаботку потратите кучу времени.
Пользуйте CryptoAPI. Подписать и зашифровать можно вызовом одной функции.