Перейти к содержимому

Объекты PKCS #11

USB-токены и смарт-карты JaCartaAPI и SDKUSB-токены и смарт-карты JaCarta

Надстрочные индексы в таблицах атрибутов (1–11) соответствуют следующим правилам:

  1. Указывается, когда объект создается с использованием C_CreateObject().
  2. Не указывается, когда объект создается с использованием C_CreateObject().
  3. Указывается, когда объект генерируется с использованием C_GenerateKey() или C_GenerateKeyPair().
  4. Не указывается, когда объект генерируется с использованием C_GenerateKey() или C_GenerateKeyPair().
  5. Указывается, когда объект импортируется с использованием C_UnwrapKey().
  6. Не указывается, когда объект импортируется с использованием C_UnwrapKey().
  7. Не может быть открыт в открытом виде, если у объекта атрибут CKA_SENSITIVE равен CK_TRUE или атрибут CKA_EXTRACTABLE равен CK_FALSE.
  8. Может изменяться после того как объект был создан с использованием C_SetAttributeValue() или в процессе копирования объекта с использованием C_CopyObject(). Однако в некоторых случаях определенный токен может и не разрешить изменение атрибута в процессе выполнения C_CopyObject().
  9. Значение по умолчанию является специфическим для конкретного токена и может зависеть от значений других атрибутов.
  10. Может быть выставляться в CK_TRUE только пользователем с правами администратора (SO).
  11. Не может изменен после того, как выставлен в CK_TRUE. Становится атрибутом только для чтения.

В таблице приведены общие атрибуты для всех объектов PKCS #11.

АтрибутТип данныхЗначение
CKA_CLASS1CK_OBJECT_CLASSКласс объекта.

Это не класс объектов, поэтому не требуется определение CKO_. К объектам хранения относятся:

  • объекты данных (CKO_DATA);
  • объекты сертификатов (CKO_CERTIFICATE);
  • объекты ключей.

Таблица ниже описывает атрибуты объектов хранения, в дополнение к общим атрибутам.

АтрибутТип данныхЗначение
CKA_TOKENCK_BBOOLCK_TRUE – объект принадлежит носителю, т.е. хранится только в памяти устройства и не удаляется после завершения сеанса;

CK_FALSE – объект принадлежит сеансу, т.е. хранится в оперативной памяти и может использоваться только в промежуток времени – с момента создания сеанса (см. C_OpenSession()) и до его закрытия (см. C_CloseSession() или C_CloseAllSessions()).

По умолчанию – CK_FALSE.
CKA_PRIVATECK_BBOOLCK_TRUE – объект является секретным.

CK_FALSE – объект является открытым.

По умолчанию – специфическое для конкретного носителя 9.
CKA_MODIFIABLECK_BBOOLCK_TRUE – объект можно изменить.

По умолчанию – CK_TRUE.
CKA_LABELRFC2279 string
(массив CK_UTF8CHAR)
Описание объекта.

По умолчанию – пусто.
CKA_COPYABLECK_BBOOLCK_TRUE – объект может быть скопирован с использованием C_CopyObject().

Невозможно установить значение CK_TRUE, если уже установлено значение CK_FALSE.

По умолчанию – CK_TRUE.

Примечания к атрибутам объектов хранения:

АтрибутПримечание
CKA_LABEL, CKA_TOKEN, CKA_PRIVATE, CKA_MODIFIABLEТолько CKA_LABEL можно изменять после создания объекта. CKA_TOKEN, CKA_PRIVATE и CKA_MODIFIABLE можно изменять в процессе копирования объекта.
CKA_TOKENУказывает, является ли объект объектом носителя или сеанса.
CKA_PRIVATEПри CK_TRUE пользователь не получит доступ к объекту до прохождения аутентификации в объекте.
CKA_MODIFIABLEОпределяет, является ли объект объектом только для чтения. Неизменяемый объект в одних случаях можно удалить, в других — нельзя.
CKA_LABELПредназначен для оказания помощи пользователям при просмотре и редактировании.

Объекты данных хранят информацию, заданную приложением.

Класс объекта (CKA_CLASS) равен CKO_DATA.

Таблица ниже описывает атрибуты объектов данных, в дополнение к общим атрибутам хранения.

АтрибутТип данныхЗначение
CKA_APPLICATIONRFC2279 string
(массив CK_UTF8CHAR)
Описание приложения, которое управляет объектом.

По умолчанию – пусто.
CKA_OBJECT_IDByte Array
(массив CK_BYTE)
Идентификатор типа данных объекта в DER-формате.

По умолчанию – пусто.
CKA_VALUEByte Array
(массив CK_BYTE)
Значение объекта.

По умолчанию – пусто.
CKA_COMPRESSEDCK_BBOOLCK_TRUE – включить компрессию данных.

Атрибут является разработкой Аладдин Р.Д. и не входит в стандарт PKCS #11.<br
По умолчанию – CK_FALSE.

Примечания к атрибутам объектов данных:

АтрибутПримечание
CKA_APPLICATIONПозволяет приложениям определять владельца объекта. Однако стандарт PKCS #11 не гарантирует, что только конкретное приложение имеет доступ к объекту данных.
CKA_OBJECT_IDПозволяет приложениям определять типы значений объектов данных. Однако стандарт PKCS #11 не гарантирует, что идентификатор типа данных соответствует значению данных.
CKA_COMPRESSEDПозволяет управлять компрессией атрибута CKA_VALUE у объектов CKO_CERTIFICATE и CKO_DATA. Присваивается при создании объекта и не изменяется впоследствии.

Шаблон создания объекта данных

CK_OBJECT_CLASS class = CKO_DATA;
CK_UTF8CHAR label[] = "A data object";
CK_UTF8CHAR application[] = "An application";
CK_BYTE data[] = "Sample data";
CK_BBOOL bTrue = CK_TRUE;
CK_ATTRIBUTE template[] = {
{CKA_CLASS, &class, sizeof(class)},
{CKA_TOKEN, &bTrue, sizeof(bTrue)},
{CKA_LABEL, label, sizeof(label) - 1},
{CKA_APPLICATION, application, sizeof(application) - 1},
{CKA_VALUE, data, sizeof(data)}
};

Объекты сертификатов хранят:

  • сертификаты открытых ключей X.509;
  • сертификаты атрибутов X.509.

