Объекты PKCS #11
Легенда индексов атрибутов
Заголовок раздела «Легенда индексов атрибутов»Надстрочные индексы в таблицах атрибутов (1–11) соответствуют следующим правилам:
- Указывается, когда объект создается с использованием
C_CreateObject(). - Не указывается, когда объект создается с использованием
C_CreateObject(). - Указывается, когда объект генерируется с использованием
C_GenerateKey()илиC_GenerateKeyPair(). - Не указывается, когда объект генерируется с использованием
C_GenerateKey()илиC_GenerateKeyPair(). - Указывается, когда объект импортируется с использованием
C_UnwrapKey(). - Не указывается, когда объект импортируется с использованием
C_UnwrapKey(). - Не может быть открыт в открытом виде, если у объекта атрибут
CKA_SENSITIVEравенCK_TRUEили атрибутCKA_EXTRACTABLEравенCK_FALSE. - Может изменяться после того как объект был создан с использованием
C_SetAttributeValue()или в процессе копирования объекта с использованиемC_CopyObject(). Однако в некоторых случаях определенный токен может и не разрешить изменение атрибута в процессе выполненияC_CopyObject(). - Значение по умолчанию является специфическим для конкретного токена и может зависеть от значений других атрибутов.
- Может быть выставляться в
CK_TRUEтолько пользователем с правами администратора (SO). - Не может изменен после того, как выставлен в
CK_TRUE. Становится атрибутом только для чтения.
Общие атрибуты
Заголовок раздела «Общие атрибуты»В таблице приведены общие атрибуты для всех объектов PKCS #11.
| Атрибут | Тип данных | Значение |
|---|---|---|
CKA_CLASS1 | CK_OBJECT_CLASS | Класс объекта. |
Объекты хранения
Заголовок раздела «Объекты хранения»Это не класс объектов, поэтому не требуется определение CKO_. К объектам хранения относятся:
- объекты данных (CKO_DATA);
- объекты сертификатов (CKO_CERTIFICATE);
- объекты ключей.
Таблица ниже описывает атрибуты объектов хранения, в дополнение к общим атрибутам.
| Атрибут | Тип данных | Значение |
|---|---|---|
CKA_TOKEN | CK_BBOOL | CK_TRUE – объект принадлежит носителю, т.е. хранится только в памяти устройства и не удаляется после завершения сеанса;CK_FALSE – объект принадлежит сеансу, т.е. хранится в оперативной памяти и может использоваться только в промежуток времени – с момента создания сеанса (см. C_OpenSession()) и до его закрытия (см. C_CloseSession() или C_CloseAllSessions()).По умолчанию – CK_FALSE. |
CKA_PRIVATE | CK_BBOOL | CK_TRUE – объект является секретным.CK_FALSE – объект является открытым.По умолчанию – специфическое для конкретного носителя 9. |
CKA_MODIFIABLE | CK_BBOOL | CK_TRUE – объект можно изменить.По умолчанию – CK_TRUE. |
CKA_LABEL | RFC2279 string (массив CK_UTF8CHAR) | Описание объекта. По умолчанию – пусто. |
CKA_COPYABLE | CK_BBOOL | CK_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_APPLICATION | RFC2279 string (массив CK_UTF8CHAR) | Описание приложения, которое управляет объектом. По умолчанию – пусто. |
CKA_OBJECT_ID | Byte Array (массив CK_BYTE) | Идентификатор типа данных объекта в DER-формате. По умолчанию – пусто. |
CKA_VALUE | Byte Array (массив CK_BYTE) | Значение объекта. По умолчанию – пусто. |
CKA_COMPRESSED | CK_BBOOL | CK_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_TYPE1 | CK_CERTIFICATE_TYPE | Тип сертификата. |
CKA_TRUSTED10 | CK_BBOOL | CK_TRUE – сертификат является доверенным для приложения, создавшего его. |
CKA_CERTIFICATE_CATEGORY | CK_ULONG | Категория сертификата: * 0 – не указано; * 1 – пользователь носителя; * 2 – удостоверяющий центр; * 3 – иное лицо. По умолчанию – 0. |
CKA_CHECK_VALUE | Byte Array (массив CK_BYTE) | Контрольная сумма. |
CKA_START_DATE | CK_DATE | Начальная дата сертификата. По умолчанию – пусто. |
CKA_END_DATE | CK_DATE | Конечная дата сертификата. По умолчанию – пусто. |
CKA_COMPRESSED | CK_BBOOL | CK_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»Объекты сертификата X.509 содержат сертификаты открытых ключей X.509.
Тип сертификата (CKA_CERTIFICATE_TYPE) равен CKC_X_509.
Таблица ниже описывает атрибуты объектов сертификатов открытых ключей, в дополнение к общим атрибутам класса.
| Атрибут | Тип данных | Значение |
|---|---|---|
CKA_SUBJECT1 | Byte Array (массив CK_BYTE) | Имя субъекта сертификата в DER формате. |
CKA_ID | Byte Array (массив CK_BYTE) | Идентификатор для ключевой пары. По умолчанию – пусто. |
CKA_ISSUER | Byte Array (массив CK_BYTE) | Имя издателя сертификата в DER формате. По умолчанию – пусто. |
CKA_SERIAL_NUMBER | Byte Array (массив CK_BYTE) | Серийный номер сертификата в DER формате. По умолчанию – пусто. |
CKA_VALUE2 | Byte Array (массив CK_BYTE) | Тело сертификата в BER формате. |
CKA_URL3 | RFC2279 string (массив CK_UTF8CHAR) | URL, где можно получить полный сертификат. По умолчанию – пусто. |
CKA_HASH_OF_SUBJECT_PUBLIC_KEY4 | Byte Array (массив CK_BYTE) | Хэш SHA-1 открытого ключа субъекта. По умолчанию – пусто. |
CKA_HASH_OF_ISSUER_PUBLIC_KEY4 | Byte Array (массив CK_BYTE) | Хэш SHA-1 открытого ключа издателя. По умолчанию – пусто. |
CKA_JAVA_MIDP_SECURITY_DOMAIN | CK_ULONG | Домен безопасности Java MIDP: * 0 – не указано; * 1 – пользователь; * 2 – оператор; * 3 – третье лицо. По умолчанию – 0. |
CKA_NAME_HASH_ALGORITHM | CK_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»Объекты сертификата атрибутов X.509 содержат сертификаты атрибутов X.509.
Тип сертификата (CKA_CERTIFICATE_TYPE) равен CKC_X_509_ATTR_CERT.
Таблица ниже описывает атрибуты объектов сертификатов атрибутов X.509, в дополнение к общим атрибутам класса.
| Атрибут | Тип данных | Значение |
|---|---|---|
CKA_OWNER1 | Byte Array (массив CK_BYTE) | Поле субъекта сертификата атрибутов в DER формате. Значение отличается от CKA_SUBJECT, из в сертификата CKC_X_509, синтаксисом ASN.1 и кодировкой. |
CKA_AC_ISSUER | Byte Array (массив CK_BYTE) | Поле издателя сертификата атрибутов в DER формате. Значение отличается от CKA_ISSUER, из в сертификата CKC_X_509, синтаксисом ASN.1 и кодировкой.По умолчанию – пусто. |
CKA_SERIAL_NUMBER | Byte Array (массив CK_BYTE) | Серийный номер сертификата в DER формате. По умолчанию – пусто. |
CKA_ATTR_TYPES | Byte Array (массив CK_BYTE) | Последовательность значений идентификаторов объектов, соответствующим типам атрибутов сертификата, в BER формате. При помощи этого поля можно искать заданный атрибут сертификата без его извлечения и разбора. По умолчанию – пусто. |
CKA_VALUE1 | Byte 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,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. |
Примечания к атрибутам объектов ключей:
| Атрибут | Примечание |
|---|---|
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_SUBJECT8 | Byte Array (массив CK_BYTE) | Имя субъекта сертификата в DER формате. По умолчанию – пусто. |
CKA_ENCRYPT8 | CK_BBOOL | CK_TRUE – ключ поддерживает шифрование.По умолчанию – специфическое для конкретного носителя 9. |
CKA_VERIFY8 | CK_BBOOL | CK_TRUE – ключ поддерживает верификацию, когда подпись является приложением к данным.По умолчанию – специфическое для конкретного носителя 9. |
CKA_VERIFY_RECOVER8 | CK_BBOOL | CK_TRUE – ключ поддерживает верификацию, когда данные восстанавливаются из подписи.По умолчанию – специфическое для конкретного носителя 9. |
CKA_WRAP8 | CK_BBOOL | CK_TRUE – ключ может использоваться для экспорта других ключей.По умолчанию – специфическое для конкретного носителя 9. |
CKA_TRUSTED10 | CK_BBOOL | CK_TRUE – ключ является доверенным для приложения, которое его создало. Экспортный ключ может использоваться для экспорта ключей, у которых атрибут CKA_WRAP_WITH_TRUSTED равен CK_TRUE. |
CKA_WRAP_TEMPLATE | CK_ATTRIBUTE_PTR | Для экспортных ключей. Шаблон атрибутов ключа для экспорта. Ключи, совпадающие с шаблоном, могут экспортироваться при помощи данного ключа. Количество атрибутов в массиве – параметр ulValueLen атрибута, разделенный на размер CK_ATTRIBUTE. |
В интересах совместимости предусмотрено, что имя субъекта и идентификатор ключа для открытого ключа будут совпадать с такими же показателями соответствующего сертификата и секретного ключа. Однако Cryptoki не настаивает на такой привязке, и не требуется, чтобы сертификат и закрытый ключ также хранились на носителе. Для того, чтобы установить соответствие между флагами ISO/IEC 9594-8 (X.509) keyUsage для открытых ключей и атрибутами PKCS #11 для открытых ключей, необходимо воспользоваться таблицей ниже.
| Флаги использования ключа для открытых ключей в сертификатах открытых ключей X.509 | Соответствующие атрибуты Cryptoki для открытых ключей |
|---|---|
| dataEncipherment | CKA_ENCRYPT |
| digitalSignature, keyCertSign, cRLSign | CKA_VERIFY |
| digitalSignature, keyCertSign, cRLSign | CKA_VERIFY_RECOVER |
| keyAgreement | CKA_DERIVE |
| keyEncipherment | CKA_WRAP |
| nonRepudiation | CKA_VERIFY |
| nonRepudiation | CKA_VERIFY_RECOVER |
Открытые ключи RSA
Заголовок раздела «Открытые ключи RSA»Объекты открытых ключей RSA содержат открытые ключи RSA.
Тип ключа (CKA_KEY_TYPE) равен CKK_RSA.
Ключи RSA поддерживаются приложением PKI.
Таблица ниже описывает атрибуты объектов открытых ключей RSA, в дополнение к общим атрибутам открытых ключей.
| Атрибут | Тип данных | Значение |
|---|---|---|
CKA_MODULUS1,4 | Big integer (массив CK_BYTE) | Модуль n. |
CKA_MODULUS_BITS2,3 | CK_ULONG | Длина модуля n в байтах. |
CKA_PUBLIC_EXPONENT1 | Big 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»Объекты открытых ключей ГОСТ Р 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 | Byte 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,3 | Byte array (массив CK_BYTE) | Идентификатор типа объекта данных ГОСТ Р 34.10–2001 в DER формате. Когда ключ используется, у объекта параметров домена с типом CKK_GOSTR3410 должен быть указан тот же атрибут CKA_OBJECT_ID.Доступные значения описаны в разделе Значения CKA_GOSTR3410_PARAMS. |
CKA_GOSTR3411_PARAMS1,3,8 | Byte array (массив CK_BYTE) | Идентификатор типа объекта данных ГОСТ Р 34.10–2001 / ГОСТ Р 34.10–2012 в DER формате. Когда ключ используется, у объекта параметров домена с типом CKK_GOSTR3411 должен быть указан тот же атрибут CKA_OBJECT_ID.Доступные значения описаны в разделе Значения CKA_GOSTR3411_PARAMS. |
CKA_GOST28147_PARAMS8 | Byte 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)}};Открытые ключи ECC
Заголовок раздела «Открытые ключи ECC»Ключи на эллиптических кривых поддерживаются приложением 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,4 | Big 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_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_PRIVATE_KEY.
Таблица ниже описывает атрибуты объектов закрытых ключей, в дополнение к общим атрибутам ключей.
| Атрибут | Тип данных | Значение |
|---|---|---|
CKA_SUBJECT8 | Byte Array (массив CK_BYTE) | Имя субъекта сертификата в DER формате. |
CKA_SENSITIVE8,11 | CK_BBOOL | CK_TRUE – ключ является чувствительным, т.е. нельзя извлечь из токена в открытом виде.По умолчанию – специфическое для конкретного носителя 9. |
CKA_DECRYPT8 | CK_BBOOL | CK_TRUE – ключ поддерживает расшифрование.По умолчанию – специфическое для конкретного носителя 9. |
CKA_SIGN8 | CK_BBOOL | CK_TRUE – ключ поддерживает подпись данных. Подпись является приложением к данным.По умолчанию – специфическое для конкретного носителя 9. |
CKA_SIGN_RECOVER8 | CK_BBOOL | CK_TRUE – ключ поддерживает подпись данных. Данные могут быть восстановлены из подписи.По умолчанию – специфическое для конкретного носителя 9. |
CKA_UNWRAP8 | CK_BBOOL | CK_TRUE – ключ может использоваться для импорта других ключей.По умолчанию – специфическое для конкретного носителя 9. |
CKA_EXTRACTABLE8 | 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_WRAP_WITH_TRUSTED11 | CK_BBOOL | CK_TRUE – ключ может экспортироваться только при помощи экспортного ключа, у которого атрибут CKA_TRUSTED равен CK_TRUE.По умолчанию – CK_FALSE. |
CKA_UNWRAP_TEMPLATE | CK_ATTRIBUTE_PTR | Для экспортных ключей. Шаблон атрибутов ключа для импорта. Ключи, совпадающие с шаблоном, могут импортироваться при помощи данного ключа. Количество атрибутов в массиве – параметр ulValueLen атрибута, разделенный на размер CK_ATTRIBUTE. |
CKA_ALWAYS_AUTHENTICATE | CK_BBOOL | CK_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»Объекты закрытых ключей RSA содержат закрытые ключи RSA.
Тип ключа (CKA_KEY_TYPE) равен CKK_RSA.
Ключи RSA поддерживаются приложением PKI:
Таблица ниже описывает атрибуты объектов закрытых ключей RSA, в дополнение к общим атрибутам закрытых ключей.
| Атрибут | Тип данных | Значение |
|---|---|---|
CKA_MODULUS1,4,6 | Big integer (массив CK_BYTE) | Модуль n. |
CKA_PUBLIC_EXPONENT4,6 | Big integer (массив CK_BYTE) | Открытая экспонента e. |
CKA_PRIVATE_EXPONENT1,4,6,7 | Big integer (массив CK_BYTE) | Закрытая экспонента d. |
CKA_PRIME_14,6,7 | Big integer (массив CK_BYTE) | Простое число p. |
CKA_PRIME_24,6,7 | Big integer (массив CK_BYTE) | Простое число q. |
CKA_EXPONENT_14,6,7 | Big integer (массив CK_BYTE) | Закрытая экспонента d по модулю p-1 |
CKA_EXPONENT_24,6,7 | Big integer (массив CK_BYTE) | Закрытая экспонента d по модулю q-1 |
CKA_COEFFICIENT4,6,7 | Big 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»Объекты закрытых ключей ГОСТ Р 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,7 | Byte array (массив CK_BYTE) | Закрытый ключ длиной: * 32 байта – для ГОСТ Р 34.10–2001 и ГОСТ Р 34.10–2012 (длина ключа 256 бит); * 64 байта – для ГОСТ Р 34.10–2012 (длина ключа 512 бит). Порядок байтов – от младшего к старшему (little endian). |
CKA_GOSTR3410_PARAMS1,4,6 | Byte array (массив CK_BYTE) | Идентификатор типа объекта данных ГОСТ Р 34.10–2001 в DER формате. Когда ключ используется, у объекта параметров домена с типом CKK_GOSTR3410 должен быть указан тот же атрибут CKA_OBJECT_ID.Доступные значения описаны в разделе Значения CKA_GOSTR3410_PARAMS. |
CKA_GOSTR3411_PARAMS1,4,6,8 | Byte array (массив CK_BYTE) | Идентификатор типа объекта данных ГОСТ Р 34.10–2001 / ГОСТ Р 34.10–2012 в DER формате. Когда ключ используется, у объекта параметров домена с типом CKK_GOSTR3411 должен быть указан тот же атрибут CKA_OBJECT_ID.Доступные значения описаны в разделе Значения CKA_GOSTR3411_PARAMS. |
CKA_GOST28147_PARAMS4,6,8 | Byte 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)}};Закрытые ключи ECC
Заголовок раздела «Закрытые ключи ECC»Ключи на эллиптических кривых поддерживаются приложением 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,7 | Big 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,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 | 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. |
Если атрибут 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) байтов, с использованием шифра по умолчанию и режима (например, электронной кодовой книги), связанного с типом ключа объекта секретного ключа.

