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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Миха  
#1 Оставлено : 6 сентября 2013 г. 4:34:26(UTC)
Миха

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

Группы: Участники
Зарегистрирован: 06.09.2013(UTC)
Сообщений: 14

Необходимо на устройство экспортировать ключ, чтобы производить подписи файлов. На винде ключ экспортируется в виде папки с 6 файлами. Как их правильно перенести в хранилище на iPad?
Offline Татьяна  
#2 Оставлено : 6 сентября 2013 г. 12:51:47(UTC)
Татьяна

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

Группы: Участники
Зарегистрирован: 06.02.2008(UTC)
Сообщений: 1,491
Откуда: Крипто-Про

Поблагодарили: 40 раз в 37 постах
Если ключи были созданы разрешенными для экспорта (их можно скопировать кнопкой «Скопировать контейнер»), то перенести их на ios можно. Для этого нужно на машине с windows/unix экспортировать ключ в блоб, передать блоб на ios и там импортировать из блоба в контейнер.

У нас в SDK есть похожие примеры:

http://cpdn.cryptopro.ru...gCertificateExample.html

http://cpdn.cryptopro.ru...ngSessionKeyExample.html

Если ключи были созданы запрещенными для экспорта, то средствами API их нельзя никуда скопировать. Чтобы это проверить, можно попытаться скопировать ключи, например, при помощи «Сервис – Скопировать контейнер» и, если вы получите ошибку «Ключ не может быть использован в указанном состоянии», это означает, что ключ запрещен для экспорта.
Татьяна
ООО Крипто-Про
Offline Миха  
#3 Оставлено : 9 сентября 2013 г. 9:30:03(UTC)
Миха

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

Группы: Участники
Зарегистрирован: 06.09.2013(UTC)
Сообщений: 14

пытаюсь на основе ваших прпимеров экспортировать ключ на iPad в файл. Не получаеться. Зависает на строке:
Код:

	if (CryptExportKey(
			hSenderPrivateKey,
			0,
			PRIVATEKEYBLOB,
			0,
			NULL,
			&dwBlobLenPrivateKey)) {
		printf("Size of the BLOB for the responder public key determined. \n");
	}



Весь код:
Код:

	HCERTSTORE hCertStore = CertOpenSystemStore(0, "MY");

	PCCERT_CONTEXT pUserCert = CertEnumCertificatesInStore(hCertStore, NULL);

	DWORD dwBlobLenPrivateKey;
	BYTE *pbBlobPrivateKey = NULL;

	HCRYPTPROV hProvSender = 0;         // Дескриптор CSP отправителя
	DWORD      dwKeySpecSender;

	HCRYPTKEY hSenderPrivateKey = 0;        // Дескриптор открытого ключа отправителя

	if (CryptAcquireCertificatePrivateKey(
			pUserCert,
			0,
			NULL,
			&hProvSender,
			&dwKeySpecSender,
			NULL)) {
		printf("The CSP handle has been acquired. \n");
	}
	else {
		printf("Error during CryptAcquireCertificatePrivateKey.");
	}


	if (CryptGetUserKey(
			hProvSender,
			dwKeySpecSender,
			&hSenderPrivateKey)) {
		printf("The sender private key has been acquired. \n");
	}
	else {
		printf("Error during CryptGetUserKey private key.");
	}
	

	if (CryptExportKey(
			hSenderPrivateKey,
			0,
			PRIVATEKEYBLOB,
			0,
			NULL,
			&dwBlobLenPrivateKey)) {
		printf("Size of the BLOB for the responder public key determined. \n");
	}
	else {
		printf("Error computing BLOB length.");
	}

	pbBlobPrivateKey = (BYTE *) malloc(dwBlobLenPrivateKey);

	if (pbBlobPrivateKey) {
		printf("Memory has been allocated for the BLOB. \n");
	}
	else {
		printf("Out of memory. \n");
	}


	if (CryptExportKey(
			hSenderPrivateKey,
			0,
			PRIVATEKEYBLOB,
			0,
			pbBlobPrivateKey,
			&dwBlobLenPrivateKey)) {
		printf("Contents have been written to the BLOB. \n");
	}
	else {
		printf("Error during CryptExportKey.");
	}
Offline Татьяна  
#4 Оставлено : 9 сентября 2013 г. 12:02:45(UTC)
Татьяна

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

Группы: Участники
Зарегистрирован: 06.02.2008(UTC)
Сообщений: 1,491
Откуда: Крипто-Про

Поблагодарили: 40 раз в 37 постах
У вас второй параметр CryptExportKey равен 0, а там должен быть ключ, на котором осуществляется экспорт. Поэтому ничего не работает.
Ключ, на котором будет осуществлен экспорт, можно например получить при помощи CryptDeriveKey из пароля. Последовательность действий такая:

DWORD cAlg = CALG_PRO_EXPORT;
CryptCreateHash(hProvSender, CALG_GR3411, 0, 0, &hHash)
CryptHashData(hHash, pbPassword, passwordLength, 0)
CryptDeriveKey(hProvSender, CALG_G28147, hHash, CRYPT_EXPORTABLE, &hKey)
CryptSetKeyParam(hKey, KP_ALGID, (BYTE*)&cAlg, 0)
Татьяна
ООО Крипто-Про
Offline Миха  
#5 Оставлено : 10 сентября 2013 г. 4:22:28(UTC)
Миха

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

Группы: Участники
Зарегистрирован: 06.09.2013(UTC)
Сообщений: 14

Нашел в ваших примерах KeyCopy. Его пытаюсь запустить на iPad. Та же самая ситуация, хотя все необходимые аргументы передаються. Зависает на строке:

Код:

if(CryptExportKey(
			hSenderKey,
			hSenderAgreeKey,
			PRIVATEKEYBLOB,
			0,
			NULL,
			&dwBlobLen ))
	{
		printf("Size of the BLOB for the sender key determined. \n");
	}
	else
	{
		HandleError("Error computing BLOB length.");
	}

Отредактировано пользователем 10 сентября 2013 г. 4:24:21(UTC)  | Причина: Не указана

Offline Татьяна  
#6 Оставлено : 10 сентября 2013 г. 11:22:16(UTC)
Татьяна

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

Группы: Участники
Зарегистрирован: 06.02.2008(UTC)
Сообщений: 1,491
Откуда: Крипто-Про

Поблагодарили: 40 раз в 37 постах
контейнер, из которого экспортируете ключ, с паролем?
Татьяна
ООО Крипто-Про
Offline Миха  
#7 Оставлено : 11 сентября 2013 г. 2:53:57(UTC)
Миха

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

Группы: Участники
Зарегистрирован: 06.09.2013(UTC)
Сообщений: 14

да
Offline Татьяна  
#8 Оставлено : 11 сентября 2013 г. 17:36:02(UTC)
Татьяна

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

Группы: Участники
Зарегистрирован: 06.02.2008(UTC)
Сообщений: 1,491
Откуда: Крипто-Про

Поблагодарили: 40 раз в 37 постах
После открытия контейнера установите пин с помощью SetProvParam PP_SIGNATUREPIN или PP_EXCHANGEPIN в зависимости от типа ключа
Татьяна
ООО Крипто-Про
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.