Класс объекта (CKA_CLASS) равен CKO_CERTIFICATE.

Таблица ниже описывает общие атрибуты объектов сертификатов, в дополнение к общим атрибутам хранения.

АтрибутТип данныхЗначение
CKA_CERTIFICATE_TYPE1CK_CERTIFICATE_TYPEТип сертификата.
CKA_TRUSTED10CK_BBOOLCK_TRUE – сертификат является доверенным для приложения, создавшего его.
CKA_CERTIFICATE_CATEGORYCK_ULONGКатегория сертификата:

* 0 – не указано;
* 1 – пользователь носителя;
* 2 – удостоверяющий центр;
* 3 – иное лицо.

По умолчанию – 0.
CKA_CHECK_VALUEByte Array
(массив CK_BYTE)
Контрольная сумма.
CKA_START_DATECK_DATEНачальная дата сертификата.

По умолчанию – пусто.
CKA_END_DATECK_DATEКонечная дата сертификата.

По умолчанию – пусто.
CKA_COMPRESSEDCK_BBOOLCK_TRUE – включить компрессию данных.

Атрибут является разработкой Аладдин Р.Д. и не входит в стандарт PKCS #11.<br
По умолчанию – CK_FALSE.

Примечания к атрибутам сертификатов:

АтрибутПримечание
CKA_CERTIFICATE_TYPEНе изменяется после создания объекта. Поддерживаемые типы сертификатов: CKC_X_509 (сертификат открытого ключа X.509), CKC_X_509_ATTR_CERT (сертификат атрибутов X.509).
CKA_TRUSTEDНе может быть выставлен приложением на CK_TRUE. Выставляется только приложением, инициализирующим носитель, или SO носителя. Доверенные сертификаты не могут быть изменены.
CKA_CERTIFICATE_CATEGORYУказывает категорию сертификата: “пользователь носителя” (личный сертификат доступен на носителе), “удостоверяющий центр” (сертификат УЦ) или “иное лицо” (конечный сертификат). Не изменяется после создания объекта.
CKA_CERTIFICATE_CATEGORY, CKA_TRUSTEDИспользуются совместно для сопоставления с категориями сертификатов. В CDF-описании сохраняемый сертификат помечается категорией “пользователь носителя”; в CDF-описаниях trustedCertificates или usefulCertificates — категорией “удостоверяющий центр” или “иное лицо” в зависимости от атрибутов CommonCertificateAttribute и CKA_TRUSTED.
CKA_CHECK_VALUEЗначение выводится из сертификата: первые три байта хэш-функции SHA-1 атрибута CKA_VALUE объекта сертификата.
CKA_START_DATE, CKA_END_DATEИспользуются только для ссылки. Cryptoki не придаёт им дополнительного значения. Приложение отвечает за выставление значений, соответствующих полям сертификата “не до” и “не после” (если таковые существуют).
CKA_COMPRESSEDУправляет компрессией атрибута CKA_VALUE у объектов CKO_CERTIFICATE и CKO_DATA. Присваивается при создании объекта и не изменяется впоследствии.

Объекты сертификата X.509 содержат сертификаты открытых ключей X.509.

Тип сертификата (CKA_CERTIFICATE_TYPE) равен CKC_X_509.

Таблица ниже описывает атрибуты объектов сертификатов открытых ключей, в дополнение к общим атрибутам класса.

АтрибутТип данныхЗначение
CKA_SUBJECT1Byte Array
(массив CK_BYTE)
Имя субъекта сертификата в DER формате.
CKA_IDByte Array
(массив CK_BYTE)
Идентификатор для ключевой пары.

По умолчанию – пусто.
CKA_ISSUERByte Array
(массив CK_BYTE)
Имя издателя сертификата в DER формате.

По умолчанию – пусто.
CKA_SERIAL_NUMBERByte Array
(массив CK_BYTE)
Серийный номер сертификата в DER формате.

По умолчанию – пусто.
CKA_VALUE2Byte Array
(массив CK_BYTE)
Тело сертификата в BER формате.
CKA_URL3RFC2279 string
(массив CK_UTF8CHAR)
URL, где можно получить полный сертификат.

По умолчанию – пусто.
CKA_HASH_OF_SUBJECT_PUBLIC_KEY4Byte Array
(массив CK_BYTE)
Хэш SHA-1 открытого ключа субъекта.

По умолчанию – пусто.
CKA_HASH_OF_ISSUER_PUBLIC_KEY4Byte Array
(массив CK_BYTE)
Хэш SHA-1 открытого ключа издателя.

По умолчанию – пусто.
CKA_JAVA_MIDP_SECURITY_DOMAINCK_ULONGДомен безопасности Java MIDP:

* 0 – не указано;
* 1 – пользователь;
* 2 – оператор;
* 3 – третье лицо.

По умолчанию – 0.
CKA_NAME_HASH_ALGORITHMCK_MECHANISM_TYPEОпределяет механизм, используемый для вычисления CKA_HASH_OF_SUBJECT_PUBLIC_KEY и CKA_HASH_OF_ISSUER_PUBLIC_KEY.

Если атрибут отсутствует, то по умолчанию используется SHA-1.

Примечания к атрибутам сертификатов открытого ключа X.509:

АтрибутПримечание
CKA_ID, CKA_ISSUER, CKA_SERIAL_NUMBERТолько эти атрибуты можно изменять после создания объекта.
CKA_IDСредство распознавания множества пар открытый ключ/закрытый ключ, хранящихся в одном объекте. Так как ключи распознаются по имени объекта и идентификатору, ключи к разным объектам могут иметь одинаковое значение CKA_ID без неоднозначности. В интересах совместимости имя объекта и идентификатор ключа сертификата совпадают с показателями соответствующих секретных и открытых ключей (хотя хранение в одном носителе не требуется). Cryptoki не настаивает на такой привязке или на уникальности идентификатора ключа; приложение может оставить его пустым.
CKA_ISSUER, CKA_SERIAL_NUMBERПредназначены для совместимости с PKCS #7 и Privacy Enhanced Mail (RFC1421). В расширениях версии 3 к сертификатам X.509 идентификатор ключа может находиться в сертификате; значение CKA_ID будет идентично идентификатору ключа в таком расширении, хотя Cryptoki на этом не настаивает.
CKA_URLОбеспечивает хранение URL вместо самого сертификата. Часто используется в мобильной среде.
CKA_HASH_OF_SUBJECT_PUBLIC_KEY, CKA_HASH_OF_ISSUER_PUBLIC_KEYИспользуются для хранения хэшей открытых ключей субъекта и органа, выдавшего сертификат. Особенно важны, когда доступен только URL для сопоставления сертификата с личным ключом, а также при поиске сертификата выдавшего органа.
CKA_JAVA_MIDP_SECURITY_DOMAINСвязывает сертификат с доменом безопасности Java MIDP.

