Открыть сервис

Cryptographic Token Interface

Cryptographic Token Interface (PKCS #11) — это стандартизированный программный интерфейс (API) для взаимодействия с криптографическими устройствами, такими как аппаратные модули безопасности (HSM), смарт-карты, токены USB и программные криптопровайдеры. Определённый в рамках семейства стандартов Public-Key Cryptography Standards (PKCS), разработанного компанией RSA Security, интерфейс позволяет приложениям выполнять криптографические операции (генерацию ключей, шифрование, подпись, хеширование) без привязки к конкретному оборудованию или реализации. Основная цель PKCS #11 — обеспечить переносимость и совместимость между различными криптографическими устройствами и операционными системами.

История и развитие

Стандарт PKCS #11 был впервые опубликован компанией RSA Security в 1995 году как часть набора спецификаций PKCS, созданных для стимулирования развития криптографии с открытым ключом. Первая версия (v1.0) заложила базовые концепции: модель токена, слоты, сессии и объекты. В 1997 году вышла версия 2.01, которая стала широко применяться в индустрии. В 2004 году была выпущена версия 2.20, добавившая поддержку эллиптической криптографии (ECC) и расширенные механизмы аутентификации. Актуальная на 2024 год версия — 3.0 (2019 год), которая включает поддержку современных алгоритмов (например, EdDSA, X25519, SHA-3) и улучшенное управление сессиями. Развитием стандарта занимается рабочая группа OASIS PKCS 11 Technical Committee, которая с 2013 года взяла на себя поддержку спецификации.

Архитектура и модель

Основные компоненты

PKCS #11 определяет логическую модель, состоящую из нескольких уровней:

  • Слоты (Slots) — физические или логические разъёмы, в которые могут быть установлены токены. Каждый слот может содержать не более одного токена. Слоты идентифицируются по номерам (от 0 до N-1).
  • Токены (Tokens) — криптографические устройства, хранящие ключи и сертификаты, а также выполняющие операции. Токен может быть как аппаратным (смарт-карта), так и программным (виртуальный HSM). Каждый токен имеет уникальный идентификатор и может быть защищён PIN-кодом.
  • Сессии (Sessions) — логическое соединение между приложением и токеном через слот. Сессии бывают двух типов: публичные (для операций, не требующих аутентификации) и пользовательские (после ввода PIN-кода). В рамках сессии выполняются все криптографические вызовы.
  • Объекты (Objects) — единицы данных, хранящиеся на токене. Делятся на классы: ключи (секретные, открытые, закрытые), сертификаты, данные (произвольные бинарные блоки) и доменные параметры. Каждый объект имеет атрибуты (например, тип, значение, идентификатор, флаги доступа).

Типы объектов

PKCS #11 определяет строгую иерархию классов объектов:

Класс объектаОписаниеПримеры атрибутов
CKO_DATAПроизвольные данныеCKA_VALUE, CKA_LABEL
CKO_CERTIFICATEСертификаты X.509CKA_VALUE (DER-кодированный сертификат), CKA_ISSUER, CKA_SERIAL
CKO_PUBLIC_KEYОткрытые ключиCKA_MODULUS (RSA), CKA_EC_POINT (ECC), CKA_KEY_TYPE
CKO_PRIVATE_KEYЗакрытые ключиCKA_PRIVATE_EXPONENT (RSA), CKA_EC_PRIVATE_KEY (ECC)
CKO_SECRET_KEYСимметричные ключиCKA_VALUE (ключ AES), CKA_KEY_TYPE (AES, DES, 3DES)
CKO_DOMAIN_PARAMETERSПараметры криптографических схемCKA_PRIME (для DSA), CKA_SUBPRIME

Атрибуты и флаги

Каждый объект описывается набором атрибутов, которые определяют его свойства. Ключевые атрибуты включают:

  • CKA_CLASS — класс объекта (обязательный).
  • CKA_TOKEN — указывает, хранится ли объект на токене (TRUE) или в оперативной памяти сессии (FALSE).
  • CKA_PRIVATE — TRUE для объектов, доступных только после аутентификации пользователя.
  • CKA_MODIFIABLE — TRUE, если объект можно изменять после создания.
  • CKA_ENCRYPT, CKA_DECRYPT, CKA_SIGN, CKA_VERIFY — флаги, разрешающие соответствующие операции.

Основные функции и механизмы

Управление сессиями и токенами

Интерфейс предоставляет функции для инициализации и завершения работы:

  • C_Initialize — инициализация библиотеки PKCS #11.
  • C_Finalize — завершение работы с библиотекой.
  • C_GetSlotList — получение списка доступных слотов.
  • C_OpenSession — открытие сессии на указанном слоте.
  • C_Loginаутентификация пользователя (PIN-код).
  • C_Logout — завершение сессии пользователя.

Криптографические операции

PKCS #11 поддерживает широкий спектр алгоритмов, разделённых на механизмы (mechanisms). Каждый механизм имеет уникальный идентификатор (например, CKM_RSA_PKCS, CKM_AES_CBC, CKM_SHA256). Основные группы операций:

  • Шифрование/дешифрование — симметричное (AES, DES, 3DES) и асимметричное (RSA, ECC).
  • Подпись и верификацияRSA PKCS#1 v1.5, RSA-PSS, ECDSA, DSA, EdDSA.
  • ХешированиеSHA-1, SHA-256, SHA-384, SHA-512, SHA-3.
  • Генерация ключей — как симметричных (AES-256), так и асимметричных (RSA 2048, ECC P-256).
  • Генерация случайных чисел — через функцию C_GenerateRandom.

Управление объектами

Для работы с объектами используются функции:

  • C_CreateObject — создание нового объекта на токене.
  • C_DestroyObjectудаление объекта.
  • C_FindObjectsInit / C_FindObjects / C_FindObjectsFinal — поиск объектов по заданным атрибутам.
  • C_GetAttributeValueчтение атрибутов объекта.
  • C_SetAttributeValue — изменение атрибутов (если объект модифицируемый).

Применение

Аппаратные модули безопасности (HSM)

PKCS #11 является основным интерфейсом для HSM — специализированных устройств, защищающих криптографические ключи от несанкционированного доступа. HSM широко используются в банковской сфере (для обработки транзакций, хранения ключей EMV), в системах электронной подписи, в инфраструктуре открытых ключей (PKI) и в облачных сервисах (например, AWS CloudHSM, Azure Key Vault).

Смарт-карты и USB-токены

Многие смарт-карты и USB-токены (например, JaCarta, Rutoken, eToken) реализуют PKCS #11 для интеграции с операционными системами и приложениями. Это позволяет использовать их для аутентификации, хранения сертификатов и электронной подписи документов.

Программные криптопровайдеры

Существуют программные реализации PKCS #11, такие как SoftHSM (часть проекта OpenDNSSEC) или OpenSC. Они эмулируют поведение аппаратного токена, что удобно для тестирования и разработки.

Криптографические библиотеки

Многие популярные библиотеки, включая OpenSSL (через модуль pkcs11-engine), NSS (Mozilla) и GnuTLS, поддерживают PKCS #11 для работы с внешними устройствами. Это позволяет использовать HSM или смарт-карты в веб-серверах, VPN-клиентах и почтовых клиентах.

Безопасность и ограничения

Аутентификация и защита ключей

PKCS #11 требует аутентификации пользователя через PIN-код перед выполнением операций с закрытыми ключами. Однако стандарт не определяет механизмы защиты от атак по сторонним каналам (например, анализ времени выполнения или энергопотребления). Реализация таких защит оставлена на усмотрение производителя устройства.

Уязвимости

В 2010-х годах были выявлены уязвимости в некоторых реализациях PKCS #11, связанные с некорректной обработкой атрибутов объектов (например, возможность изменения флага CKA_PRIVATE для доступа к защищённым ключам). Современные версии спецификации (начиная с 2.40) включают рекомендации по предотвращению таких атак.

Совместимость

Несмотря на стандартизацию, на практике наблюдаются проблемы совместимости между разными реализациями. Это связано с тем, что производители могут по-разному интерпретировать необязательные атрибуты или добавлять проприетарные расширения. Для решения этой проблемы существуют профили совместимости, например, PKCS #11 Profile for Smart Cards.

Интересные факты

  • PKCS #11 является одним из старейших активно используемых криптографических стандартов — его возраст превышает 25 лет.
  • Название «Cryptographic Token Interface» отражает первоначальную ориентацию на аппаратные токены, хотя сейчас интерфейс применяется и для чисто программных решений.
  • В России стандарт PKCS #11 используется в сертифицированных ФСБ и ФСТЭК криптографических устройствах, таких как токены «Рутокен» и HSM «КриптоПро HSM».
  • Версия 3.0 стандарта добавила поддержку постквантовой криптографии (например, алгоритмы на основе решёток), хотя их практическое внедрение пока ограничено.

Источники

  • RSA Security Inc. PKCS #11: Cryptographic Token Interface Standard, версия 2.40 (2014).
  • OASIS PKCS 11 Technical Committee. PKCS #11 Specification Version 3.0 (2019).
  • NIST Special Publication 800-175B: Guideline for Using Cryptographic Standards in the Federal Government (2016).
  • OpenSC Project. PKCS#11 for Smart Cards (документация, 2023).
  • КриптоПро. Руководство по работе с PKCS #11 (2022).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →