Работа с библиотекой Cryptoki должна обязательно начинаться с ее инициализации
через функцию C_Initialize().
Сеанс работы библиотеки с устройством JaCarta устанавливается через слот, который является логическим цифровым представлением разъёма, к которому может быть подключено устройство. В каждый момент времени одному устройству может соответствовать до трех слотов (по одному на каждый апплет см. Работа с апплетами). Библиотека Cryptoki резервирует 20 слотов. При подключении нового устройства для него выделяется один из зарезервированных слотов. Библиотека Cryptoki самостоятельно отслеживает подключенные устройства и асинхронно обновляет служебную информацию о соответствующих им слотах.
Каждый объект, хранящийся на устройстве JaCarta (или в оперативной памяти ОС), имеет атрибуты, которые в совокупности задают свойства объекта. Атрибуты задают тип объекта, его видимость, его местоположение и т. д. Также стоит различать открытые и закрытые объекты (не путать с открытыми и закрытыми ключами): первые может читать любой пользователь, вторые – защищены PIN-кодом, т.е. любые действия с данным объектом требуют аутентификации пользователя (см. Режим пользователя).
Тип объекта определяется значением атрибута CKA_CLASS. Библиотека Cryptoki
поддерживает приведённые в таблице ниже шесть
соответствующих стандарту PKCS #11 типов объектов. Предусмотренные в стандарте
PKCS #11 объекты типов CKO_MECHANISM, CKO_VENDOR_DEFINED и
CKO_HW_FEATURE не поддерживаются.
| Закрытые ключи | CKO_PRIVATE_KEY |
| Открытые ключи | CKO_PUBLIC_KEY |
| Данные | CKO_DATA |
| Сертификаты | CKO_CERTIFICATE |
| Симметричные ключи | CKO_SECRET_KEY |
| Параметры криптографических функций | CKO_DOMAIN_PARAMETERS |
Примечание
В библиотеке Cryptoki поддерживаются сертификаты открытого ключа только формата X.509.
Подробнее о работе с объектами и их свойствах указано в разделе Общие сведения о работе с объектами.
При завершении работы с библиотекой Cryptoki внешнее ПО должно вызвать функцию
C_Finalize().
Набор доступных функций и возможность доступа к закрытым объектам в памяти поддерживаемого библиотекой устройства зависят от текущего режима работы. JaCarta может работать в трёх режимах:
Основным режимом работы устройства JaCarta является режим пользователя.
По умолчанию JaCarta работает в гостевом режиме, не требующем введения PIN-кода. Объекты, доступные в этом режиме, называются открытыми и являются доступными и в остальных режимах. Закрытые объекты доступны только в режиме пользователя.
Для включения режима пользователя необходимо ввести PIN-код пользователя, а для
включения режима администратора – PIN-код администратора (см. C_Login()).
Для защиты от несанкционированного доступа в JaCarta предусмотрены счётчики, регистрирующие количество последовательно введённых неверных значений PIN-кодов. При достижении максимально допустимого числа неудачных попыток ввода (до 15ти) PIN-код блокируется и соответствующий ему режим становится недоступным. PIN-код пользователя может быть разблокирован администратором.
Режим администратора используется для выполнения следующих административных функций:
Инициализация апплета предполагает удаление хранящихся в памяти объектов (повторное создание файловой системы), удаление значения PIN-кода пользователя и сохранение значения PIN-кода администратора. Для апплета Криптотокен данные ДСЧ при инициализации сохраняются.
В момент инициализации устройству присваивается метка – строковое значение, используемое для идентификации устройства.
Подробнее об инициализации см. C_InitToken().
Для работы с устройством после инициализации необходимо выполнить инициализацию PIN-кода пользователя.
Инициализация апплета не доступна при заблокированном PIN-коде администратора.
Исключение составляют модели токенов JaCarta с номером вида JCXXX v2.0.
Для этих моделей доступна инициализация апплета Laser без знания PIN-кода
администратора и/или когда он заблокирован.
Инициализация или установка PIN-кода пользователя – это назначение
администратором PIN-кода пользователя после инициализации апплета. Операция
осуществляется только в режиме администратора (см. C_InitPIN()).
PIN-код пользователя блокируется, когда превышается число допустимых попыток его ввода (до 10 или 15, в зависимости от апплета). В этом случае администратор может разблокировать PIN-код пользователя:
C_InitPIN()). При этом будет установлено новое значение PIN-кода
пользователя, а старое будет утрачено.C_Login()). При этом будет сброшен счетчик неудачных попыток ввода
PIN-кода пользователя, а его значение останется прежним.PIN-код пользователя не может быть разблокирован при заблокированном PIN-коде администратора.
Разблокирование PIN-кода администратора не доступно (см. Инициализация апплета).
В режиме пользователя доступны основные функции библиотеки, а также операции с открытыми и закрытыми объектами и с PIN-кодом пользователя.
Для работы в режиме пользователя необходимо предъявить PIN-код пользователя
(см. C_Login()). При этом PIN-код пользователя должен быть
инициализирован администратором.
В гостевом режиме доступны функции, не связанные с обращением к закрытым
объектам и выполнением криптографических преобразований. Режим гостя обычно
используется для получения общей информации об электронном ключе
(см. C_GetTokenInfo()) и для чтения открытых объектов, например,
сертификатов (см. C_GetAttributeValue()).
На данный момент библиотека поддерживают работу с апплетами Laser, Криптотокен
и Datastore. Каждому апплету соответствует один слот. Узнать, какому апплету
соответствует выбранный слот, можно по названию модели, которое
прописывается в CK_TOKEN_INFO.model (см. C_GetTokenInfo()).
Может принимать следующие значения:
eToken GOST для апплета Криптотокен,JaCarta Laser для апплета Laser,JaCarta DS для апплета Datastore.JaCarta для апплета Laser в случае, если он инициализирован с
использованием Единого клиента JaCarta.CNS для апплета Laser в случае, если он инициализирован с
использованием стороннего ПО.