Шаблон создания объекта сертификата X.509

CK_OBJECT_CLASS class = CKO_CERTIFICATE;
CK_CERTIFICATE_TYPE certType = CKC_X_509;
CK_UTF8CHAR label[] = "A certificate object";
CK_BYTE subject[] = {...};
CK_BYTE id[] = {123};
CK_BYTE certificate[] = {...};
CK_BBOOL bTrue = CK_TRUE;
CK_ATTRIBUTE template[] = {
{CKA_CLASS, &class, sizeof(class)},
{CKA_CERTIFICATE_TYPE, &certType, sizeof(certType)},
{CKA_TOKEN, &bTrue, sizeof(bTrue)},
{CKA_LABEL, label, sizeof(label) - 1},
{CKA_SUBJECT, subject, sizeof(subject)},
{CKA_ID, id, sizeof(id)},
{CKA_VALUE, certificate, sizeof(certificate)}
};

Объекты сертификата атрибутов X.509 содержат сертификаты атрибутов X.509.

Тип сертификата (CKA_CERTIFICATE_TYPE) равен CKC_X_509_ATTR_CERT.

Таблица ниже описывает атрибуты объектов сертификатов атрибутов X.509, в дополнение к общим атрибутам класса.

АтрибутТип данныхЗначение
CKA_OWNER1Byte Array
(массив CK_BYTE)
Поле субъекта сертификата атрибутов в DER формате. Значение отличается от CKA_SUBJECT, из в сертификата CKC_X_509, синтаксисом ASN.1 и кодировкой.
CKA_AC_ISSUERByte Array
(массив CK_BYTE)
Поле издателя сертификата атрибутов в DER формате. Значение отличается от CKA_ISSUER, из в сертификата CKC_X_509, синтаксисом ASN.1 и кодировкой.

По умолчанию – пусто.
CKA_SERIAL_NUMBERByte Array
(массив CK_BYTE)
Серийный номер сертификата в DER формате.

По умолчанию – пусто.
CKA_ATTR_TYPESByte Array
(массив CK_BYTE)
Последовательность значений идентификаторов объектов, соответствующим типам атрибутов сертификата, в BER формате. При помощи этого поля можно искать заданный атрибут сертификата без его извлечения и разбора.

По умолчанию – пусто.
CKA_VALUE1Byte Array
(массив CK_BYTE)
Тело сертификата в BER формате.

Только атрибуты CKA_AC_ISSUER, CKA_SERIAL_NUMBER и CKA_ATTR_TYPES можно изменять после создания объекта.

Шаблон создания объекта сертификата атрибутов X.509

CK_OBJECT_CLASS class = CKO_CERTIFICATE;
CK_CERTIFICATE_TYPE certType = CKC_X_509_ATTR_CERT;
CK_UTF8CHAR label[] = "An attribute certificate object";
CK_BYTE owner[] = {...};
CK_BYTE certificate[] = {...};
CK_BBOOL bTrue = CK_TRUE;
CK_ATTRIBUTE template[] = {
{CKA_CLASS, &class, sizeof(class)},
{CKA_CERTIFICATE_TYPE, &certType, sizeof(certType)},
{CKA_TOKEN, &bTrue, sizeof(bTrue)},
{CKA_LABEL, label, sizeof(label) - 1},
{CKA_OWNER, owner, sizeof(owner)},
{CKA_VALUE, certificate, sizeof(certificate)}
};

Это не класс объектов, поэтому не требуется определение CKO_. В объектах ключей хранятся ключи шифрования и аутентификации, которые могут быть:

  • закрытыми (CKO_PRIVATE_KEY);
  • открытыми (CKO_PUBLIC_KEY);
  • секретными (CKO_SECRET_KEY).

Таблица ниже описывает атрибуты объектов ключей, в дополнение к общим атрибутам.

АтрибутТип данныхЗначение
CKA_KEY_TYPE1,5CK_KEY_TYPEТип ключа.
CKA_ID8Byte Array
(массив CK_BYTE)
Идентификатор ключа.

По умолчанию – пусто.
CKA_START_DATE8CK_DATEДата начала действия ключа.

По умолчанию – пусто.
CKA_END_DATE8CK_DATEДата истечения действия ключа.

По умолчанию – пусто.
CKA_DERIVE8CK_BBOOLCK_TRUE – ключ поддерживает деривацию ключей, т.е. из этого ключа можно извлечь другие ключи.

По умолчанию – CK_FALSE.
CKA_LOCAL2,4,6CK_BBOOLУстанавливается в CK_TRUE, если выполняется одно из условий:

* ключ сгенерирован на токене, при помощи функций C_GenerateKey() или C_GenerateKeyPair();
* ключ создан при помощи функции C_CopyObject(), как копия ключа, атрибут которого CKA_LOCAL равен CK_TRUE.
CKA_KEY_GEN_MECHANISM2,4,6CK_MECHANISM_TYPEИдентификатор механизма, который используется для генерации материала ключа.
CKA_ALLOWED_MECHANISMSCK_MECHANISM_TYPE_PTRСписок механизмов, которые можно использовать с данным ключом. Количество механизмов в массиве – параметр ulValueLen атрибута, разделенный на размер CK_MECHANISM_TYPE.

Примечания к атрибутам объектов ключей:

