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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline olekhov  
#1 Оставлено : 6 марта 2018 г. 17:46:50(UTC)
olekhov

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

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

Сказал(а) «Спасибо»: 4 раз
Задача сформулирована в предыдущем посте:
https://www.cryptopro.ru...aspx?g=posts&t=13494

сформировать (временный) ключ подписи и экспортировать его (в зашифрованном виде).
На принимающей стороне расшифровать.

Есть прототип, работающий на внешнем криптодвижке (openssl):
В openssl:
O1. генерируется ключ+публичный ключ "приёмника".

в CSP:
CSP1. генерируется экспортируемый ключ 34.10,
CSP2. генерируется эфемерный 34.10 для экспорта, импортируется публичный ключ из openssl (формируется KEK),
CSP3. ключ из п.CSP1 экспортируется в зашифрованном виде (PRIVATEKEYBLOB)

в OpenSSL:
O2. импортируется публичная часть эфемерного ключа из CSP2
O3. выводится KEK. Для вывода KEK используется keyUnwrapCryptoPro (rfc4357, пп. 6.3-6.5), UKM берётся из контейнера PRIVATEKEYBLOB.
O4. расшифровывается PRIVATEKEYBLOB.

контрольная сумма под расшифрованным ключом сходится и публичный ключ соответствует тому, что можно экспортировать как PUBLICKEYBLOB в п. CSP1

Хотелось бы повторить тоже самое, но на принимающей стороне использовать КриптоПРО CSP.

Проблема возникает при импорте блоба PRIVATEKEYBLOB:

Принимающая сторона имеет контейнер с ключом AT_KEYEXCHANGE.
При первом импорте ключ импортируется (проблемы с добычей значения ключа - в соседнем посте). и при этом записывается в контейнер на место AT_SIGNATURE.
При попытке импорта другого PRIVATEKEYBLOB CryptImportKey возвращает NTE_EXISTS (0x8009000F).

Вопросы:
1. Так и задумано?
2. Есть методы уничтожить ключ AT_SIGNATURE не уничтожая контейнер (AT_KEYEXCHANGE - важный долговременный ключ)?







Offline Русев Андрей  
#2 Оставлено : 7 марта 2018 г. 9:18:01(UTC)
Русев Андрей

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

Группы: Администраторы, Участники
Зарегистрирован: 16.04.2008(UTC)
Сообщений: 1,271

Сказал(а) «Спасибо»: 22 раз
Поблагодарили: 446 раз в 325 постах
1. Да.
2. Нет.
Импортируйте в другой контекст, открытый с флагом CRYPT_VERIFYCONTEXT, тогда закрытый ключ нигде не сохранится.
Официальная техподдержка. Официальная база знаний.
thanks 1 пользователь поблагодарил Русев Андрей за этот пост.
olekhov оставлено 07.03.2018(UTC)
Offline olekhov  
#3 Оставлено : 7 марта 2018 г. 10:54:28(UTC)
olekhov

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

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

Сказал(а) «Спасибо»: 4 раз
Есть некоторое недопонимание.
есть ключ для расшифровки ключей в контейнере "key_decryptor", AT_KEYEXCHANGE. на его публичном ключе был зашифрован ключ.

мне нужно открыть два контекста?
CryptAcquireContext(&hDecrProv, "key_decryptor", .... );
CryptGetUserKey(hDecrProv, AT_KEYEXCHANGE, &hDecrKey);
CryptAcquireContext(&hTempProv, NULL, ... CRYPT_VERIFYCONTEXT);

и? в какой из контекстов импортировать публичный ключ к эфемерному ключу из п. CSP2?
CryptImportKey(hTempProv, pbEphemPub, cbEphemPub, hDecrKey, 0, &hKEK);
Так? возвращает NTE_KEYSET_NOT_DEF 0x80090019

по расшифровке PRIVATEKEYBLOB непосредственно на CSP можете подсказать?

Отредактировано пользователем 7 марта 2018 г. 10:56:22(UTC)  | Причина: Не указана

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