Объекты секретного ключа

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

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

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

Атрибут Тип данных Значение
CKA_SENSITIVE8,11 CK_BBOOL

CK_TRUE – ключ является чувствительным, т.е. нельзя извлечь из токена в открытом виде.

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

CKA_ENCRYPT8 CK_BBOOL

CK_TRUE – ключ поддерживает шифрование.

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

CKA_DECRYPT8 CK_BBOOL

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

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

CKA_SIGN8 CK_BBOOL

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

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

CKA_VERIFY8 CK_BBOOL

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

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

CKA_WRAP8 CK_BBOOL

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

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

CKA_UNWRAP8 CK_BBOOL

CK_TRUE – ключ может использоваться для импорта других ключей.

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

CKA_EXTRACTABLE8,12 CK_BBOOL

CK_TRUE – ключ извлекаемый и может быть экспортирован.

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

CKA_ALWAYS_SENSITIVE2,4,6 CK_BBOOL CK_TRUE – атрибут CKA_SENSITIVE всегда будет выставлен в CK_TRUE.
CKA_NEVER_EXTRACTABLE2,4,6 CK_BBOOL CK_TRUE – атрибут CKA_EXTRACTABLE всегда будет выставлен в CK_FALSE.
CKA_CHECK_VALUE
Byte Array
(массив CK_BYTE)
Контрольная сумма.
CKA_WRAP_WITH_TRUSTED11 CK_BBOOL

CK_TRUE – ключ может экспортироваться только при помощи экспортного ключа, у которого атрибут CKA_TRUSTED равен CK_TRUE.

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

CKA_TRUSTED10 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.
2 – Не указывается, когда объект создается с использованием C_CreateObject().
4 – Не указывается, когда объект генерируется с использованием C_GenerateKey() или C_GenerateKeyPair().
6 – Не указывается, когда объект импортируется с использованием C_UnwrapKey().
8 – Может изменяться после того как объект был создан с использованием C_SetAttributeValue() или в процессе копирования объекта с использованием C_CopyObject(). Однако в некоторых случаях определенный токен может и не разрешить изменение атрибута в процессе выполнения C_CopyObject().
9 – Значение по умолчанию является специфическим для конкретного токена и может зависеть от значений других атрибутов.
10 – Может быть выставляться в CK_TRUE только пользователем с правами администратора (SO).
11 – Не может изменен после того, как выставлен в CK_TRUE. Становится атрибутом только для чтения.

Если атрибут 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) байтов, с использованием шифра по умолчанию и режима (например, электронной кодовой книги), связанного с типом ключа объекта секретного ключа.