АтрибутПримечание
CKA_IDПредназначен для различения нескольких ключей. Для открытых и секретных ключей одного субъекта идентификаторы должны быть одинаковыми; также они совпадают с идентификатором соответствующего сертификата (если существует). Cryptoki не настаивает на таких привязках. Для секретных ключей значение зависит от приложения.
CKA_START_DATE, CKA_END_DATEИспользуются только для ссылки. Cryptoki не придаёт им особого значения и не ограничивает использование ключа по датам — этим занимается приложение.
CKA_DERIVEИмеет значение CK_TRUE тогда и только тогда, когда из данного ключа можно вывести другие ключи.
CKA_LOCALИмеет значение CK_TRUE тогда и только тогда, когда ключ изначально сгенерирован на носителе вызовом C_GenerateKey() или C_GenerateKeyPair().
CKA_KEY_GEN_MECHANISMОпределяет механизм генерации ключа. Содержит действительное значение только если CKA_LOCAL равен CK_TRUE; иначе принимает значение CK_UNAVAILABLE_INFORMATION.

Класс объекта (CKA_CLASS) равен CKO_PUBLIC_KEY.

Таблица ниже описывает атрибуты объектов открытых ключей, в дополнение к общим атрибутам ключей.

АтрибутТип данныхЗначение
CKA_SUBJECT8Byte Array
(массив CK_BYTE)
Имя субъекта сертификата в DER формате.

По умолчанию – пусто.
CKA_ENCRYPT8CK_BBOOLCK_TRUE – ключ поддерживает шифрование.

По умолчанию – специфическое для конкретного носителя 9.
CKA_VERIFY8CK_BBOOLCK_TRUE – ключ поддерживает верификацию, когда подпись является приложением к данным.

По умолчанию – специфическое для конкретного носителя 9.
CKA_VERIFY_RECOVER8CK_BBOOLCK_TRUE – ключ поддерживает верификацию, когда данные восстанавливаются из подписи.

По умолчанию – специфическое для конкретного носителя 9.
CKA_WRAP8CK_BBOOLCK_TRUE – ключ может использоваться для экспорта других ключей.

По умолчанию – специфическое для конкретного носителя 9.
CKA_TRUSTED10CK_BBOOLCK_TRUE – ключ является доверенным для приложения, которое его создало. Экспортный ключ может использоваться для экспорта ключей, у которых атрибут CKA_WRAP_WITH_TRUSTED равен CK_TRUE.
CKA_WRAP_TEMPLATECK_ATTRIBUTE_PTRДля экспортных ключей. Шаблон атрибутов ключа для экспорта. Ключи, совпадающие с шаблоном, могут экспортироваться при помощи данного ключа. Количество атрибутов в массиве – параметр ulValueLen атрибута, разделенный на размер CK_ATTRIBUTE.

В интересах совместимости предусмотрено, что имя субъекта и идентификатор ключа для открытого ключа будут совпадать с такими же показателями соответствующего сертификата и секретного ключа. Однако Cryptoki не настаивает на такой привязке, и не требуется, чтобы сертификат и закрытый ключ также хранились на носителе. Для того, чтобы установить соответствие между флагами ISO/IEC 9594-8 (X.509) keyUsage для открытых ключей и атрибутами PKCS #11 для открытых ключей, необходимо воспользоваться таблицей ниже.

Флаги использования ключа для открытых ключей в сертификатах открытых ключей X.509Соответствующие атрибуты Cryptoki для открытых ключей
dataEnciphermentCKA_ENCRYPT
digitalSignature, keyCertSign, cRLSignCKA_VERIFY
digitalSignature, keyCertSign, cRLSignCKA_VERIFY_RECOVER
keyAgreementCKA_DERIVE
keyEnciphermentCKA_WRAP
nonRepudiationCKA_VERIFY
nonRepudiationCKA_VERIFY_RECOVER

Объекты открытых ключей RSA содержат открытые ключи RSA.

Тип ключа (CKA_KEY_TYPE) равен CKK_RSA.

Ключи RSA поддерживаются приложением PKI.

Таблица ниже описывает атрибуты объектов открытых ключей RSA, в дополнение к общим атрибутам открытых ключей.

АтрибутТип данныхЗначение
CKA_MODULUS1,4Big integer
(массив CK_BYTE)
Модуль n.
CKA_MODULUS_BITS2,3CK_ULONGДлина модуля n в байтах.
CKA_PUBLIC_EXPONENT1Big integer
(массив CK_BYTE)
Открытая экспонента e.

Шаблон создания объекта открытого ключа 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)}
};

Объекты открытых ключей ГОСТ Р 34.10 содержат открытые ключи:

  • ГОСТ Р 34.10–2001;
  • ГОСТ Р 34.10–2012 (длина ключа 256 бит);
  • ГОСТ Р 34.10–2012 (длина ключа 512 бит).

Тип ключа (CKA_KEY_TYPE) равен CKK_GOSTR3410.

Ключи ГОСТ Р 34.10–2012 (длина ключа 256 бит) поддерживаются приложением:

  • GOST версии 2.5.5, 2.5.13

Ключи ГОСТ Р 34.10–2012 (длина ключа 512 бит) поддерживаются приложением:

  • GOST версии 2.5.13

Таблица ниже описывает атрибуты объектов открытых ключей ГОСТ Р 34.10–2001, ГОСТ Р 34.10–2012 (длина ключа 256 бит) и ГОСТ Р 34.10–2012 (длина ключа 512 бит), в дополнение к общим атрибутам открытых ключей.

АтрибутТип данныхЗначение
CKA_VALUE1,4Byte array
(массив CK_BYTE)
Для ГОСТ Р 34.10–2001 и ГОСТ Р 34.10–2012 (длина ключа 256 бит):

тело ключа длиной 64 байта; координаты X и Y точки эллиптической кривой P(X,Y) длиной по 32 байта каждая.

Для ГОСТ Р 34.10–2012 (длина ключа 512 бит):

тело ключа длиной 128 байт; координаты X и Y точки эллиптической кривой P(X,Y) длиной по 64 байта каждая.

Порядок байтов – от младшего к старшему (little endian).
CKA_GOSTR3410_PARAMS1,3Byte array
(массив CK_BYTE)
Идентификатор типа объекта данных ГОСТ Р 34.10–2001 в DER формате. Когда ключ используется, у объекта параметров домена с типом CKK_GOSTR3410 должен быть указан тот же атрибут CKA_OBJECT_ID.

