Класс объекта (CKA_CLASS) равен CKO_PUBLIC_KEY
.
Таблица ниже описывает атрибуты объектов открытых ключей, в дополнение к общим атрибутам ключей.
Атрибут | Тип данных | Значение |
---|---|---|
CKA_SUBJECT 8 |
Byte Array
(массив
CK_BYTE ) |
Имя субъекта сертификата в DER формате. По умолчанию – пусто. |
CKA_ENCRYPT 8 |
CK_BBOOL |
По умолчанию – специфическое для конкретного носителя 9. |
CKA_VERIFY 8 |
CK_BBOOL |
По умолчанию – специфическое для конкретного носителя 9. |
CKA_VERIFY_RECOVER 8 |
CK_BBOOL |
По умолчанию – специфическое для конкретного носителя 9. |
CKA_WRAP 8 |
CK_BBOOL |
По умолчанию – специфическое для конкретного носителя 9. |
CKA_TRUSTED 10 |
CK_BBOOL |
CK_TRUE – ключ является доверенным для приложения, которое его создало.
Экспортный ключ может использоваться для экспорта ключей, у которых
атрибут CKA_WRAP_WITH_TRUSTED равен CK_TRUE . |
CKA_WRAP_TEMPLATE |
CK_ATTRIBUTE_PTR |
Для экспортных ключей. Шаблон атрибутов ключа для экспорта.
Ключи, совпадающие с шаблоном, могут экспортироваться при помощи данного ключа.
Количество атрибутов в массиве – параметр ulValueLen атрибута, разделенный на размер CK_ATTRIBUTE . |
C_SetAttributeValue()
или в процессе копирования объекта с использованием C_CopyObject()
.
Однако в некоторых случаях определенный токен может и не разрешить
изменение атрибута в процессе выполнения C_CopyObject()
.CK_TRUE
только пользователем с правами администратора (SO
).В интересах совместимости предусмотрено, что имя субъекта и идентификатор ключа для открытого ключа будут совпадать с такими же показателями соответствующего сертификата и секретного ключа. Однако Cryptoki не настаивает на такой привязке, и не требуется, чтобы сертификат и закрытый ключ также хранились на носителе. Для того, чтобы установить соответствие между флагами ISO/IEC 9594-8 (X.509) keyUsage для открытых ключей и атрибутами PKCS #11 для открытых ключей, необходимо воспользоваться таблицей ниже.
Флаги использования ключа для открытых ключей в сертификатах открытых ключей X.509 | Соответствующие атрибуты Cryptoki для открытых ключей |
---|---|
dataEncipherment | CKA_ENCRYPT |
digitalSignature, keyCertSign, cRLSign | CKA_VERIFY |
digitalSignature, keyCertSign, cRLSign | CKA_VERIFY_RECOVER |
keyAgreement | CKA_DERIVE |
keyEncipherment | CKA_WRAP |
nonRepudiation | CKA_VERIFY |
nonRepudiation | CKA_VERIFY_RECOVER |
Объекты открытых ключей RSA содержат открытые ключи RSA.
Тип ключа (CKA_KEY_TYPE
) равен CKK_RSA
.
Таблица ниже описывает атрибуты объектов открытых ключей RSA, в дополнение к общим атрибутам открытых ключей.
Атрибут | Тип данных | Значение |
---|---|---|
CKA_MODULUS 1,4 |
Big integer
(массив
CK_BYTE ) |
Модуль n. |
CKA_MODULUS_BITS 2,3 |
CK_ULONG |
Длина модуля n в байтах. |
CKA_PUBLIC_EXPONENT 1 |
Big integer
(массив
CK_BYTE ) |
Открытая экспонента e. |
C_CreateObject()
.C_CreateObject()
.C_GenerateKey()
или C_GenerateKeyPair()
.C_GenerateKey()
или C_GenerateKeyPair()
.Шаблон создания объекта открытого ключа RSA
CK_OBJECT_CLASS class = CKO_PUBLIC_KEY;
CK_KEY_TYPE keyType = CKK_RSA;
CK_UTF8CHAR label[] = "An RSA public key object";
CK_BYTE modulus[] = {... };
CK_BYTE exponent[] = {... };
CK_BBOOL bTrue = CK_TRUE;
CK_ATTRIBUTE template[] = {
{CKA_CLASS, &class, sizeof(class)},
{CKA_KEY_TYPE, &keyType, sizeof(keyType)},
{CKA_TOKEN, &bTrue, sizeof(bTrue)},
{CKA_LABEL, label, sizeof(label) - 1},
{CKA_WRAP, &bTrue, sizeof(bTrue)},
{CKA_ENCRYPT, &bTrue, sizeof(bTrue)},
{CKA_MODULUS, modulus, sizeof(modulus)},
{CKA_PUBLIC_EXPONENT, exponent, sizeof(exponent)}
};
Тип ключа (CKA_KEY_TYPE
) равен CKK_GOSTR3410
.
Таблица ниже описывает атрибуты объектов открытых ключей ГОСТ Р 34.10–2001, ГОСТ Р 34.10–2012 (длина ключа 256 бит) и ГОСТ Р 34.10–2012 (длина ключа 512 бит), в дополнение к общим атрибутам открытых ключей.
Атрибут | Тип данных | Значение |
---|---|---|
CKA_VALUE 1,4 |
Byte array
(массив
CK_BYTE ) |
Порядок байтов – от младшего к старшему (little endian). |
CKA_GOSTR3410_PARAMS 1,3 |
Byte array
(массив
CK_BYTE ) |
Идентификатор типа объекта данных ГОСТ Р 34.10–2001 в DER формате.
Когда ключ используется, у объекта параметров домена с типом Доступные значения описаны в разделе Значения CKA_GOSTR3410_PARAMS. |
CKA_GOSTR3411_PARAMS 1,3,8 |
Byte array
(массив
CK_BYTE ) |
Идентификатор типа объекта данных ГОСТ Р 34.10–2001 / ГОСТ Р 34.10–2012 в DER формате.
Когда ключ используется, у объекта параметров домена с типом Доступные значения описаны в разделе Значения CKA_GOSTR3411_PARAMS. |
CKA_GOST28147_PARAMS 8 |
Byte array
(массив
CK_BYTE ) |
Идентификатор типа объекта данных ГОСТ 28147–89 в DER формате.
Когда ключ используется, у объекта параметров домена с типом Доступные значения описаны в разделе Значения CKA_GOST28147_PARAMS. Атрибут можно не указывать. |
C_CreateObject()
.C_GenerateKey()
или C_GenerateKeyPair()
.C_GenerateKey()
или C_GenerateKeyPair()
.C_SetAttributeValue()
или в процессе копирования объекта с использованием C_CopyObject()
.
Однако в некоторых случаях определенный токен может и не разрешить
изменение атрибута в процессе выполнения C_CopyObject()
.Шаблон создания объекта открытого ключа ГОСТ Р 34.10–2001
CK_OBJECT_CLASS class = CKO_PUBLIC_KEY;
CK_KEY_TYPE keyType = CKK_GOSTR3410;
CK_UTF8CHAR label[] = "A GOST R34.10-2001 public key object";
CK_BYTE id_GostR3410_2001_TestParamSet[] = { 0x06, 0x07, 0x2A, 0x85, 0x03, 0x02, 0x02, 0x23, 0x00 };
CK_BYTE oid_GostR3411[] = { 0x06, 0x07, 0x2A, 0x85, 0x03, 0x02, 0x02, 0x1E, 0x01 };
CK_BYTE value[64] = {... };
CK_BBOOL bTrue = CK_TRUE;
CK_ATTRIBUTE template[] = {
{CKA_CLASS, &class, sizeof(class)},
{CKA_KEY_TYPE, &keyType, sizeof(keyType)},
{CKA_TOKEN, &bTrue, sizeof(bTrue)},
{CKA_LABEL, label, sizeof(label) - 1},
{CKA_GOSTR3410PARAMS, id_GostR3410_2001_TestParamSet, sizeof(id_GostR3410_2001_TestParamSet)},
{CKA_GOSTR3411PARAMS, oid_GostR3411, sizeof(oid_GostR3411)},
{CKA_VALUE, value, sizeof(value)}
};
Шаблон создания объекта открытого ключа ГОСТ Р 34.10–2012 (длина ключа 256 бит)
CK_OBJECT_CLASS class = CKO_PUBLIC_KEY;
CK_KEY_TYPE keyType = CKK_GOSTR3410;
CK_UTF8CHAR label[] = "A GOST R34.10-2001 256 public key object";
CK_BYTE id_GostR3410_2001_TestParamSet[] = { 0x06, 0x07, 0x2A, 0x85, 0x03, 0x02, 0x02, 0x23, 0x00 };
CK_BYTE oid_GostR3411_256[] = { 0x06, 0x08, 0x2A, 0x85, 0x03, 0x07, 0x01, 0x01, 0x02, 0x02 };
CK_BYTE value[64] = {... };
CK_BBOOL bTrue = CK_TRUE;
CK_ATTRIBUTE template[] = {
{CKA_CLASS, &class, sizeof(class)},
{CKA_KEY_TYPE, &keyType, sizeof(keyType)},
{CKA_TOKEN, &bTrue, sizeof(bTrue)},
{CKA_LABEL, label, sizeof(label) - 1},
{CKA_GOSTR3410PARAMS, id_GostR3410_2001_TestParamSet, sizeof(id_GostR3410_2001_TestParamSet)},
{CKA_GOSTR3411PARAMS, oid_GostR3411_256, sizeof(oid_GostR3411_256)},
{CKA_VALUE, value, sizeof(value)}
};
Шаблон создания объекта открытого ключа ГОСТ Р 34.10–2012 (длина ключа 512 бит)
CK_OBJECT_CLASS class = CKO_PUBLIC_KEY;
CK_KEY_TYPE keyType = CKK_GOSTR3410;
CK_UTF8CHAR label[] = "A GOST R34.10-2001 512 public key object";
CK_BYTE id_GostR3410_2001_TestParamSet[] = { 0x06, 0x07, 0x2A, 0x85, 0x03, 0x02, 0x02, 0x23, 0x00 };
CK_BYTE oid_GostR3411_512[] = { 0x06, 0x08, 0x2A, 0x85, 0x03, 0x07, 0x01, 0x01, 0x02, 0x03 };
CK_BYTE value[128] = {... };
CK_BBOOL bTrue = CK_TRUE;
CK_ATTRIBUTE template[] = {
{CKA_CLASS, &class, sizeof(class)},
{CKA_KEY_TYPE, &keyType, sizeof(keyType)},
{CKA_TOKEN, &bTrue, sizeof(bTrue)},
{CKA_LABEL, label, sizeof(label) - 1},
{CKA_GOSTR3410PARAMS, id_GostR3410_2001_TestParamSet, sizeof(id_GostR3410_2001_TestParamSet)},
{CKA_GOSTR3411PARAMS, oid_GostR3411_512, sizeof(oid_GostR3411_512)},
{CKA_VALUE, value, sizeof(value)}
};