Атрибут CKA_TOKEN
определяет расположение и длительность хранения объекта. Возможные значения:
CK_TRUE
– объект хранится только в памяти устройства и не удаляется после завершения сеанса;CK_FALSE
(либо не задан) – объект хранится в оперативной памяти и может использоваться только в
промежуток времени с момента его создания и до закрытия сеанса (см. C_CloseSession()
и
C_CloseAllSessions()
).Криптотокен | ||
---|---|---|
Объект | TRUE |
FALSE |
CKO_PUBLIC_KEY |
V | – |
CKO_PRIVATE_KEY |
V | – |
CKO_SECRET_KEY (ключ согласования) |
V | V |
CKO_SECRET_KEY |
– | V |
CKO_CERTIFICATE |
V | V |
CKO_DATA |
V | V |
Примечание
Создание объектов с помощью апплета Криптотокен должно производиться в режиме пользователя.
CKO_PRIVATE_KEY
¶CKA_TOKEN = CK_TRUE |
CKA_TOKEN = CK_FALSE |
|
---|---|---|
C_GenerateKeyPair() |
V | X |
Имя атрибута | Значение атрибута |
---|---|
CKA_CLASS |
CKO_PRIVATE_KEY |
CKA_PRIVATE |
CK_TRUE |
CKA_TOKEN |
CK_TRUE |
CKA_UNWRAP |
CK_FALSE |
CKA_SIGN |
CK_TRUE |
CKA_EXTRACTABLE |
CK_FALSE |
CKA_NEVER_EXTRACTABLE |
CK_TRUE |
CKA_ALWAYS_SENSITIVE |
CK_TRUE |
CKA_MODIFIABLE |
CK_FALSE |
CKA_SENSITIVE |
CK_TRUE |
CKA_VALUE_LEN |
32 |
Если значение хотя бы одного из атрибутов отличается от указанных в таблице выше, то функция возвращает
CKR_ATTRIBUTE_READ_ONLY
.
CKO_PUBLIC_KEY
¶CKA_TOKEN = CK_TRUE |
CKA_TOKEN = CK_FALSE |
|
---|---|---|
C_CreateObject() |
V | X |
C_GenerateKeyPair() |
V | X |
Имя атрибута | Значение атрибута |
---|---|
CKA_CLASS |
CKO_PUBLIC_KEY |
CKA_PRIVATE |
CK_FALSE |
CKA_TOKEN |
CK_TRUE |
CKA_GOSTR3410_PARAMS |
см. Возможные значения атрибута CKA_GOSTR3410_PARAMS |
Если значение хотя бы одного из атрибутов отличается от указанных в таблице выше, то функция возвращает
CKR_ATTRIBUTE_READ_ONLY
.
CKO_SECRET_KEY
¶Ключ | CKA_TOKEN = CK_TRUE |
CKA_TOKEN = CK_FALSE |
|
---|---|---|---|
C_CreateObject() |
Сеансовый секретный | Возвращает CKR_ATTRIBUTE_VALUE_INVALID |
V |
C_GenerateKey() |
Сеансовый секретный | X | V |
C_DeriveKey() |
Согласования | V | V |
C_UnwrapKey() |
Сеансовый секретный | X | V |
Создание объекта секретного ключа в памяти токена (атрибут CKA_TOKEN
= CK_TRUE
) не предусмотрено.
Имя атрибута | Значение атрибута |
---|---|
CKA_CLASS |
CKO_SECRET_KEY |
CKA_PRIVATE |
CK_TRUE |
CKA_TOKEN |
CK_TRUE |
Если хотя бы один из заданных аргументами функции атрибутов принимает значение, отличное от приведённых
в таблице, будет выдаваться ошибка CKR_ATTRIBUTE_READ_ONLY
.
Для создания секретного ключа также необходимо указать CKA_VALUE
, который должен быть представлен в формате от
младшего к старшему (little endian).
C_CreateObject
¶С помощью функции C_CreateObject()
может быть создан сеансовый секретный ключ,
(атрибут CK_TOKEN
= CK_FALSE
) который хранится только в рамках текущего сеанса, до момента выхода из режима
пользователя или отключения устройства.
В шаблон создания такого объекта необходимо добавить атрибут CKA_GOST28147_PARAMS
. Значение атрибута представляет
собой массив байт, определяющий параметры функции шифрования, соответствующей ГОСТ 28147-89. Возможные значения смотри
в таблице.
Объект должен создаваться в режиме пользователя.
C_GenerateKey
¶Для выработки сеансового секретного ключа с помощью функции C_GenerateKey()
используется набор параметров, который
определяется структурой формата CK_GOSTR3410_DERIVE_PARAMS
.
CKO_CERTIFICATE
¶CKA_TOKEN = CK_TRUE |
CKA_TOKEN = CK_FALSE |
|
---|---|---|
C_CreateObject() |
V | V |
Рекомендуемый набор атрибутов:
CKA_CLASS
;CKA_TOKEN
;CKA_LABEL
;CKA_SERIAL_NUMBER
.Атрибут | Значение |
---|---|
CKA_CLASS |
(CK_OBJECT_CLASS)CKO_CERTIFICATE |
CKA_TOKEN |
(CK_BBOOL)CK_TRUE |
CKA_PRIVATE |
(CK_BBOOL)CK_FALSE |
CKA_LABEL |
std::vector <CK_BYTE>(0) |
CKA_TRUSTED |
(CK_BBOOL)CK_FALSE |
CKA_SUBJECT |
std::vector <CK_BYTE>(0) |
CKA_ID |
std::vector <CK_BYTE>(0) |
CKA_SERIAL_NUMBER |
std::vector <CK_BYTE>(0) |
CKA_MODIFIABLE |
(CK_BBOOL)CK_TRUE |
CKA_COMPRESSED * |
(CK_BBOOL)CK_FALSE |
Примечание
Привязка ключевой пары к сертификату происходит через атрибут CKA_ID
.
CKO_DATA
¶CKA_TOKEN = CK_TRUE |
CKA_TOKEN = CK_FALSE |
|
---|---|---|
C_CreateObject() |
V | V |
Рекомендуемый набор атрибутов:
CKA_CLASS
;CKA_TOKEN
;CKA_LABEL
;CKA_VALUE
.Атрибут | Значение |
---|---|
CKA_COMPRESSED * |
(CK_BBOOL)CK_FALSE |
Компрессия данных реализована через атрибут CKA_COMPRESSED
. Атрибут принимает значения CK_TRUE
и CK_FALSE
для включения и отключения компрессии соответственно.
По умолчанию атрибут установлен в значение CK_FALSE
и присутствует во всех объектах типов CKO_CERTIFICATE
и CKO_DATA
. Компрессии подвергается аттрибут``CKA_VALUE``. Значение аттрибута присваивается при создании объекта и не
изменяется впоследствии.
Компрессия поддерживается апплетом Криптотокен и предусмотрена в следующих функциях:
CKA_GOST28147_PARAMS
и CKA_GOSTR3410_PARAMS
¶Наименование параметров | Содержание массива |
---|---|
id-Gost28147-89-TestParamSet |
0x06, 0x07, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x1f, 0x00 |
id-Gost28147-89-CryptoPro-A-ParamSet |
0x06, 0x07, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x1f, 0x01 |
id-Gost28147-89-CryptoPro-B-ParamSet |
0x06, 0x07, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x1f, 0x02 |
id-Gost28147-89-CryptoPro-C-ParamSet |
0x06, 0x07, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x1f, 0x03 |
id-Gost28147-89-CryptoPro-D-ParamSet |
0x06, 0x07, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x1f, 0x04 |
В RFC 4357 данный набор параметров
отсутствует. Он аналогичен набору
id-Gost28147-89-CryptoPro-A-ParamSet ,
но предполагает использование режима
гаммирования без обратной связи
(имеющего в RFC 5830 наименование CNT). |
0x06, 0x07, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x1f, 0x65 |
Тип параметров эллиптических кривых | Содержание массива |
---|---|
id-GostR3410-2001-CryptoPro-A-ParamSet |
0x06, 0x07, 0x2A, 0x85, 0x03, 0x02, 0x02, 0x23, 0x01 |
id-GostR3410-2001-CryptoPro-B-ParamSet |
0x06, 0x07, 0x2A, 0x85, 0x03, 0x02, 0x02, 0x23, 0x02 |
id-GostR3410-2001-CryptoPro-C-ParamSet |
0x06, 0x07, 0x2A, 0x85, 0x03, 0x02, 0x02, 0x23, 0x03 |
id-GostR3410-2001-CryptoPro-XchA-ParamSet |
0x06, 0x07, 0x2A, 0x85, 0x03, 0x02, 0x02, 0x24, 0x00 |
id-GostR3410-2001-CryptoPro-XchB-ParamSet |
0x06, 0x07, 0x2A, 0x85, 0x03, 0x02, 0x02, 0x24, 0x01 |
CKR_OK
(0x00000000
) – функция выполнена успешно.CKR_CANCEL
(0x00000001
) – операция была отменена.CKR_HOST_MEMORY
(0x00000002
) – компьютер, на котором запущена библиотека, не имеет достаточно памяти для
выполнения функции.CKR_SLOT_ID_INVALID
(0x00000003
) – недопустимый идентификатор слота.CKR_GENERAL_ERROR
(0x00000005
) – общий сбой при работе с библиотекой.CKR_FUNCTION_FAILED
(0x00000006
) – выполнение функции было прервано или она не может быть выполнена.CKR_ARGUMENTS_BAD
(0x00000007
) – недопустимые аргументы.CKR_NO_EVENT
(0x00000008
) – возвращается, если C_WaitForSlotEvent
вызван в режиме без блокировки и новых
событий слота нет.CKR_CANT_LOCK
(0x0000000A
) – невозможно использовать разделение ресурсов.CKR_ATTRIBUTE_READ_ONLY
(0x00000010
) – невозможно установить значение атрибута, т.к. он поддерживает только
чтение.CKR_ATTRIBUTE_SENSITIVE
(0x00000011
) – запрашиваемый атрибут недоступен для чтения.CKR_ATTRIBUTE_TYPE_INVALID
(0x00000012
) – недопустимый тип атрибута.CKR_DEVICE_ERROR
(0x00000030
) – возникла проблема с токеном и/или слотом.CKR_DEVICE_MEMORY
(0x00000031
) – памяти токена недостаточно для данной операции.CKR_DEVICE_REMOVED
(0x00000032
) – токен был изъят из слота.CKR_ENCRYPTED_DATA_LEN_RANGE
(0x00000041
) – недопустимый размер зашифрованных данных.CKR_FUNCTION_NOT_SUPPORTED
(0x00000054
) – вызванная функция не поддерживается библиотекой Cryptoki.CKR_KEY_HANDLE_INVALID
(0x00000060
) – недопустимый дескриптор ключа.CKR_KEY_SIZE_RANGE
(0x00000062
) – размер ключа лежит за пределами, поддерживаемыми библиотекой Cryptoki.CKR_KEY_TYPE_INCONSISTENT
(0x00000063
) – данный ключ невозможно использовать с указанным механизмом.CKR_KEY_FUNCTION_NOT_PERMITTED
(0x00000068
) – атрибуты ключа не позволяют его использование данным образом.CKR_KEY_NOT_WRAPPABLE
(0x00000069
) – библиотека Cryptoki не может экспортировать данный ключ.CKR_MECHANISM_INVALID
(0x00000070
) – недопустимый механизм.CKR_MECHANISM_PARAM_INVALID
(0x00000071
) – недопустимый параметр механизма.CKR_OBJECT_HANDLE_INVALID
(0x00000082
) – недопустимый дескриптор объекта.CKR_OPERATION_ACTIVE
(0x00000090
) – на устройстве уже есть активная операция, что не позволяет начать
новую операцию.CKR_OPERATION_NOT_INITIALIZED
(0x00000091
) – в указанном сеансе нет активной операции данного типа.CKR_PIN_INCORRECT
(0x000000A0
) – неверный PIN-код.CKR_PIN_INVALID
(0x000000A1
) – недопустимый PIN-код.CKR_PIN_LEN_RANGE
(0x000000A2
) – недопустимый размер PIN-кода.CKR_PIN_LOCKED
(0x000000A4
) – указанный PIN-код заблокирован и не может быть использован.CKR_SESSION_CLOSED
(0x000000B0
) – сеанс был закрыт в момент выполнения функции.CKR_SESSION_COUNT
(0x000000B1
) – открыто слишком большое количество сеансов.CKR_SESSION_HANDLE_INVALID
(0x000000B3
) – недопустимый дескриптор сеанса.CKR_SESSION_PARALLEL_NOT_SUPPORTED
(0x000000B4
) – данный токен не поддерживает параллельные сеансы.CKR_SESSION_EXISTS
(0x000000B6
) – сеанс с данным токеном уже существует, следовательно токен не может быть
инициализирован.CKR_SESSION_READ_ONLY_EXISTS
(0x000000B7
) – сеанс на чтение уже открыт и администратор не может быть
залогинен.CKR_SESSION_READ_WRITE_SO_EXISTS
(0x000000B8
) – сеанс чтения/записи уже открыт, администратор не имеет
возможности залогиниться.CKR_SIGNATURE_INVALID
(0x000000C0
) – недопустимая подпись.CKR_SIGNATURE_LEN_RANGE
(0x000000C1
) – недопустимый размер подписи.CKR_TEMPLATE_INCOMPLETE
(0x000000D0
) – шаблон, указанный для создания объекта, неполон.CKR_TEMPLATE_INCONSISTENT
(0x000000D1
) – шаблон, указанный для создания объекта, содержит конфликтующие
атрибуты.CKR_TOKEN_NOT_PRESENT
(0x000000E0
) – в слоте отсутствует токен.CKR_TOKEN_NOT_RECOGNIZED
(0x000000E1
) – токен не поддерживается.CKR_TOKEN_WRITE_PROTECTED
(0x000000E2
) – данный токен защищен от записи.CKR_USER_ALREADY_LOGGED_IN
(0x00000100
) – пользователь уже залогинен.CKR_USER_NOT_LOGGED_IN
(0x00000101
) – действие не может быть выполнено, т.к. пользователь не залогинен.CKR_USER_PIN_NOT_INITIALIZED
(0x00000102
) – PIN-код пользователя не инициализирован (см. C_InitPIN()
).CKR_USER_TYPE_INVALID
(0x00000103
) – недопустимый тип пользователя.CKR_USER_ANOTHER_ALREADY_LOGGED_IN
(0x00000104
) – указанный пользователь не может быть залогинен в данном
сеансе, так как другой пользователь уже залогинен в нем.CKR_BUFFER_TOO_SMALL
(0x00000150
) – вывод функции слишком велик для предоставленного буфера.CKR_INFORMATION_SENSITIVE
(0x00000170
) – запрашиваемый объект недоступен для чтения.CKR_CRYPTOKI_NOT_INITIALIZED
(0x00000190
) – функция не может быть выполнена, т.к. библиотека Cryptoki еще не
была инициализированна (см. C_Initialize()
).CKR_CRYPTOKI_ALREADY_INITIALIZED
(0x00000191
) – библиотека Cryptoki уже была инициализированна вызовом
C_Initialize()
и не была закрыта соответствующим вызовом C_Finalize()
.CKR_FUNCTION_REJECTED
(0x00000200
) – запрос на подпись отклонен пользователем.Список поддерживаемых механизмов и их идентификаторов для библиотеки PKCS#11.
Совет
Отдельный список поддерживаемых механизмов для каждой конкретной функции доступен в ее описании.
Для апплета Криптотокен поддерживаются следующие механизмы шифрования:
CKM_GOSTR3410
– 0x00001201
;CKM_GOSTR3410_KEY_PAIR_GEN
– 0x00001200
;CKM_GOSTR3410_WITH_GOSTR3411
– 0x00001202
;CKM_GOSTR3410_DERIVE
– 0x00001204
;CKM_GOSTR3411
– 0x00001210
;CKM_GOST28147
– 0x00001222
;CKM_GOST28147_ECB
– 0x00001221
;CKM_GOST28147_KEY_WRAP
– 0x00001224
;CKM_GOST28147_KEY_GEN
– 0x00001220
;CKM_TLS_GOST_MASTER_KEY_DERIVE
– (NSSCK_VENDOR_PKSC11_RU_TEAM|0x101)
;CKM_TLS_GOST_KEY_AND_MAC_DERIVE
– (NSSCK_VENDOR_PKSC11_RU_TEAM|0x102)
;CKM_TLS_GOST_PRF
– (NSSCK_VENDOR_PKSC11_RU_TEAM|0x103)
;CKM_TLS_GOST_PRE_MASTER_KEY_GEN
– (NSSCK_VENDOR_PKSC11_RU_TEAM|0x104)
.