Доступные значения описаны в разделе Значения CKA_GOSTR3410_PARAMS.
CKA_GOSTR3411_PARAMS1,3,8Byte array
(массив CK_BYTE)
Идентификатор типа объекта данных ГОСТ Р 34.10–2001 / ГОСТ Р 34.10–2012 в DER формате. Когда ключ используется, у объекта параметров домена с типом CKK_GOSTR3411 должен быть указан тот же атрибут CKA_OBJECT_ID.

Доступные значения описаны в разделе Значения CKA_GOSTR3411_PARAMS.
CKA_GOST28147_PARAMS8Byte array
(массив CK_BYTE)
Идентификатор типа объекта данных ГОСТ 28147–89 в DER формате. Когда ключ используется, у объекта параметров домена с типом CKK_GOST28147 должен быть указан тот же атрибут CKA_OBJECT_ID.

Доступные значения описаны в разделе Значения CKA_GOST28147_PARAMS.

Атрибут можно не указывать.

Шаблон создания объекта открытого ключа ГОСТ Р 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)}
};

Ключи на эллиптических кривых поддерживаются приложением PKI.

Атрибут CK_KEY_TYPE для объектов открытого ключа на эллиптических кривых принимает значения CKK_EC (рекомендуемое) и CKK_ECDSA (устаревшее).

Таблица ниже описывает атрибуты объектов открытых ключей ECC, в дополнение к общим атрибутам открытых ключей.

АтрибутТип данныхЗначение
CKA_EC_PARAMS1,3

(CKA_ECDSA_PARAMS)
Big integer (массив CK_BYTE)Представление параметров ANSI X9.62 в кодировке DER.
CKA_EC_POINT1,4Big integer (массив CK_BYTE)Закодированное в формате DER значения точки Q по стандарту ANSI X9.62.

Шаблон создания объекта открытого ключа CKK_EC

CK_OBJECT_CLASS class = CKO_PUBLIC_KEY;
CK_KEY_TYPE keyType = CKK_EC;
CK_UTF8CHAR label[] = “An EC public key object”;
CK_BYTE ecParams[] = {...};
CK_BYTE ecPoint[] = {...};
CK_BBOOL true = CK_TRUE;
CK_ATTRIBUTE template[] = {
{CKA_CLASS, &class, sizeof(class)},
{CKA_KEY_TYPE, &keyType, sizeof(keyType)},
{CKA_TOKEN, &true, sizeof(true)},
{CKA_LABEL, label, sizeof(label)-1},
{CKA_EC_PARAMS, ecParams, sizeof(ecParams)},
{CKA_EC_POINT, ecPoint, sizeof(ecPoint)}
};

В следующие таблице представлены поддерживаемы значения параметра CKA_EC_PARAMS:

Значение параметра CKA_EC_PARAMSOID
{0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x02}1.2.840.100045.3.1.2, prime192v2
{0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x03}1.2.840.100045.3.1.3, prime192v3
{0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x04}1.2.840.100045.3.1.4, prime239v1
{0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x05}1.2.840.10045.3.1.5, prime239v2
{0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x06}1.2.840.100045.3.1.6, prime239v3
{0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07}1.2.840.10045.3.1.7, prime256v1
{0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x19}1.3.132.0.31, secp192k1
{0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x20}1.3.132.0.32, secp224k1
{0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x21}1.3.132.0.33, secp224r1
{0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x0A}1.3.132.0.10, secp256k1
{0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x22}1.3.132.0.34, secp384r1
{0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x23}1.3.132.0.35, secp521r1

Класс объекта (CKA_CLASS) равен CKO_PRIVATE_KEY.

Таблица ниже описывает атрибуты объектов закрытых ключей, в дополнение к общим атрибутам ключей.

АтрибутТип данныхЗначение
CKA_SUBJECT8Byte Array
(массив CK_BYTE)
Имя субъекта сертификата в DER формате.
CKA_SENSITIVE8,11CK_BBOOLCK_TRUE – ключ является чувствительным, т.е. нельзя извлечь из токена в открытом виде.

По умолчанию – специфическое для конкретного носителя 9.
CKA_DECRYPT8CK_BBOOLCK_TRUE – ключ поддерживает расшифрование.

По умолчанию – специфическое для конкретного носителя 9.
CKA_SIGN8CK_BBOOLCK_TRUE – ключ поддерживает подпись данных. Подпись является приложением к данным.

По умолчанию – специфическое для конкретного носителя 9.
CKA_SIGN_RECOVER8CK_BBOOLCK_TRUE – ключ поддерживает подпись данных. Данные могут быть восстановлены из подписи.

По умолчанию – специфическое для конкретного носителя 9.
CKA_UNWRAP8CK_BBOOLCK_TRUE – ключ может использоваться для импорта других ключей.

По умолчанию – специфическое для конкретного носителя 9.
CKA_EXTRACTABLE8CK_BBOOLCK_TRUE – ключ извлекаемый и может быть экспортирован.

По умолчанию – специфическое для конкретного носителя 9.
CKA_ALWAYS_SENSITIVE2,4,6CK_BBOOLCK_TRUE – атрибут CKA_SENSITIVE всегда будет выставлен в CK_TRUE.
CKA_NEVER_EXTRACTABLE2,4,6CK_BBOOLCK_TRUE – атрибут CKA_EXTRACTABLE всегда будет выставлен в CK_FALSE.
CKA_WRAP_WITH_TRUSTED11CK_BBOOLCK_TRUE – ключ может экспортироваться только при помощи экспортного ключа, у которого атрибут CKA_TRUSTED равен CK_TRUE.

По умолчанию – CK_FALSE.
CKA_UNWRAP_TEMPLATECK_ATTRIBUTE_PTRДля экспортных ключей. Шаблон атрибутов ключа для импорта. Ключи, совпадающие с шаблоном, могут импортироваться при помощи данного ключа. Количество атрибутов в массиве – параметр ulValueLen атрибута, разделенный на размер CK_ATTRIBUTE.
CKA_ALWAYS_AUTHENTICATECK_BBOOLCK_TRUE – необходимо всегда предъявлять PIN-код пользователя при подписи или расшифровки данных с помощью этого ключа.

По умолчанию – CK_FALSE.

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

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

