- 3.8.4.1 Общие атрибуты
- 3.8.4.2 Объекты хранения
- 3.8.4.3 Объекты данных
- 3.8.4.4 Объекты сертификата
- 3.8.4.5 Объекты сертификата открытого ключа X.509
- 3.8.4.6 Объекты сертификата атрибутов X.509
- 3.8.4.7 Объекты ключей
- 3.8.4.8 Общие атрибуты открытых ключей
- 3.8.4.9 Открытые ключи RSA
- 3.8.4.10 Открытые ключи ГОСТ Р 34.10
- 3.8.4.11 Открытые ключи ECC
- 3.8.4.12 Общие атрибуты закрытых ключей
- 3.8.4.13 Закрытые ключи RSA
- 3.8.4.14 Закрытые ключи ГОСТ Р 34.10
- 3.8.4.15 Закрытые ключи ECC
- 3.8.4.16 Объекты секретного ключа
3.8.4.1 Общие атрибуты
В таблице приведены общие атрибуты для всех объектов PKCS #11.
| Класс объекта. |
1 – Указывается, когда объект создается с использованием C_CreateObject().
3.8.4.2 Объекты хранения
Это не класс объектов, поэтому не требуется определение CKO_. К объектам хранения относятся:
Таблица ниже описывает атрибуты объектов хранения, в дополнение к общим атрибутам.
|
По умолчанию – | |
|
По умолчанию – специфическое для конкретного носителя 9. | |
|
По умолчанию – | |
| RFC2279 string | Описание объекта. По умолчанию – пусто. |
|
Невозможно установить значение По умолчанию – |
9 – Значение по умолчанию является специфическим для конкретного токена и может зависеть от значений других атрибутов.
Только атрибут CKA_LABEL можно изменять после создания объекта. Атрибуты CKA_TOKEN, CKA_PRIVATE и CKA_MODIFIABLE можно изменять в процессе копирования объекта.
Атрибут CKA_TOKEN указывает на то, является ли объект объектом носителя или сеанса.
Когда атрибут CKA_PRIVATE выставлен на CK_TRUE, пользователь не сможет получить доступ к объекту до тех пор, пока не пройдет аутентификацию в объекте.
Значение атрибута CKA_MODIFIABLE определяет, является ли объект объектом только для чтения или нет. Могут быть варианты, при которых неизменяемый объект можно удалить, однако есть варианты, когда его удалить нельзя.
Атрибут CKA_LABEL предназначен для оказания помощи пользователям при просмотре и редактировании.
3.8.4.3 Объекты данных
Объекты данных хранят информацию, заданную приложением.
Класс объекта (CKA_CLASS) равен CKO_DATA.
Таблица ниже описывает атрибуты объектов данных, в дополнение к общим атрибутам хранения.
| RFC2279 string | Описание приложения, которое управляет объектом. По умолчанию – пусто. |
| Byte Array | Идентификатор типа данных объекта в DER-формате. По умолчанию – пусто. |
| Byte Array | Значение объекта. По умолчанию – пусто. |
|
Атрибут является разработкой Аладдин Р.Д. и не входит в стандарт PKCS #11. По умолчанию – |
Атрибут 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)}};3.8.4.4 Объекты сертификата
Объекты сертификатов хранят:
Класс объекта (CKA_CLASS) равен CKO_CERTIFICATE.
Таблица ниже описывает общие атрибуты объектов сертификатов, в дополнение к общим атрибутам хранения.
| Тип сертификата. | |
|
| |
| Категория сертификата:
По умолчанию – | |
| Byte Array | Контрольная сумма. |
| Начальная дата сертификата. По умолчанию – пусто. | |
| Конечная дата сертификата. По умолчанию – пусто. | |
|
Атрибут является разработкой Аладдин Р.Д. и не входит в стандарт PKCS #11. По умолчанию – |
1 – Указывается, когда объект создается с использованием C_CreateObject().
10 – Может быть выставляться в CK_TRUE только пользователем с правами администратора (SO).
Атрибут CKA_CERTIFICATE_TYPE не изменяется после создания объекта. Данная версия PKCS #11 поддерживает следующие типы сертификатов:
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» или «useful- Certificates» сохраняемый сертификат будет помечен категорией «удостоверяющий центр» или «иное лицо», в зависимости от того, указывают ли атрибуты CommonCertificateAttribute или CKA_TRUSTED на то, принадлежит он к CDF-описаниям trustedCertificates или usefulCertificates.
CKA_CHECK_VALUE: значение данного сертификата выводится из сертификата по первым трем байтам значения хэш-функции SHA-1 атрибута CKA_VALUE объекта сертификата.
Атрибуты CKA_START_DATE и CKA_END_DATE используются только для ссылки. Cryptoki не придает им никакого дополнительного значения. Когда они присутствуют, приложение отвечает за то, чтобы выставить их на значения, которые соответствуют полям сертификата «не до» и «не после» (если таковые существуют).
Атрибут CKA_COMPRESSED позволяет управлять компрессией. Компрессии подвергается атрибут CKA_VALUE у объектов CKO_CERTIFICATE и CKO_DATA. Значение атрибута присваивается при создании объекта и не изменяется впоследствии.
3.8.4.5 Объекты сертификата открытого ключа X.509
Объекты сертификата X.509 содержат сертификаты открытых ключей X.509.
Тип сертификата (CKA_CERTIFICATE_TYPE) равен CKC_X_509.
Таблица ниже описывает атрибуты объектов сертификатов открытых ключей, в дополнение к общим атрибутам класса.
Атрибут | Тип данных | Значение |
|---|---|---|
| Byte Array | Имя субъекта сертификата в DER формате. |
| Byte Array | Идентификатор для ключевой пары. По умолчанию – пусто. |
| Byte Array | Имя издателя сертификата в DER формате. По умолчанию – пусто. |
| Byte Array | Серийный номер сертификата в DER формате. По умолчанию – пусто. |
| Byte Array | Тело сертификата в BER формате. |
| RFC2279 string | URL, где можно получить полный сертификат. По умолчанию – пусто. |
| Byte Array | Хэш SHA-1 открытого ключа субъекта. По умолчанию – пусто. |
| Byte Array | Хэш SHA-1 открытого ключа издателя. По умолчанию – пусто. |
| Домен безопасности Java MIDP:
По умолчанию – | |
| Определяет механизм, используемый для вычисления Если атрибут отсутствует, то по умолчанию используется SHA-1. |
1 – Указывается, когда объект создается с использованием C_CreateObject().
2 – Не указывается, когда объект создается с использованием C_CreateObject().
3 – Указывается, когда объект генерируется с использованием C_GenerateKey() или C_GenerateKeyPair().
4 – Не указывается, когда объект генерируется с использованием C_GenerateKey() или C_GenerateKeyPair().
Только атрибуты 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 в том месте, где должен храниться сертификат вместо самого сертификата. Хранение 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)}};3.8.4.6 Объекты сертификата атрибутов X.509
Объекты сертификата атрибутов X.509 содержат сертификаты атрибутов X.509.
Тип сертификата (CKA_CERTIFICATE_TYPE) равен CKC_X_509_ATTR_CERT.
Таблица ниже описывает атрибуты объектов сертификатов атрибутов X.509, в дополнение к общим атрибутам класса.
Атрибут | Тип данных | Значение |
|---|---|---|
| Byte Array | Поле субъекта сертификата атрибутов в DER формате. Значение отличается от |
| Byte Array | Поле издателя сертификата атрибутов в DER формате. Значение отличается от По умолчанию – пусто. |
| Byte Array | Серийный номер сертификата в DER формате. По умолчанию – пусто. |
| Byte Array | Последовательность значений идентификаторов объектов, соответствующим типам атрибутов сертификата, в BER формате. При помощи этого поля можно искать заданный атрибут сертификата без его извлечения и разбора. По умолчанию – пусто. |
| Byte Array | Тело сертификата в BER формате. |
1 – Указывается, когда объект создается с использованием C_CreateObject().
Только атрибуты 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)}};3.8.4.7 Объекты ключей
Это не класс объектов, поэтому не требуется определение CKO_. В объектах ключей хранятся ключи шифрования и аутентификации, которые могут быть:
Таблица ниже описывает атрибуты объектов ключей, в дополнение к общим атрибутам.
| Тип ключа. | |
| Byte Array | Идентификатор ключа. По умолчанию – пусто. |
| Дата начала действия ключа. По умолчанию – пусто. | |
| Дата истечения действия ключа. По умолчанию – пусто. | |
|
По умолчанию – | |
| Устанавливается в CK_TRUE, если выполняется одно из условий:
| |
| Идентификатор механизма, который используется для генерации материала ключа. | |
| Список механизмов, которые можно использовать с данным ключом. Количество механизмов в массиве – параметр |
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.
3.8.4.8 Общие атрибуты открытых ключей
Класс объекта (CKA_CLASS) равен CKO_PUBLIC_KEY.
Таблица ниже описывает атрибуты объектов открытых ключей, в дополнение к общим атрибутам ключей.
Атрибут | Тип данных | Значение |
|---|---|---|
| Byte Array | Имя субъекта сертификата в DER формате. По умолчанию – пусто. |
|
По умолчанию – специфическое для конкретного носителя 9. | |
|
По умолчанию – специфическое для конкретного носителя 9. | |
|
По умолчанию – специфическое для конкретного носителя 9. | |
|
По умолчанию – специфическое для конкретного носителя 9. | |
|
| |
| Для экспортных ключей. Шаблон атрибутов ключа для экспорта. Ключи, совпадающие с шаблоном, могут экспортироваться при помощи данного ключа. Количество атрибутов в массиве – параметр |
8 – Может изменяться после того как объект был создан с использованием C_SetAttributeValue() или в процессе копирования объекта с использованием C_CopyObject(). Однако в некоторых случаях определенный токен может и не разрешить изменение атрибута в процессе выполнения C_CopyObject().
9 – Значение по умолчанию является специфическим для конкретного токена и может зависеть от значений других атрибутов.
10 – Может быть выставляться в CK_TRUE только пользователем с правами администратора (SO).
В интересах совместимости предусмотрено, что имя субъекта и идентификатор ключа для открытого ключа будут совпадать с такими же показателями соответствующего сертификата и секретного ключа. Однако Cryptoki не настаивает на такой привязке, и не требуется, чтобы сертификат и закрытый ключ также хранились на носителе. Для того, чтобы установить соответствие между флагами ISO/IEC 9594-8 (X.509) keyUsage для открытых ключей и атрибутами PKCS #11 для открытых ключей, необходимо воспользоваться таблицей ниже.
Флаги использования ключа для открытых ключей в сертификатах открытых ключей X.509 | Соответствующие атрибуты Cryptoki для открытых ключей |
|---|---|
dataEncipherment |
|
digitalSignature, keyCertSign, cRLSign |
|
digitalSignature, keyCertSign, cRLSign |
|
keyAgreement |
|
keyEncipherment |
|
nonRepudiation |
|
nonRepudiation |
|
3.8.4.9 Открытые ключи RSA
Объекты открытых ключей RSA содержат открытые ключи RSA.
Тип ключа (CKA_KEY_TYPE) равен CKK_RSA.
Ключи RSA поддерживаются приложением PKI.
Таблица ниже описывает атрибуты объектов открытых ключей RSA, в дополнение к общим атрибутам открытых ключей.
Атрибут | Тип данных | Значение |
|---|---|---|
| Big integer | Модуль n. |
| Длина модуля n в байтах. | |
| Big integer | Открытая экспонента e. |
1 – Указывается, когда объект создается с использованием C_CreateObject().
2 – Не указывается, когда объект создается с использованием C_CreateObject().
3 – Указывается, когда объект генерируется с использованием C_GenerateKey() или C_GenerateKeyPair().
4 – Не указывается, когда объект генерируется с использованием 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)}};3.8.4.10 Открытые ключи ГОСТ Р 34.10
Объекты открытых ключей ГОСТ Р 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.9, 2.5.13
Ключи ГОСТ Р 34.10–2012 (длина ключа 512 бит) поддерживаются приложением:
- GOST версии 2.5.13
Таблица ниже описывает атрибуты объектов открытых ключей ГОСТ Р 34.10–2001, ГОСТ Р 34.10–2012 (длина ключа 256 бит) и ГОСТ Р 34.10–2012 (длина ключа 512 бит), в дополнение к общим атрибутам открытых ключей.
Атрибут | Тип данных | Значение |
|---|---|---|
| Byte array | Для ГОСТ Р 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). |
| Byte array | Идентификатор типа объекта данных ГОСТ Р 34.10–2001 в DER формате. Когда ключ используется, у объекта параметров домена с типом Доступные значения описаны в разделе Значения CKA_GOSTR3410_PARAMS. |
| Byte array | Идентификатор типа объекта данных ГОСТ Р 34.10–2001 / ГОСТ Р 34.10–2012 в DER формате. Когда ключ используется, у объекта параметров домена с типом Доступные значения описаны в разделе Значения CKA_GOSTR3411_PARAMS. |
| Byte array | Идентификатор типа объекта данных ГОСТ 28147–89 в DER формате. Когда ключ используется, у объекта параметров домена с типом Доступные значения описаны в разделе Значения CKA_GOST28147_PARAMS. Атрибут можно не указывать. |
1 – Указывается, когда объект создается с использованием C_CreateObject().
3 – Указывается, когда объект генерируется с использованием C_GenerateKey() или C_GenerateKeyPair().
4 – Не указывается, когда объект генерируется с использованием C_GenerateKey() или C_GenerateKeyPair().
8 – Может изменяться после того как объект был создан с использованием C_SetAttributeValue() или в процессе копирования объекта с использованием C_CopyObject(). Однако, в некоторых случаях определенный токен может и не разрешить изменение атрибута в процессе выполнения C_CopyObject().
Шаблон создания объекта открытого ключа ГОСТ Р 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)}};3.8.4.11 Открытые ключи ECC
Ключи на эллиптических кривых поддерживаются приложением PKI.
Атрибут CK_KEY_TYPE для объектов открытого ключа на эллиптических кривых принимает значения CKK_EC (рекомендуемое) и CKK_ECDSA (устаревшее).
Таблица ниже описывает атрибуты объектов открытых ключей ECC, в дополнение к общим атрибутам открытых ключей.
Атрибут | Тип данных | значение |
|---|---|---|
CKA_EC_PARAMS1,3 (CKA_ECDSA_PARAMS) | Big integer (массив | Представление параметров ANSI X9.62 в кодировке DER |
CKA_EC_POINT1,4 | Big integer (массив | Закодированное в формате DER значения точки Q по стандарту ANSI X9.62 |
1 - Должен указываться при создании объекта с помощью функции C_CreateObject()
3 - Должен указываться при генерации объекта с помощью функций C_GenerateKey() или C_GenerateKeyPair()
4 - Не должен указываться при генерации объекта с помощью функций C_GenerateKey() или C_GenerateKeyPair()
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_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 |
3.8.4.12 Общие атрибуты закрытых ключей
Класс объекта (CKA_CLASS) равен CKO_PRIVATE_KEY.
Таблица ниже описывает атрибуты объектов закрытых ключей, в дополнение к общим атрибутам ключей.
Атрибут | Тип данных | Значение |
|---|---|---|
| Byte Array | Имя субъекта сертификата в DER формате. |
|
По умолчанию – специфическое для конкретного носителя 9. | |
|
По умолчанию – специфическое для конкретного носителя 9. | |
|
По умолчанию – специфическое для конкретного носителя 9. | |
|
По умолчанию – специфическое для конкретного носителя 9. | |
|
По умолчанию – специфическое для конкретного носителя 9. | |
|
По умолчанию – специфическое для конкретного носителя 9. | |
|
| |
|
| |
|
По умолчанию – | |
| Для экспортных ключей. Шаблон атрибутов ключа для импорта. Ключи, совпадающие с шаблоном, могут импортироваться при помощи данного ключа. Количество атрибутов в массиве – параметр | |
|
По умолчанию – |
2 – Не указывается, когда объект создается с использованием C_CreateObject().
4 – Не указывается, когда объект генерируется с использованием C_GenerateKey() или C_GenerateKeyPair().
6 – Не указывается, когда объект импортируется с использованием C_UnwrapKey().
8 – Может изменяться после того как объект был создан с использованием C_SetAttributeValue() или в процессе копирования объекта с использованием C_CopyObject(). Однако в некоторых случаях определенный токен может и не разрешить изменение атрибута в процессе выполнения C_CopyObject().
9 – Значение по умолчанию является специфическим для конкретного токена и может зависеть от значений других атрибутов.
11 – Не может изменен после того, как выставлен в CK_TRUE. Становится атрибутом только для чтения.
В интересах совместимости предусмотрено, что имя субъекта и идентификатор ключа для закрытого ключа будут совпадать с такими же показателями соответствующего сертификата и открытого ключа. Однако 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.
3.8.4.13 Закрытые ключи RSA
Объекты закрытых ключей RSA содержат закрытые ключи RSA.
Тип ключа (CKA_KEY_TYPE) равен CKK_RSA.
Ключи RSA поддерживаются приложением PKI:
Таблица ниже описывает атрибуты объектов закрытых ключей RSA, в дополнение к общим атрибутам закрытых ключей.
Атрибут | Тип данных | Значение |
|---|---|---|
| Big integer | Модуль n. |
| Big integer | Открытая экспонента e. |
| Big integer | Закрытая экспонента d. |
| Big integer | Простое число p. |
| Big integer | Простое число q. |
| Big integer | Закрытая экспонента d по модулю p-1 |
| Big integer | Закрытая экспонента d по модулю q-1 |
| Big integer | Коэффициент CRT q-1 по модулю p |
1 – Указывается, когда объект создается с использованием C_CreateObject().
4 – Не указывается, когда объект генерируется с использованием C_GenerateKey() или C_GenerateKeyPair().
6 – Не указывается, когда объект импортируется с использованием C_UnwrapKey().
7 – Не может быть открыт в открытом виде, если у объекта атрибут CKA_SENSITIVE равен CK_TRUE или атрибут CKA_EXTRACTABLE равен CK_FALSE.
Шаблон создания объекта закрытого ключа 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)}};3.8.4.14 Закрытые ключи ГОСТ Р 34.10
Объекты закрытых ключей ГОСТ Р 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.9, 2.5.13
Ключи ГОСТ Р 34.10–2012 (длина ключа 512 бит) поддерживаются приложением:
- GOST версии 2.5.13
Таблица ниже описывает атрибуты объектов закрытых ключей ГОСТ Р 34.10–2001, ГОСТ Р 34.10–2012 (длина ключа 256 бит) и ГОСТ Р 34.10–2012 (длина ключа 512 бит), в дополнение к общим атрибутам закрытых ключей.
Атрибут | Тип данных | Значение |
|---|---|---|
| Byte array | Закрытый ключ длиной:
Порядок байтов – от младшего к старшему (little endian). |
| Byte array | Идентификатор типа объекта данных ГОСТ Р 34.10–2001 в DER формате. Когда ключ используется, у объекта параметров домена с типом Доступные значения описаны в разделе Значения CKA_GOSTR3410_PARAMS. |
| Byte array | Идентификатор типа объекта данных ГОСТ Р 34.10–2001 / ГОСТ Р 34.10–2012 в DER формате. Когда ключ используется, у объекта параметров домена с типом Доступные значения описаны в разделе Значения CKA_GOSTR3411_PARAMS. |
| Byte array | Идентификатор типа объекта данных ГОСТ 28147–89 в DER формате. Когда ключ используется, у объекта параметров домена с типом Доступные значения описаны в разделе Значения CKA_GOST28147_PARAMS. Атрибут можно не указывать. |
1 – Указывается, когда объект создается с использованием C_CreateObject().
4 – Не указывается, когда объект генерируется с использованием C_GenerateKey() или C_GenerateKeyPair().
6 – Не указывается, когда объект импортируется с использованием C_UnwrapKey().
7 – Не может быть открыт в открытом виде, если у объекта атрибут CKA_SENSITIVE равен CK_TRUE или атрибут CKA_EXTRACTABLE равен CK_FALSE.
8 – Может изменяться после того как объект был создан с использованием C_SetAttributeValue() или в процессе копирования объекта с использованием C_CopyObject(). Однако в некоторых случаях определенный токен может и не разрешить изменение атрибута в процессе выполнения C_CopyObject().
При генерации закрытого ключа доменные параметры не указываются в шаблоне ключа. Это обусловливается тем, что закрытые ключи ГОСТ Р 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)}};3.8.4.15 Закрытые ключи ECC
Ключи на эллиптических кривых поддерживаются приложением PKI.
Атрибут CK_KEY_TYPE для объектов закрытого ключа на эллиптических кривых принимает значения CKK_EC (рекомендуемое) и CKK_ECDSA (устаревшее).
Таблица ниже описывает атрибуты объектов закрытых ключей ECC, в дополнение к общим атрибутам закрытых ключей.
Атрибут | Тип данных | Значение |
|---|---|---|
CKA_EC_PARAMS1,4,6 (CKA_ECDSA_PARAMS) | Big integer (массив | Представление параметров ANSI X9.62 в кодировке DER |
CKA_VALUE1,4,6,7 | Big integer (массив | Значение закрытого ключа |
1 – Указывается, когда объект создается с использованием C_CreateObject()
4 – Не указывается, когда объект генерируется с использованием C_GenerateKey() или C_GenerateKeyPair()
6 – Не указывается, когда объект импортируется с использованием C_UnwrapKey()
7 – Не может быть открыт в открытом виде, если у объекта атрибут CKA_SENSITIVE равен CK_TRUE или атрибут CKA_EXTRACTABLE равен CK_FALSE
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 |
3.8.4.16 Объекты секретного ключа
Объекты открытых ключей содержат секретные ключи.
Класс объекта (CKA_CLASS) равен CKO_SECRET_KEY.
Таблица ниже описывает атрибуты объектов секретных ключей, в дополнение к общим атрибутам ключей.
Атрибут | Тип данных | Значение |
|---|---|---|
|
По умолчанию – | |
|
По умолчанию – специфическое для конкретного носителя 9. | |
|
По умолчанию – специфическое для конкретного носителя 9. | |
|
По умолчанию – специфическое для конкретного носителя 9. | |
|
По умолчанию – специфическое для конкретного носителя 9. | |
|
По умолчанию – специфическое для конкретного носителя 9. | |
|
По умолчанию – специфическое для конкретного носителя 9. | |
|
По умолчанию – специфическое для конкретного носителя 9. | |
|
| |
|
| |
| Byte Array | Контрольная сумма. |
|
По умолчанию – | |
|
| |
| Для экспортных ключей. Шаблон атрибутов ключа для экспорта. Ключи, совпадающие с шаблоном, могут экспортироваться при помощи данного ключа. Количество атрибутов в массиве – параметр | |
| Для экспортных ключей. Шаблон атрибутов ключа для импорта. Ключи, совпадающие с шаблоном, могут импортироваться при помощи данного ключа. Количество атрибутов в массиве – параметр |
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 байта и действует как «отпечаток» файла или контрольная сумма ключа. Они предназначены для перекрестной проверки симметричных ключей с использованием других систем, которые совместно используют такой же ключ, а также в качестве проверки достоверности после ручного ввода с клавиатуры или восстановления из резервной копии.
Свойства:
- Для двух ключей, которые криптографически идентичны, величина данного атрибута должна быть одинаковой.
- Атрибут
CKA_CHECK_VALUEне должен быть пригоден для получения любой части значения ключа. - Неуникальность. Два разных ключа могут иметь одно и то же значение
CKA_CHECK_VALUE. Это маловероятно, но возможно. Вероятность легко вычисляется.
Данные атрибуты являются необязательными, но, если они поддерживаются, то значение атрибута всегда предоставляется библиотекой, независимо от того, как создавался или выводился объект ключа. Это значение должно предоставляться, даже если операция шифрования для данного ключа запрещена (т. е., когда CKA_ENCRYPT выставлен на CK_FALSE). Если значение предоставляется в шаблоне приложения (разрешается, но абсолютно необязательно), то, если оно поддерживается, оно должно совпадать со значением, вычисленным для данного атрибута библиотекой, или библиотека выдаст сообщение CKR_ATTRIBUTE_VALUE_INVALID – недопустимое значение атрибута.
Если библиотека не поддерживает данный атрибут, она должна его игнорировать. Такое отношение к атрибуту из шаблона не навредит процессу и позволит рассматривать данный атрибут, как и любой другой атрибут при упаковке и распаковке ключей, где атрибуты также сохраняются. Генерации KCV может помешать приложение, если оно предоставит атрибут в шаблоне в качестве записи без значения (длина 0). Приложение может запросить это значение в любое время, как и любой другой атрибут с использованием C_GetAttributeValue(). C_SetAttributeValue() может использоваться для уничтожения атрибута путем наделения его пустым значением.
Если иное не указано в определении объекта, значение данного атрибута выводится из объекта ключа, для чего берутся три первых байта одного зашифрованного блока нулевых (0x00) байтов, с использованием шифра по умолчанию и режима (например, электронной кодовой книги), связанного с типом ключа объекта секретного ключа.