Работа с библиотекой 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 в случае, если он инициализирован с
использованием стороннего ПО.