Объекты ключей

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

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

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

Идентификатор ключа.

По умолчанию – пусто.

CKA_START_DATE8 CK_DATE

Дата начала действия ключа.

По умолчанию – пусто.

CKA_END_DATE8 CK_DATE

Дата истечения действия ключа.

По умолчанию – пусто.

CKA_DERIVE8 CK_BBOOL

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

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

CKA_LOCAL2,4,6 CK_BBOOL
Устанавливается в CK_TRUE, если выполняется одно из условий:
  • ключ сгенерирован на токене, при помощи функций C_GenerateKey() или C_GenerateKeyPair();
  • ключ создан при помощи функции C_CopyObject(), как копия ключа, атрибут которого CKA_LOCAL равен CK_TRUE.
CKA_KEY_GEN_MECHANISM2,4,6 CK_MECHANISM_TYPE Идентификатор механизма, который используется для генерации материала ключа.
CKA_ALLOWED_MECHANISMS CK_MECHANISM_TYPE_PTR Список механизмов, которые можно использовать с данным ключом. Количество механизмов в массиве – параметр ulValueLen атрибута, разделенный на размер CK_MECHANISM_TYPE.
1 – Указывается, когда объект создается с использованием C_CreateObject().
2 – Не указывается, когда объект создается с использованием C_CreateObject().
4 – Не указывается, когда объект генерируется с использованием C_GenerateKey() или C_GenerateKeyPair().
5 – Указывается, когда объект импортируется с использованием C_UnwrapKey().
6 – Не указывается, когда объект импортируется с использованием C_UnwrapKey().
8 – Может изменяться после того как объект был создан с использованием C_SetAttributeValue() или в процессе копирования объекта с использованием C_CopyObject(). Однако в некоторых случаях определенный токен может и не разрешить изменение атрибута в процессе выполнения C_CopyObject().

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

Атрибуты 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. Если CKA_LOCAL имеет значение CK_FALSE, то атрибут CKA_KEY_GEN_MECHANISM принимает значение CK_UNAVAILABLE_INFORMATION.