Атрибут CKA_ALWAYS_AUTHENTICATE может использоваться для востребования повторной аутентификации (чтобы заставить пользователя предоставить PIN) при каждом использовании закрытого ключа. “Использование” в данном случае означает криптографическую операцию, такую как постановка подписи или расшифрование. Данный атрибут может быть выставлен только на CK_TRUE, когда CKA_PRIVATE также выставлен на CK_TRUE.

Повторная аутентификация происходит при вызове C_Login(), при этом userType выставляется на CKU_CONTEXT_SPECIFIC сразу после начала криптографической операции, использующей ключ (например, после C_SignInit()). При таком вызове фактический тип пользователя неявно задается требованиями к использованию активного ключа.

Если функция C_Login() выдает значение CKR_OK, значит, пользователь успешно прошел аутентификацию и активный ключ выставляется в зарегистрированное состояние, которое продолжается до тех пор, пока не будет успешно или неудачно завершена криптографическая операция (например, через C_Sign(), C_SignFinal(), …).

Возвращаемое значение CKR_PIN_INCORRECT функции C_Login() означает, что пользователю отказано в разрешении использовать данный ключ, а продолжение криптографической операции приведет к такому поведению системы, как будто функция C_Login() и не вызывалась.

В обоих этих случаях состояние сеанса остается одинаковым, однако повторные неудачные попытки пройти аутентификацию могут привести к тому, что PIN будет заблокирован. C_Login() в данном случае выдаст сообщение CKR_PIN_LOCKED, что приведет к выходу пользователя из носителя.

Неудачные попытки или отказ произвести повторную аутентификацию в случае, когда CKA_ALWAYS_AUTHENTICATE выставлен на CK_TRUE, приведет к тому, что после вызовов с использованием этого ключа будет выдаваться сообщение CKR_USER_NOT_LOGGED_IN.

C_Login() выдаст сообщение CKR_OPERATION_NOT_INITIALIZED, однако это не повлияет на активную криптографическую операцию, если делается попытка повторно пройти аутентификацию, а атрибут CKA_ALWAYS_AUTHENTICATE выставлен на CK_FALSE.

Объекты закрытых ключей RSA содержат закрытые ключи RSA.

Тип ключа (CKA_KEY_TYPE) равен CKK_RSA.

Ключи RSA поддерживаются приложением PKI:

Таблица ниже описывает атрибуты объектов закрытых ключей RSA, в дополнение к общим атрибутам закрытых ключей.

АтрибутТип данныхЗначение
CKA_MODULUS1,4,6Big integer
(массив CK_BYTE)
Модуль n.
CKA_PUBLIC_EXPONENT4,6Big integer
(массив CK_BYTE)
Открытая экспонента e.
CKA_PRIVATE_EXPONENT1,4,6,7Big integer
(массив CK_BYTE)
Закрытая экспонента d.
CKA_PRIME_14,6,7Big integer
(массив CK_BYTE)
Простое число p.
CKA_PRIME_24,6,7Big integer
(массив CK_BYTE)
Простое число q.
CKA_EXPONENT_14,6,7Big integer
(массив CK_BYTE)
Закрытая экспонента d по модулю p-1
CKA_EXPONENT_24,6,7Big integer
(массив CK_BYTE)
Закрытая экспонента d по модулю q-1
CKA_COEFFICIENT4,6,7Big integer
(массив CK_BYTE)
Коэффициент CRT q-1 по модулю p

Шаблон создания объекта закрытого ключа RSA

CK_OBJECT_CLASS class = CKO_PRIVATE_KEY;
CK_KEY_TYPE keyType = CKK_RSA;
CK_UTF8CHAR label[] = "An RSA private key object";
CK_BYTE subject[] = {... };
CK_BYTE id[] = { 123 };
CK_BYTE modulus[] = {... };
CK_BYTE publicExponent[] = {... };
CK_BYTE privateExponent[] = {... };
CK_BYTE prime1[] = {... };
CK_BYTE prime2[] = {... };
CK_BYTE exponent1[] = {... };
CK_BYTE exponent2[] = {... };
CK_BYTE coefficient[] = {... };
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_SUBJECT, subject, sizeof(subject)},
{CKA_ID, id, sizeof(id)},
{CKA_SENSITIVE, &bTrue, sizeof(bTrue)},
{CKA_DECRYPT, &bTrue, sizeof(bTrue)},
{CKA_SIGN, &bTrue, sizeof(bTrue)},
{CKA_MODULUS, modulus, sizeof(modulus)},
{CKA_PUBLIC_EXPONENT, publicExponent, sizeof(publicExponent)},
{CKA_PRIVATE_EXPONENT, privateExponent, sizeof(privateExponent)},
{CKA_PRIME_1, prime1, sizeof(prime1)},
{CKA_PRIME_2, prime2, sizeof(prime2)},
{CKA_EXPONENT_1, exponent1, sizeof(exponent1)},
{CKA_EXPONENT_2, exponent2, sizeof(exponent2)},
{CKA_COEFFICIENT, coefficient, sizeof(coefficient)}
};

Объекты закрытых ключей ГОСТ Р 34.10 содержат закрытые ключи:

  • ГОСТ Р 34.10–2001;
  • ГОСТ Р 34.10–2012 (длина ключа 256 бит);
  • ГОСТ Р 34.10–2012 (длина ключа 512 бит).

Тип ключа (CKA_KEY_TYPE) равен CKK_GOSTR3410.

Ключи ГОСТ Р 34.10–2012 (длина ключа 256 бит) поддерживаются приложением:

  • GOST версии 2.5.5, 2.5.13

Ключи ГОСТ Р 34.10–2012 (длина ключа 512 бит) поддерживаются приложением:

  • GOST версии 2.5.13

Таблица ниже описывает атрибуты объектов закрытых ключей ГОСТ Р 34.10–2001, ГОСТ Р 34.10–2012 (длина ключа 256 бит) и ГОСТ Р 34.10–2012 (длина ключа 512 бит), в дополнение к общим атрибутам закрытых ключей.

АтрибутТип данныхЗначение
CKA_VALUE1,4,6,7Byte array
(массив CK_BYTE)
Закрытый ключ длиной:

* 32 байта – для ГОСТ Р 34.10–2001 и ГОСТ Р 34.10–2012 (длина ключа 256 бит);
* 64 байта – для ГОСТ Р 34.10–2012 (длина ключа 512 бит).

