Объекты открытых ключей содержат секретные ключи.
Класс объекта (CKA_CLASS) равен CKO_SECRET_KEY
.
Таблица ниже описывает атрибуты объектов секретных ключей, в дополнение к общим атрибутам ключей.
Атрибут | Тип данных | Значение |
---|---|---|
CKA_SENSITIVE 8,11 |
CK_BBOOL |
По умолчанию – |
CKA_ENCRYPT 8 |
CK_BBOOL |
По умолчанию – специфическое для конкретного носителя 9. |
CKA_DECRYPT 8 |
CK_BBOOL |
По умолчанию – специфическое для конкретного носителя 9. |
CKA_SIGN 8 |
CK_BBOOL |
По умолчанию – специфическое для конкретного носителя 9. |
CKA_VERIFY 8 |
CK_BBOOL |
По умолчанию – специфическое для конкретного носителя 9. |
CKA_WRAP 8 |
CK_BBOOL |
По умолчанию – специфическое для конкретного носителя 9. |
CKA_UNWRAP 8 |
CK_BBOOL |
По умолчанию – специфическое для конкретного носителя 9. |
CKA_EXTRACTABLE 8,12 |
CK_BBOOL |
По умолчанию – специфическое для конкретного носителя 9. |
CKA_ALWAYS_SENSITIVE 2,4,6 |
CK_BBOOL |
CK_TRUE – атрибут CKA_SENSITIVE всегда будет выставлен в CK_TRUE . |
CKA_NEVER_EXTRACTABLE 2,4,6 |
CK_BBOOL |
CK_TRUE – атрибут CKA_EXTRACTABLE всегда будет выставлен в CK_FALSE . |
CKA_CHECK_VALUE |
Byte Array
(массив
CK_BYTE ) |
Контрольная сумма. |
CKA_WRAP_WITH_TRUSTED 11 |
CK_BBOOL |
По умолчанию – |
CKA_TRUSTED 10 |
CK_BBOOL |
CK_TRUE – экспортный ключ может использоваться для экспорта ключей, у которых
атрибут CKA_WRAP_WITH_TRUSTED равен CK_TRUE . |
CKA_WRAP_TEMPLATE |
CK_ATTRIBUTE_PTR |
Для экспортных ключей. Шаблон атрибутов ключа для экспорта.
Ключи, совпадающие с шаблоном, могут экспортироваться при помощи данного ключа.
Количество атрибутов в массиве – параметр ulValueLen атрибута, разделенный на размер CK_ATTRIBUTE . |
CKA_UNWRAP_TEMPLATE |
CK_ATTRIBUTE_PTR |
Для экспортных ключей. Шаблон атрибутов ключа для импорта.
Ключи, совпадающие с шаблоном, могут импортироваться при помощи данного ключа.
Количество атрибутов в массиве – параметр ulValueLen атрибута, разделенный на размер CK_ATTRIBUTE . |
C_CreateObject()
.C_GenerateKey()
или C_GenerateKeyPair()
.C_UnwrapKey()
.C_SetAttributeValue()
или в процессе копирования объекта с использованием C_CopyObject()
.
Однако в некоторых случаях определенный токен может и не разрешить
изменение атрибута в процессе выполнения C_CopyObject()
.CK_TRUE
только пользователем с правами администратора (SO
).CK_TRUE
.
Становится атрибутом только для чтения.Если атрибут CKA_SENSITIVE
равен CK_TRUE
или атрибут CKA_EXTRACTABLE
равен CK_FALSE
,
то определенные атрибуты секретного ключа не смогут открываться в открытом тексте вне носителя.
Указание на то, какие это атрибуты, для каждого типа секретных ключей приводится в
таблице атрибутов в разделе, который содержит описание данного типа ключа.
Атрибут контрольной суммы (Key Check Value, KCV
) ключа для объектов симметричных ключей вызывается как CKA_CHECK_VALUE
,
тип – совокупность байтов (байтовый массив), длина 3 байта и действует как «отпечаток» файла или контрольная сумма ключа.
Они предназначены для перекрестной проверки симметричных ключей с использованием других систем,
которые совместно используют такой же ключ, а также в качестве проверки достоверности после ручного ввода с клавиатуры
или восстановления из резервной копии.
CKA_CHECK_VALUE
не должен быть пригоден для получения любой части значения ключа.CKA_CHECK_VALUE
.
Это маловероятно, но возможно. Вероятность легко вычисляется.Данные атрибуты являются необязательными, но, если они поддерживаются, то значение атрибута всегда предоставляется библиотекой,
независимо от того, как создавался или выводился объект ключа. Это значение должно предоставляться, даже если операция шифрования
для данного ключа запрещена (т. е., когда CKA_ENCRYPT
выставлен на CK_FALSE
). Если значение предоставляется в шаблоне приложения
(разрешается, но абсолютно необязательно), то, если оно поддерживается, оно должно совпадать со значением,
вычисленным для данного атрибута библиотекой, или библиотека выдаст сообщение CKR_ATTRIBUTE_VALUE_INVALID
– недопустимое значение атрибута.
Если библиотека не поддерживает данный атрибут, она должна его игнорировать. Такое отношение к атрибуту из шаблона
не навредит процессу и позволит рассматривать данный атрибут, как и любой другой атрибут при упаковке и распаковке ключей,
где атрибуты также сохраняются. Генерации KCV
может помешать приложение, если оно предоставит атрибут в шаблоне
в качестве записи без значения (длина 0
). Приложение может запросить это значение в любое время,
как и любой другой атрибут с использованием C_GetAttributeValue()
. C_SetAttributeValue()
может использоваться для уничтожения атрибута путем наделения его пустым значением.
Если иное не указано в определении объекта, значение данного атрибута выводится из объекта ключа,
для чего берутся три первых байта одного зашифрованного блока нулевых (0x00
) байтов,
с использованием шифра по умолчанию и режима (например, электронной кодовой книги),
связанного с типом ключа объекта секретного ключа.