Page tree

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

Введение

Рутокен PINPad представляет собой решение класса TrustScreen, которое позволяет визуализировать подписываемый документ на экране доверенного устройства перед наложением электронной подписи. Устройство позволяет реализовать следующие незаменимые в PKI-инфраструктуре возможности: 

  • Формировать запросы на сертификат в формате PKCS#10 для неизвлекаемых ключей электронной подписи ГОСТ Р 34.10-2001 с возможностью визуализации и подтверждения на устройстве;
  • Подписывать и шифровать данные в формате CMS с использованием алгоритмов ГОСТ Р 34.10-2001, ГОСТ Р 34.11-94 и ГОСТ 28147-89, схемы VKO;
  • Хранить и использовать сертификаты открытого ключа ГОСТ Р 34.10-2001 в формате X.509.

Кроме того, Рутокен PINPad поддерживает национальные стандарты в полном объеме:

  • алгоритмы  ГОСТ Р 34.10-2012 и ГОСТ Р 34.10-2001: генерация ключевых пар с проверкой качества, импорт ключевых пар, формирование и проверка электронной подписи, срок действия закрытых ключей до 3-х лет.
  • алгоритмы  ГОСТ Р 34.11-2012 и ГОСТ Р 34.11-94: вычисление значения хеш-функции данных, в том числе с возможностью последующего формирования электронной подписи.
  • алгоритм ГОСТ 28147-89: генерация и импорт ключей шифрования, шифрование данных в режимах простой замены, гаммирования и гаммирования с обратной связью, вычисление и проверка криптографической контрольной суммы данных (имитовставки ГОСТ).
  • выработка сессионных ключей (ключей парной связи): по схеме VKO GOST R 34.10-2001 (RFC 4357), расшифрование по схеме EC El-Gamal.
  • генерация последовательности случайных чисел требуемой длины.

Генерация ключевой пары 

Атрибуты ключевых объектов

Рутокен PINPad имеет два специфических атрибута закрытого ключа, которые влияют на поведение устройства при осуществлении криптографических операций с использованием такого ключа: CKA_VENDOR_KEY_CONFIRM_OP и CKA_VENDOR_KEY_PIN_ENTER. Оба атрибута присваиваются закрытому ключу при генерации ключевой пары соответственно указанным в шаблоне значениям и поэтому не могут быть изменены после генерации. Помимо закрытого ключа, эти атрибуты могут быть присвоены также секретному ключу.

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

Если ключ был создан с флагом повышенной защиты CKA_VENDOR_KEY_PIN_ENTER, то для подписи таким ключом перед операцией потребуется ввести PIN-код на тачскрине устройства

 

Примеры шаблонов ключей

Ниже представлены примеры шаблонов закрытого и открытого ключа с пояснениями.

Шаблон закрытого ключа ГОСТ Р 34.10-2001
CK_OBJECT_CLASS     ocPrivKey       = CKO_PRIVATE_KEY;
CK_UTF8CHAR      	PrivKeyLabel[]  = {"GOST Private Key"};
CK_BYTE          	KeyPairID[]     = {"GOST keypair"};
CK_KEY_TYPE         KeyType			= CKK_GOSTR3410;  // или CKK_GOSTR3410_512 для ключа длиной 512 бит
CK_BBOOL    		bTrue           = CK_TRUE;
CK_BYTE 	GOST3410_params_oid[]  	= { 0x06, 0x07, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x23, 0x01 }; // Параметры алгоритма ГОСТ Р 34.10-2001
 