Порядок байтов – от младшего к старшему (little endian).
CKA_GOSTR3410_PARAMS1,4,6Byte array
(массив CK_BYTE)
Идентификатор типа объекта данных ГОСТ Р 34.10–2001 в DER формате. Когда ключ используется, у объекта параметров домена с типом CKK_GOSTR3410 должен быть указан тот же атрибут CKA_OBJECT_ID.

Доступные значения описаны в разделе Значения CKA_GOSTR3410_PARAMS.
CKA_GOSTR3411_PARAMS1,4,6,8Byte array
(массив CK_BYTE)
Идентификатор типа объекта данных ГОСТ Р 34.10–2001 / ГОСТ Р 34.10–2012 в DER формате. Когда ключ используется, у объекта параметров домена с типом CKK_GOSTR3411 должен быть указан тот же атрибут CKA_OBJECT_ID.

Доступные значения описаны в разделе Значения CKA_GOSTR3411_PARAMS.
CKA_GOST28147_PARAMS4,6,8Byte array
(массив CK_BYTE)
Идентификатор типа объекта данных ГОСТ 28147–89 в DER формате. Когда ключ используется, у объекта параметров домена с типом CKK_GOST28147 должен быть указан тот же атрибут CKA_OBJECT_ID.

Доступные значения описаны в разделе Значения CKA_GOST28147_PARAMS.

Атрибут можно не указывать.

При генерации закрытого ключа доменные параметры не указываются в шаблоне ключа. Это обусловливается тем, что закрытые ключи ГОСТ Р 34.10 генерируются только как часть ключевой пары и доменные параметры для пары указываются в шаблоне открытого ключа.

Шаблон создания объекта закрытого ключа ГОСТ Р 34.10–2012 (длина ключа 256 бит)

CK_OBJECT_CLASS class = CKO_PRIVATE_KEY;
CK_KEY_TYPE keyType = CKK_GOSTR3410;
CK_UTF8CHAR label[] = "A GOST R34.10-2012 256 private key object";
CK_BYTE subject[] = {... };
CK_BYTE id[] = { 123 };
CK_BYTE id_GostR3410_2001_CryptoPro_A_ParamSet[] = { 0x06, 0x07, 0x2A, 0x85, 0x03, 0x02, 0x02, 0x23, 0x01 };
CK_BYTE id_tc26_gost3411_12_256[] = { 0x06, 0x08, 0x2A, 0x85, 0x03, 0x07, 0x01, 0x01, 0x02, 0x02 };
CK_BYTE value[32] = {... };
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_SUBJECT, subject, sizeof(subject)},
{CKA_ID, id, sizeof(id)},
{CKA_SENSITIVE, &bTrue, sizeof(bTrue)},
{CKA_SIGN, &bTrue, sizeof(bTrue)},
{CKA_GOSTR3410_PARAMS, id_GostR3410_2001_CryptoPro_A_ParamSet, sizeof(id_GostR3410_2001_CryptoPro_A_ParamSet)},
{CKA_GOSTR3411_PARAMS, id_tc26_gost3411_12_256, sizeof(id_tc26_gost3411_12_256)},
{CKA_VALUE, value, sizeof(value)}
};

Шаблон создания объекта закрытого ключа ГОСТ Р 34.10–2012 (длина ключа 512 бит)

CK_OBJECT_CLASS class = CKO_PRIVATE_KEY;
CK_KEY_TYPE keyType = CKK_GOSTR3410;
CK_UTF8CHAR label[] = "A GOST R34.10-2001 512 private 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_BYTE id[] = { 123 };
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_ID, id, sizeof(id)},
{CKA_SENSITIVE, &bTrue, sizeof(bTrue)},
{CKA_SIGN, &bTrue, sizeof(bTrue)},
{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)}
};

Ключи на эллиптических кривых поддерживаются приложением PKI.

Атрибут CK_KEY_TYPE для объектов закрытого ключа на эллиптических кривых принимает значения CKK_EC (рекомендуемое) и CKK_ECDSA (устаревшее).

Таблица ниже описывает атрибуты объектов закрытых ключей ECC, в дополнение к общим атрибутам закрытых ключей.

АтрибутТип данныхЗначение
CKA_EC_PARAMS1,4,6

(CKA_ECDSA_PARAMS)
Big integer (массив CK_BYTE)Представление параметров ANSI X9.62 в кодировке DER.
CKA_VALUE1,4,6,7Big integer (массив CK_BYTE)Значение закрытого ключа.

Шаблон создания объекта закрытого ключа CKK_EC

CK_OBJECT_CLASS class = CKO_PRIVATE_KEY;
CK_KEY_TYPE keyType = CKK_EC;
CK_UTF8CHAR label[] = “An EC private key object”;
CK_BYTE subject[] = {...};
CK_BYTE id[] = {123};
CK_BYTE ecParams[] = {...};
CK_BYTE value[] = {...};
CK_BBOOL true = CK_TRUE;
CK_ATTRIBUTE template[] = {
{CKA_CLASS, &class, sizeof(class)},
{CKA_KEY_TYPE, &keyType, sizeof(keyType)},
{CKA_TOKEN, &true, sizeof(true)},
{CKA_LABEL, label, sizeof(label)-1},
{CKA_SUBJECT, subject, sizeof(subject)},
{CKA_ID, id, sizeof(id)},
{CKA_SENSITIVE, &true, sizeof(true)},
{CKA_DERIVE, &true, sizeof(true)},
{CKA_EC_PARAMS, ecParams, sizeof(ecParams)},
{CKA_VALUE, value, sizeof(value)}
};

В следующие таблице представлены поддерживаемы значения параметра CKA_EC_PARAMS:

Значение параметра CKA_EC_PARAMS
OID
{0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x02}1.2.840.100045.3.1.2, prime192v2
{0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x03}1.2.840.100045.3.1.3, prime192v3
{0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x04}1.2.840.100045.3.1.4, prime239v1
{0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x05}1.2.840.10045.3.1.5, prime239v2
{0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x06}1.2.840.100045.3.1.6, prime239v3
{0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07}1.2.840.10045.3.1.7, prime256v1
{0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x19}1.3.132.0.31, secp192k1
{0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x20}1.3.132.0.32, secp224k1
{0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x21}1.3.132.0.33, secp224r1
{0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x0A}1.3.132.0.10, secp256k1
{0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x22}1.3.132.0.34, secp384r1
{0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x23}1.3.132.0.35, secp521r1

