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

PKCS#11

PKCS#11 (Cryptographic Token Interface — криптографический интерфейс токенов) — это стандартный программный интерфейс (API), определяющий платформонезависимый способ взаимодействия приложений с криптографическими устройствами (аппаратными токенами, смарт-картами, программными модулями — HSM и софт-токенами). Разработан и поддерживается корпорацией OASIS (Organization for the Advancement of Structured Information Standards) на основе спецификации, первоначально созданной компанией RSA Laboratories.

Стандарт описывает абстрактную модель криптографического устройства (токена) и набор функций (более 100), позволяющих выполнять операции: генерацию и хранение ключей, шифрование и расшифрование данных, вычисление и проверку электронной подписи (ЭП), хеширование, управление сертификатами и аутентификацию пользователя.

История

Первая версия спецификации PKCS#11 была опубликована компанией RSA Laboratories в 1995 году в рамках набора стандартов Public-Key Cryptography Standards (PKCS). Изначально стандарт предназначался для унификации доступа к аппаратным токенам безопасности, используемым в банковской сфере и государственных информационных системах.

В 2001 году вышла версия 2.20, которая стала наиболее распространённой. В 2013 году управление стандартом перешло к консорциуму OASIS, который выпустил версию 2.40 (2014) и 3.0 (2020). Версия 3.0 существенно расширила функциональность: добавила поддержку современных алгоритмов (Ed25519, X25519, SHA-3, AES-GCM), улучшила управление сессиями и механизмы аутентификации.

Архитектура

Модель PKCS#11 строится на трёх ключевых сущностях:

  • Слот — физическое или логическое гнездо для подключения токена. Один слот может содержать один токен. Приложения взаимодействуют со слотом, чтобы открыть сессию с токеном.
  • Токен — устройство, реализующее криптографические операции и хранящее ключи, сертификаты и другие объекты. Токен может быть аппаратным (USB-токен, смарт-карта) или программным (программный модуль, эмулирующий устройство).
  • Сессия — временное соединение между приложением и токеном. Через сессию выполняются все криптографические вызовы. Сессии бывают открытыми (без аутентификации) и закрытыми (после ввода PIN-кода пользователя).

Объектная модель

Все данные, хранимые на токене, представлены в виде объектов, которые делятся на классы:

  • Ключи (секретные, приватные, публичные) — хранятся в защищённой памяти токена и никогда не покидают его в открытом виде (если не разрешено экспортирование).
  • Сертификаты — X.509-сертификаты, используемые для проверки подлинности.
  • Данные — произвольные блоки данных, хранящиеся на токене (например, PIN-коды, конфигурационные записи).
  • Домены — группы объектов, объединённые общими атрибутами (например, все ключи одного пользователя).

Каждый объект имеет набор атрибутов (тип, значение, флаги доступа, идентификатор). Например, для ключа атрибуты включают: CKA_CLASS (тип ключа), CKA_KEY_TYPE (алгоритм), CKA_MODULUS (модуль RSA), CKA_PRIVATE (приватный/публичный), CKA_EXTRACTABLE (возможность экспорта).

Функциональные возможности

PKCS#11 предоставляет стандартный набор функций (около 130), объединённых в группы:

Управление сессией и аутентификация

  • C_Initialize / C_Finalize — инициализация/завершение работы с библиотекой.
  • C_OpenSession / C_CloseSession — открытие/закрытие сессии.
  • C_Login / C_Logout — вход/выход пользователя (с указанием типа: пользователь, офицер безопасности, администратор).

Генерация и управление ключами

  • C_GenerateKeyPair — генерация пары ключей (приватный + публичный) для асимметричных алгоритмов (RSA, ECDSA, Ed25519).
  • C_GenerateKey — генерация симметричного ключа (AES, DES, ChaCha20).
  • C_DestroyObjectудаление объекта с токена.
  • C_CopyObject — копирование объекта (с изменением атрибутов).

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

  • C_EncryptInit / C_Encrypt / C_EncryptUpdate / C_EncryptFinalшифрование данных.
  • C_DecryptInit / C_Decrypt — расшифрование.
  • C_SignInit / C_Sign / C_SignUpdate / C_SignFinal — создание электронной подписи.
  • C_VerifyInit / C_Verify — проверка подписи.
  • C_DigestInit / C_Digest / C_DigestUpdate / C_DigestFinal — вычисление хеша (SHA-1, SHA-256, SHA-3).
  • C_GenerateRandom — генерация случайных чисел.

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

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

Безопасность

