01.07.2007 13:12:10Экспорт private key с eToken Ответов: 4
jar
Мне нужно экспортировать 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 (Указан неправильный тип)

Из-за чего такое может быть?..
 
Ответы:
02.07.2007 13:07:13Василий
Если это eToken PRO, то экспорт секретного ключа из него запрещён всегда. Так сделал производитель.
02.07.2007 15:17:13jar
Действительно, у нас eToken Pro.

Однако, если использовать в качестве криптопровайдера - КриптоПро, то экспорт секретного ключа в зашифрованном виде проходит: запускали немного изменённый пример из КриптоПро CSP SDK (Пример на копирование закрытого ключа)

Вопрос... Почему такая разница между двумя CSP? Раз можно это сделать через КриптоПро CSP, значит, можно как-то сделать и через eToken CSP, нет?

Фактически, мне нужно осуществить переименование контейнера, для этого я пытаюсь скопировать ключевую пару со старого контейнера в новый, а старый после этого удалить. Задача в том, чтобы это можно было осуществить, используя eToken CSP.
02.07.2007 15:52:26Василий
Разница в том, что, при использовании "КриптоПро CSP" - eToken выступает только как место хранения контейнера ключа, а вся криптография - за пределами етокена. Ключ, когда он нужен, достаётся из контейнера на етокене и отдаётся в CSP, который работает на Windows.

При использовании "eToken base CSP" реализация криптоалгоритмов (уже других, не-ГОСТ) аппаратная, т.е. внутри самого етокена. Поэтому ключ не покидает пределов етокена. Вот потому-то и считается, что, по соображениям безопасности, ключ нельзя экспортировать за пределы етокена.

Можно поинтересоваться - зачем нужно переименовывать контейнер? Пусть называется так, как есть. Пользователь обычно не работает с именами контейнеров (а работает с сертификатами).
02.07.2007 20:06:35jar
Спасибо за информацию!
Дело в том, что у нас логика приложения завязана на имена контейнеров: например, у контейнера без сертификата одна приставка, у контейнера с отозванным с-м другая приставка и т.п.
Видимо, будем менять логику.