| ||||
| ||||
Мне нужно экспортировать private key с eToken Если посмотреть через утилиту eToken Properties, искомый контейнер и ключ на токене есть. Действую так: strProvName = "eToken Base Cryptographic Provider"; dwProvType = RSA_FULL; CryptAcquireContext(&hProvOld, strOldName.c_str(), strProvName.c_str(), dwProvType, 0) CryptGetUserKey( hProvOld, AT_KEYEXCHANGE, &hOldExchKey) CryptExportKey(hOldExchKey, 0, PRIVATEKEYBLOB, 0, NULL, &dwBlobLen) GetLastError() возвращает ошибку 0x8009000A (Указан неправильный тип) Из-за чего такое может быть?.. | ||||
Ответы: | ||||
| ||||
Если это eToken PRO, то экспорт секретного ключа из него запрещён всегда. Так сделал производитель. | ||||
| ||||
Действительно, у нас eToken Pro. Однако, если использовать в качестве криптопровайдера - КриптоПро, то экспорт секретного ключа в зашифрованном виде проходит: запускали немного изменённый пример из КриптоПро CSP SDK (Пример на копирование закрытого ключа) Вопрос... Почему такая разница между двумя CSP? Раз можно это сделать через КриптоПро CSP, значит, можно как-то сделать и через eToken CSP, нет? Фактически, мне нужно осуществить переименование контейнера, для этого я пытаюсь скопировать ключевую пару со старого контейнера в новый, а старый после этого удалить. Задача в том, чтобы это можно было осуществить, используя eToken CSP. | ||||
| ||||
Разница в том, что, при использовании "КриптоПро CSP" - eToken выступает только как место хранения контейнера ключа, а вся криптография - за пределами етокена. Ключ, когда он нужен, достаётся из контейнера на етокене и отдаётся в CSP, который работает на Windows. При использовании "eToken base CSP" реализация криптоалгоритмов (уже других, не-ГОСТ) аппаратная, т.е. внутри самого етокена. Поэтому ключ не покидает пределов етокена. Вот потому-то и считается, что, по соображениям безопасности, ключ нельзя экспортировать за пределы етокена. Можно поинтересоваться - зачем нужно переименовывать контейнер? Пусть называется так, как есть. Пользователь обычно не работает с именами контейнеров (а работает с сертификатами). | ||||
| ||||
Спасибо за информацию! Дело в том, что у нас логика приложения завязана на имена контейнеров: например, у контейнера без сертификата одна приставка, у контейнера с отозванным с-м другая приставка и т.п. Видимо, будем менять логику. | ||||