CK_ATTRIBUTE GOST34_10_2001PrivateKey[] =
{
	{ CKA_CLASS, &ocPrivKey, sizeof(ocPrivKey)},                    // Объект закрытого ключа
	{ CKA_LABEL, &PrivKeyLabel, sizeof(PrivKeyLabel) - 1},      	// Метка ключа
	{ CKA_ID, &KeyPairID, sizeof(KeyPairID) - 1},         			// Идентификатор ключевой пары #1 (должен совпадать у открытого и закрытого ключей)
	{ CKA_KEY_TYPE, &KeyType, sizeof(ktGOST)},   					// Тип ключа
	{ CKA_DECRYPT, &bTrue, sizeof(bTrue)},                          // Ключ предназначен для расшифрования
	{ CKA_TOKEN, &bTrue, sizeof(bTrue)},                            // Ключ является объектом токена
	{ CKA_PRIVATE, &bTrue, sizeof(bTrue)},                          // Ключ доступен только после авторизации на токене
	{ CKA_DERIVE, &bTrue, sizeof(bTrue)},                           // Ключ поддерживает деривацию (из него могут быть получены другие ключи)
	{ CKA_VENDOR_KEY_CONFIRM_OP, &bTrue, sizeof(bTrue) },           // Операция подписи требует подтверждения на PINPad
	{ CKA_VENDOR_KEY_PIN_ENTER, &bTrue, sizeof(bTrue) },            // Операция подписи требует ввода PIN-кода на PINPad
	{ CKA_GOSTR3410_PARAMS, GOST3410params, sizeof(GOST3410params)} // Параметры алгоритма
};
Шаблон открытого ключа ГОСТ Р 34.10-2001
CK_OBJECT_CLASS     ocPubKey        = CKO_PUBLIC_KEY;
CK_UTF8CHAR      	PubKeyLabel[]   = {"GOST Public Key"};
CK_BYTE          	KeyPairID[]     = {"GOST keypair"};
CK_KEY_TYPE         KeyType			= CKK_GOSTR3410;
CK_BBOOL    		bTrue           = CK_TRUE;
CK_BBOOL    		bFalse			= CK_FALSE;
CK_BYTE 			GOST3410params[]= { 0x06, 0x07, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x23, 0x01 }; // Параметры алгоритма ГОСТ Р 34.10-2001
CK_BYTE 			GOST3411params[]= { 0x06, 0x07, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x1e, 0x01 }; // Параметры алгоритма ГОСТ Р 34.11-1994
 
CK_ATTRIBUTE GOST34_10_2001PublicKey[] =
{
	{ CKA_CLASS, &ocPubKey, sizeof(ocPubKey)},                      // Объект открытого ключа 
	{ CKA_LABEL, &PubKeyLabel, sizeof(PubKeyLabel)-1},        		// Метка ключа
	{ CKA_ID, &KeyPairID, sizeof(KeyPairID)-1},        				// Идентификатор ключевой пары
	{ CKA_KEY_TYPE, &KeyType, sizeof(KeyType)},   					// Тип ключа
	{ CKA_ENCRYPT, &bTrue, sizeof(bTrue)},                          // Ключ предназначен для зашифрования
	{ CKA_TOKEN, &bTrue, sizeof(bTrue)},                            // Ключ является объектом токена
	{ CKA_PRIVATE, &bFalse, sizeof(bFalse)},                        // Ключ доступен без авторизации на токене
	{ CKA_DERIVE, &bTrue, sizeof(bTrue)},                           // Ключ поддерживает деривацию (из него могут быть получены другие ключи).
	{ CKA_GOSTR3410_PARAMS, GOST3410params, sizeof(GOST3410params)},// Параметры алгоритма
	{ CKA_GOSTR3411_PARAMS, GOST3411params, sizeof(GOST3411params)} // Параметры алгоритма
};

Пример использования генерации ключей

Поддерживаемые механизмы генерации ключей


Определение подключенных устройств

Любой сценарий начинается с определения всех подключенных к компьютеру устройств Рутокен PINPad. 

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

Рутокен Плагин определяет все подключенные к компьютеру  UBS-устройства Рутокен ЭЦП, Рутокен WEB и Рутокен PINPad. Поэтому следующим шагом следует определить тип устройства.

Определение типа устройства

Для определения типа устройства следует использовать функцию getDeviceInfo с параметром TOKEN_INFO_DEVICE_TYPE. Значение этой константы содержится в объекте плагина. Для Рутокен PINPad результатом вызова данной функции будет TOKEN_TYPE_RUTOKEN_PINPAD_2, числовая константа, которая так же находится в объекте плагин.


Чтобы Рутокен PINPad распознал данные, они должны быть отправлены на подпись в специальном формате. 

            

  • No labels