Безопасность PKCS#11 обеспечивается за счёт нескольких механизмов:

  • Аутентификация — доступ к приватным ключам и конфиденциальным операциям требует ввода PIN-кода (или биометрической аутентификации). PIN-код хранится на токене и проверяется аппаратно.
  • Защита ключей — приватные ключи никогда не покидают токен в открытом виде. Операции подписи и расшифрования выполняются на самом устройстве.
  • Атрибуты доступа — каждый объект имеет флаги CKA_PRIVATE (доступен только после аутентификации), CKA_SENSITIVE (не может быть экспортирован), CKA_EXTRACTABLE (разрешён экспорт).
  • Аппаратная защита — аппаратные токены (HSM, USB-токены) устойчивы к физическим атакам (вскрытие корпуса, снятие напряжения).

Применение

PKCS#11 широко используется в следующих областях:

  • Электронная подпись (ЭП) — в России стандарт применяется в системах электронного документооборота (например, «КриптоПро CSP», VipNet CSP). Токены (JaCarta, Рутокен) реализуют PKCS#11 для работы с сертификатами КЭП.
  • Банковская сфера — HSM (Hardware Security Module) для защиты ключей платежных систем (Visa, Mastercard, СБП). PKCS#11 используется для подписи транзакций, шифрования PIN-кодов.
  • Криптовалюты и блокчейн — аппаратные кошельки (Ledger, Trezor) реализуют PKCS#11 для подписи транзакций. Программные библиотеки (например, OpenSC) позволяют работать с токенами в Bitcoin/ Ethereum.
  • Защита веб-серверов — в TLS/SSL-соединениях PKCS#11 используется для хранения приватных ключей сертификатов на аппаратных токенах (HSM) в корпоративных ЦОД.
  • Государственные информационные системы — в России стандарт применяется в ЕСИА (Единая система идентификации и аутентификации), Госуслугах, системах межведомственного электронного взаимодействия (СМЭВ).

Реализации

Существует множество реализаций PKCS#11, как коммерческих, так и открытых:

  • OpenSC — свободная библиотека, поддерживающая большинство смарт-карт и токенов (PKCS#15, ISO 7816). Используется в Linux.
  • SoftHSM — программная реализация HSM, эмулирующая PKCS#11. Применяется для тестирования и разработки.
  • КриптоПро CSP (Россия) — сертифицированная реализация PKCS#11 для работы с токенами JaCarta, Рутокен, eToken. Поддерживает ГОСТ Р 34.10-2012, ГОСТ Р 34.11-2012.
  • VipNet CSP — российская реализация для токенов «ИнфоКрипт» и «Крипто-Про».
  • Microsoft CryptoAPI (Windows) — частичная поддержка PKCS#11 через провайдеры CSP (Cryptographic Service Provider).
  • NSS (Network Security Services) — библиотека Mozilla, используемая в Firefox и Thunderbird.

Критика и ограничения

Несмотря на широкое распространение, PKCS#11 подвергается критике по нескольким причинам:

  • Сложность — стандарт содержит множество опциональных функций и атрибутов, что приводит к несовместимости между реализациями. Разные токены могут по-разному обрабатывать одни и те же вызовы.
  • Отсутствие поддержки современных алгоритмов — в версиях до 3.0 не было поддержки эллиптических кривых Edwards (Ed25519), постквантовых алгоритмов (Kyber, Dilithium). Версия 3.0 частично решила эту проблему.
  • Проблемы с безопасностью сессий — в некоторых реализациях возможно утечка ключей через некорректное управление сессиями (например, при использовании C_GenerateRandom с неправильным состоянием).
  • Отсутствие стандартизации для ГОСТ-алгоритмов — в России PKCS#11 не полностью покрывает требования ГОСТ Р 34.10-2012 и ГОСТ Р 34.11-2012, что потребовало создания дополнительных расширений (например, в КриптоПро CSP).

Перспективы

Развитие PKCS#11 связано с появлением новых криптографических алгоритмов (постквантовая криптография, гомоморфное шифрование) и ростом требований к безопасности в облачных средах. В версии 3.0 добавлены механизмы для работы с облачными HSM и токенами через сеть. Кроме того, ведётся работа по интеграции PKCS#11 с протоколами TPM (Trusted Platform Module) и WebAuthn.

Источники

  1. OASIS PKCS #11 Cryptographic Token Interface Base Specification Version 3.0 (2020).
  2. RSA Laboratories. PKCS #11 v2.20: Cryptographic Token Interface Standard (2004).
  3. OpenSC Project. PKCS#11 Implementation for Smart Cards (документация).
  4. КриптоПро CSP. Руководство разработчика (версия 5.0).
  5. NIST SP 800-175B. Guideline for Using Cryptographic Standards in the Federal Government: Cryptographic Mechanisms (2020).
  6. ГОСТ Р 34.10-2012. Информационная технология. Криптографическая защита информации. Процессы формирования и проверки электронной цифровой подписи.

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

На главную BFOmetr →