Атрибут CKA_TOKEN
определяет расположение и длительность хранения объекта. Возможные значения:
CK_TRUE
– объект хранится только в памяти устройства и не удаляется после завершения сеанса,CK_FALSE
(либо не задан) – объект хранится в оперативной памяти и может использоваться только в
промежуток времени с момента его создания и до закрытия сеанса (см. C_CloseSession()
и
C_CloseAllSessions()
).Криптотокен | Laser | Datastore | ||||
---|---|---|---|---|---|---|
Объект | TRUE |
FALSE |
TRUE |
FALSE |
TRUE |
FALSE |
CKO_PUBLIC_KEY |
V | – | V | V | – | – |
CKO_PRIVATE_KEY |
V | – | V | – | – | – |
CKO_SECRET_KEY (ключ согласования) |
V | V | V | – | – | – |
CKO_SECRET_KEY |
– | V | V | – | – | – |
CKO_CERTIFICATE |
V | V | V | – | V | V |
CKO_DATA |
V | V | V | V | 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 |
Примечание
Создание объектов с помощью апплета Laser должно производиться в режиме пользователя.
CKO_PRIVATE_KEY
¶CKA_TOKEN = CK_TRUE |
CKA_TOKEN = CK_FALSE |
|
---|---|---|
C_CreateObject() |
V | X |
C_GenerateKeyPair() |
V | X |
Рекомендуемый набор атрибутов:
CKA_MODULUS
,CKA_PRIVATE_EXPONENT
,CKA_PRIME_1
,CKA_PRIME_2
.Атрибут | Значение |
---|---|
CKA_CLASS |
(CK_OBJECT_CLASS)CKO_PRIVATE_KEY |
CKA_TOKEN |
(CK_BBOOL)CK_TRUE |
CKA_PRIVATE |
(CK_BBOOL)CK_TRUE |
CKA_LABEL |
std::vector <CK_BYTE>(0) |
CKA_KEY_TYPE |
(CK_KEY_TYPE)CKK_RSA |
CKA_SUBJECT |
std::vector <CK_BYTE>(0) |
CKA_ID |
std::vector <CK_BYTE>(0) |
CKA_SENSITIVE |
(CK_BBOOL)CK_TRUE |
CKA_DECRYPT |
(CK_BBOOL)CK_FALSE |
CKA_UNWRAP |
(CK_BBOOL)CK_FALSE |
CKA_SIGN |
(CK_BBOOL)CK_FALSE |
CKA_SIGN_RECOVER |
(CK_BBOOL)CK_FALSE |
CKA_DERIVE |
(CK_BBOOL)CK_FALSE |
CKA_START_DATE |
std::vector <CK_BYTE>(0) |
CKA_END_DATE |
std::vector <CK_BYTE>(0) |
CKA_EXTRACTABLE |
(CK_BBOOL)CK_TRUE |
CKA_LOCAL |
(CK_BBOOL)CK_FALSE |
CKA_NEVER_EXTRACTABLE |
(CK_BBOOL)CK_FALSE |
CKA_ALWAYS_SENSITIVE |
(CK_BBOOL)CK_FALSE |
CKA_KEY_GEN_MECHANISM |
(CK_ULONG)CKK_INVALID_KEY_TYPE |
CKA_MODIFIABLE |
(CK_BBOOL)CK_TRUE |
Примечание
Привязка ключевой пары к сертификату происходит через атрибут CKA_ID
.
CKO_PUBLIC_KEY
¶CKA_TOKEN = CK_TRUE |
CKA_TOKEN = CK_FALSE |
|
---|---|---|
C_CreateObject() |
V | V |
C_GenerateKeyPair() |
V | V |
Рекомендуемый набор атрибутов:
CKA_CLASS
,CKO_PUBLIC_KEY
,CKA_TOKEN
,CKA_LABEL
,CKA_MODULUS_BITS
,CKA_KEY_TYPE
,CKA_VERIFY
.Атрибут | Значение |
---|---|
CKA_CLASS |
(CK_OBJECT_CLASS)CKO_PUBLIC_KEY |
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_KEY_TYPE |
(CK_KEY_TYPE)CKK_RSA |
CKA_SUBJECT |
std::vector <CK_BYTE>(0) |
CKA_ENCRYPT |
(CK_BBOOL)CK_FALSE |
CKA_WRAP |
(CK_BBOOL)CK_FALSE |
CKA_VERIFY |
(CK_BBOOL)CK_FALSE |
CKA_VERIFY_RECOVER |
(CK_BBOOL)CK_FALSE |
CKA_DERIVE |
(CK_BBOOL)CK_FALSE |
CKA_START_DATE |
std::vector <CK_BYTE>(0) |
CKA_END_DATE |
std::vector <CK_BYTE>(0) |
CKA_MODULUS_BITS |
(CK_ULONG)1024 |
CKA_LOCAL |
(CK_BBOOL)CK_TRUE |
CKA_KEY_GEN_MECHANISM |
(CK_ULONG)0 |
Примечание
Атрибут CKA_VALUE
создаваемого ключа сохраняется в представлении от младшего к старшему (little-endian).
CKO_SECRET_KEY
¶Ключ | CKA_TOKEN = CK_TRUE |
CKA_TOKEN = CK_FALSE |
|
---|---|---|---|
C_CreateObject() |
Сеансовый секретный | ||
C_GenerateKey() |
Сеансовый секретный | ||
C_DeriveKey() |
Согласования | ||
C_UnwrapKey() |
Сеансовый секретный |
Рекомендуемый набор атрибутов:
CKA_CLASS
,CKO_SECRET_KEY
,CKA_KEY_TYPE
,CKA_VALUE
.Атрибут | Значение |
---|---|
CKA_CLASS |
(CK_OBJECT_CLASS)CKO_SECRET_KEY |
CKA_TOKEN |
(CK_BBOOL)CK_TRUE |
CKA_PRIVATE |
(CK_BBOOL)CK_TRUE |
CKA_LABEL |
std::vector <CK_BYTE>(0) |
CKA_VALUE |
std::vector <CK_BYTE>(24, 0x00) |
CKA_KEY_TYPE |
(CK_KEY_TYPE)CKK_AES |
CKA_ID |
std::vector <CK_BYTE>(0) |
CKA_SENSITIVE |
(CK_BBOOL)CK_TRUE |
CKA_DECRYPT |
(CK_BBOOL)CK_TRUE |
CKA_WRAP |
(CK_BBOOL)CK_FALSE |
CKA_UNWRAP |
(CK_BBOOL)CK_TRUE |
CKA_DERIVE |
(CK_BBOOL)CK_FALSE |
CKA_START_DATE |
std::vector <CK_BYTE>(0) |
CKA_END_DATE |
std::vector <CK_BYTE>(0) |
CKA_EXTRACTABLE |
(CK_BBOOL)CK_TRUE |
CKA_LOCAL |
(CK_BBOOL)CK_TRUE |
CKA_NEVER_EXTRACTABLE |
(CK_BBOOL)CK_FALSE |
CKA_ALWAYS_SENSITIVE |
(CK_BBOOL)CK_TRUE |
CKA_KEY_GEN_MECHANISM |
(CK_ULONG)0 |
CKA_MODIFIABLE |
(CK_BBOOL)CK_TRUE |
Примечание
Привязка ключевой пары к сертификату происходит через атрибут CKA_ID
.
Примечание
Атрибут CKA_VALUE
создаваемого ключа сохраняется в представлении от младшего к старшему (little-endian).
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 |
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``. Значение аттрибута присваивается при создании объекта и не
изменяется впоследствии.
Компрессия поддерживается апплетами Криптотокен, Laser и Datastore и предусмотрена в следующих функциях:
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)
.CKM_RSA_PKCS_KEY_PAIR_GEN
– 0x00000000
,CKM_RSA_PKCS
– 0x00000001
,CKM_SHA1_RSA_PKCS
– 0x00000006
,CKM_RSA_PKCS_OAEP
– 0x00000009
,CKM_SHA256_RSA_PKCS
– 0x00000040
,CKM_DES2_KEY_GEN
– 0x00000130
,CKM_DES3_KEY_GEN
– 0x00000131
,CKM_DES3_ECB
– 0x00000132
,CKM_DES3_CBC
– 0x00000133
,CKM_DES3_MAC
– 0x00000134
,CKM_DES3_MAC_GENERAL
– 0x00000135
,CKM_MD5
– 0x00000210
,CKM_MD5_HMAC
– 0x00000211
,CKM_SHA_1
– 0x00000220
,CKM_SHA_1_HMAC
– 0x00000221
,CKM_SHA256
– 0x00000250
,CKM_SHA256_HMAC
– 0x00000251
,CKM_SHA384
– 0x00000260
,CKM_SHA384_HMAC
– 0x00000261
,CKM_SHA512
– 0x00000270
,CKM_SHA512_HMAC
– 0x00000271
,CKM_TLS_PRE_MASTER_KEY_GEN
– 0x00000374
,CKM_TLS_MASTER_KEY_DERIVE
– 0x00000375
,CKM_TLS_KEY_AND_MAC_DERIVE
– 0x00000376
,CKM_TLS_MASTER_KEY_DERIVE_DH
– 0x00000377
,CKM_TLS_PRF
– 0x00000378
,CKM_CMS_SIG
– 0x00000500
,CKM_ECDSA_KEY_PAIR_GEN
– 0x00001040
,CKM_EC_KEY_PAIR_GEN
– 0x00001040
,CKM_ECDSA
– 0x00001041
,CKM_ECDSA_SHA1
– 0x00001042
,CKM_ECDSA_SHA256
– 0x00001043
,CKM_ECDH1_DERIVE
– 0x00001050
,CKM_AES_KEY_GEN
– 0x00001080
,CKM_AES_ECB
– 0x00001081
,CKM_AES_CBC
– 0x00001082
,CKM_AES_MAC
– 0x00001083
,CKM_AES_MAC_GENERAL
– 0x00001084
.operation
функции C_jcCtrl
¶Используется функцией C_jcCtrl()
.
JC_CTRL_GET_PROPERTIES
– получение сведений об Антифрод-терминале. Выходные данные представляют собой структуру
SWYX_PROPERTIES_RESPONSE
.JC_CTRL_SWYX_START
– включение SWYX-режима. В этом режиме терминал ведёт
журнал операций, которые выполняет он сам и подключённая к нему
смарт-карта. Входные и выходные данные отсутствуют.JC_CTRL_SWYX_STOP
– выключение SWYX-режима работы терминала. Терминал прекращает вести журнал операций и
подписывает его. Выходные данные представляют собой журнал операций и следующую за ним 64-байтовую подпись.JC_CTRL_SWYX_DISPLAY
– отображение текста на экране Антифрод-терминала и запрос пользователю подтвердить или
отклонить подписание электронного документа. Входные должны представлять собой структуру
SWYX_DISPLAY_ARGUMENTS
. В случае отказа пользователя функция C_jcCtrl
возвращает код
CKR_FUNCTION_REJECTED (0x00000200)
, а в случае истечения времени ожидания –
CKR_FUNCTION_CANCELED (0x00000050)
.JC_CTRL_PERSONALIZE
– генерация собственной ключевой пары Антифрод-терминала. Входные и выходные данные
отсутствуют. В случае отказа пользователя функция C_jcCtrl
возвращает код CKR_FUNCTION_REJECTED (0x00000200)
.JC_CTRL_ENROLL
– получение открытого ключа Антифрод-терминала. Выходные данные представляют собой 64-байтовый
ключ.JC_CTRL_SWYX_GET_APPLET_SN
– серийного номера Антифрод-терминала. Выходные данные собой 8-байтовый серийный
номер.JC_CTRL_PIN_VERIFY
– запрос PIN-кода пользователя для подключённой к Антифрод-терминалу смарт-карты. Входные и
выходные данные отсутствуют. В случае отказа или бездействия пользователя в течение заданного интервала времени,
функция C_jcCtrl
возвращает код CKR_FUNCTION_REJECTED (0x00000200)
.JC_CTRL_SET_MOUNT_INFO
– установить точку монтирования для JaCarta MicroSD. В качестве аргументов использует
строку с абсолютным путем до точки монтирования JaCarta MicroSD и длину этой строки.JC_CTRL_GET_MOUNT_INFO
– получить точку монтирования для JaCarta MicroSD. В качестве аргументов использует
строку с абсолютным путем до точки монтирования JaCarta MicroSD и длину этой строки.JC_CTRL_GET_ISD_DATA
– получить идентификатор модели апплета и дату производства.JC_CTRL_ENABLE_SM
– включить шифрование APDU-команд в рамках защищенной сессии для данного апплета.JC_CTRL_DISABLE_SM
– выключить шифрование APDU-команд в рамках защищенной сессии для данного апплета.JC_CTRL_PKI_SET_COMPLEXITY
– установка параметров персонализации для аплета Laser. Принимает на вход указатель
на структуру JCCTRL_PersonalizationData
.JC_CTRL_INIT_CT1_PRNG
– инициализировать генератор псевдослучайных чисел в апплете Криптотокен. Метод выполняется
только в режиме пользователя.JC_CTRL_DO_TESTS_CT1_CT2
– выполнить внутренние тесты в апплете Криптотокен. Метод выполняется только в
режиме пользователя.JC_CTRL_PKI_GET_COMPLEXITY
– получение параметров персонализации для апплета Laser. Заполняет структуру
JCCTRL_PersonalizationData
текущими параметрами персонализации.JC_CTRL_WIPE_CARD
– очистка содержимого карты.JC_CTRL_BIOMETRIC_GET_SUPPORTED
– получение структуры JC_BIO_SUPPORT_INFO
с информацией о
поддерживаемых картой биометричесих возможностях.JC_CTRL_BIOMETRIC_GET_AUTHTYPE
– получение структуры JC_CTRL_AUTHTYPE
с информацией о поддерживаемых
картой механизмах аутентификации.JC_CTRL_BIOMETRIC_GET_ENROLLED_FINGERS_INDEXES
– получение идентификаторов зарегистрированных отпечатков
(0x01
-0x0A
) от 0 до 10 байт.JC_CTRL_BIOMETRIC_GET_PUBLIC_DATA
– получение публичной биометрической информации об отпечатки по его индексу.
Индекс задается первым байтом pData
. Результат помещается в pData
.JC_CTRL_BIOMETRIC_ENROLL_FINGER
– регистрация отпечатка на карте, pData
должен содержать указать на
структуру JC_CTRL_BIOMETRIC_ENROLL_DATA
.JC_CTRL_BIOMETRIC_DELIST_FINGER
– удаление отпечатка по индексу, первый байт pData
должен содержать индекс
отпечатка.JC_CTRL_BIOMETRIC_SET_LIBRARY
– установка пути к биометрической библиотеке. По умолчанию используется
jcBIO.dll
в текущем каталоге.Журнал операций представляет собой XML-документ, фиксированный по размеру и структуре, следующего формата:
<Object>
<VendorName>VendorName</VendorName>
<ReaderId>ReaderId</ReaderId>
<FirmwareVersion>FirmwareVersion</FirmwareVersion>
<ReaderSerialNr>ReaderSerialNr</ReaderSerialNr>
<SecureLogs>
<SecureLog id="01">SecureLog 01</SecureLog>
<SecureLog id="02">SecureLog 02</SecureLog>
<SecureLog id="03">SecureLog 03</SecureLog>
<SecureLog id="04">SecureLog 04</SecureLog>
</SecureLogs>
</Object>
В этом xml-документе:
VendorName
– производитель терминала (Aladdin R.D.);ReaderId
– модель терминала (например, JCR-770);FirmwareVersion
– версия встроенного программного обеспечения терминала
(например, 17.15.055.15.000);ReaderSerialNr
– серийный номер Антифрод-терминала в шестнадцатеричном
представлении (например, 0B52000209189243);SecureLog 01
– представленный в кодировке Base64 хэш по SHA-1 от
конкатенации всех заголовков APDU-команд, выполнявшихся в SWYX-режиме, и
двух последних байт APDU-ответов.SecureLog 02
– представленный в кодировке Base64 хэш по SHA-1 отображенных на экране терминала данных. Данные
отображаются с помощью операции JC_CTRL_SWYX_DISPLAY
. В логе последовательно учитываются только данные,
отображенные в SWYX-режиме. Хэш считается последовательно от этих данных.SecureLog 03
– представленный в кодировке Base64 хэш по SHA-1 тел всех
APDU-команд, выполненых в SWYX-режиме.SecureLog 04
– представленный в кодировке Base64 хэш по SHA-1 поля
данных последнего APDU-ответа в SWYX-режиме. Если последней операцией, выполняемой в SWYX-режиме, была
операция подписи документа, то в этом значении содержится хэш от этой подписи.