Объекты открытых ключей содержат секретные ключи.

Класс объекта (CKA_CLASS) равен CKO_SECRET_KEY.

Таблица ниже описывает атрибуты объектов секретных ключей, в дополнение к общим атрибутам ключей.

АтрибутТип данныхЗначение
CKA_SENSITIVE8,11CK_BBOOLCK_TRUE – ключ является чувствительным, т.е. нельзя извлечь из токена в открытом виде.

По умолчанию – CK_FALSE.
CKA_ENCRYPT8CK_BBOOLCK_TRUE – ключ поддерживает шифрование.

По умолчанию – специфическое для конкретного носителя 9.
CKA_DECRYPT8CK_BBOOLCK_TRUE – ключ поддерживает расшифрование.

По умолчанию – специфическое для конкретного носителя 9.
CKA_SIGN8CK_BBOOLCK_TRUE – ключ поддерживает подпись данных. Подпись является приложением к данным.

По умолчанию – специфическое для конкретного носителя 9.
CKA_VERIFY8CK_BBOOLCK_TRUE – ключ поддерживает верификацию, когда подпись является приложением к данным.

По умолчанию – специфическое для конкретного носителя 9.
CKA_WRAP8CK_BBOOLCK_TRUE – ключ может использоваться для экспорта других ключей.

По умолчанию – специфическое для конкретного носителя 9.
CKA_UNWRAP8CK_BBOOLCK_TRUE – ключ может использоваться для импорта других ключей.

По умолчанию – специфическое для конкретного носителя 9.
CKA_EXTRACTABLE8CK_BBOOLCK_TRUE – ключ извлекаемый и может быть экспортирован.

По умолчанию – специфическое для конкретного носителя 9.
CKA_ALWAYS_SENSITIVE2,4,6CK_BBOOLCK_TRUE – атрибут CKA_SENSITIVE всегда будет выставлен в CK_TRUE.
CKA_NEVER_EXTRACTABLE2,4,6CK_BBOOLCK_TRUE – атрибут CKA_EXTRACTABLE всегда будет выставлен в CK_FALSE.
CKA_CHECK_VALUEByte Array
(массив CK_BYTE)
Контрольная сумма.
CKA_WRAP_WITH_TRUSTED11CK_BBOOLCK_TRUE – ключ может экспортироваться только при помощи экспортного ключа, у которого атрибут CKA_TRUSTED равен CK_TRUE.

По умолчанию – CK_FALSE.
CKA_TRUSTED10CK_BBOOLCK_TRUE – экспортный ключ может использоваться для экспорта ключей, у которых атрибут CKA_WRAP_WITH_TRUSTED равен CK_TRUE.
CKA_WRAP_TEMPLATECK_ATTRIBUTE_PTRДля экспортных ключей. Шаблон атрибутов ключа для экспорта. Ключи, совпадающие с шаблоном, могут экспортироваться при помощи данного ключа. Количество атрибутов в массиве – параметр ulValueLen атрибута, разделенный на размер CK_ATTRIBUTE.
CKA_UNWRAP_TEMPLATECK_ATTRIBUTE_PTRДля экспортных ключей. Шаблон атрибутов ключа для импорта. Ключи, совпадающие с шаблоном, могут импортироваться при помощи данного ключа. Количество атрибутов в массиве – параметр ulValueLen атрибута, разделенный на размер CK_ATTRIBUTE.

Если атрибут CKA_SENSITIVE равен CK_TRUE или атрибут CKA_EXTRACTABLE равен CK_FALSE, то определенные атрибуты секретного ключа не смогут открываться в открытом тексте вне носителя. Указание на то, какие это атрибуты, для каждого типа секретных ключей приводится в таблице атрибутов в разделе, который содержит описание данного типа ключа.

Атрибут контрольной суммы (Key Check Value, KCV) ключа для объектов симметричных ключей вызывается как CKA_CHECK_VALUE, тип – совокупность байтов (байтовый массив), длина 3 байта и действует как “отпечаток” файла или контрольная сумма ключа. Они предназначены для перекрестной проверки симметричных ключей с использованием других систем, которые совместно используют такой же ключ, а также в качестве проверки достоверности после ручного ввода с клавиатуры или восстановления из резервной копии.

Свойства:

  1. Для двух ключей, которые криптографически идентичны, величина данного атрибута должна быть одинаковой.
  2. Атрибут CKA_CHECK_VALUE не должен быть пригоден для получения любой части значения ключа.
  3. Неуникальность. Два разных ключа могут иметь одно и то же значение CKA_CHECK_VALUE. Это маловероятно, но возможно. Вероятность легко вычисляется.

Данные атрибуты являются необязательными, но, если они поддерживаются, то значение атрибута всегда предоставляется библиотекой, независимо от того, как создавался или выводился объект ключа. Это значение должно предоставляться, даже если операция шифрования для данного ключа запрещена (т. е., когда CKA_ENCRYPT выставлен на CK_FALSE). Если значение предоставляется в шаблоне приложения (разрешается, но абсолютно необязательно), то, если оно поддерживается, оно должно совпадать со значением, вычисленным для данного атрибута библиотекой, или библиотека выдаст сообщение CKR_ATTRIBUTE_VALUE_INVALID – недопустимое значение атрибута.

Если библиотека не поддерживает данный атрибут, она должна его игнорировать. Такое отношение к атрибуту из шаблона не навредит процессу и позволит рассматривать данный атрибут, как и любой другой атрибут при упаковке и распаковке ключей, где атрибуты также сохраняются. Генерации KCV может помешать приложение, если оно предоставит атрибут в шаблоне в качестве записи без значения (длина 0). Приложение может запросить это значение в любое время, как и любой другой атрибут с использованием C_GetAttributeValue(). C_SetAttributeValue() может использоваться для уничтожения атрибута путем наделения его пустым значением.

Если иное не указано в определении объекта, значение данного атрибута выводится из объекта ключа, для чего берутся три первых байта одного зашифрованного блока нулевых (0x00) байтов, с использованием шифра по умолчанию и режима (например, электронной кодовой книги), связанного с типом ключа объекта секретного ключа.