Коротко об одном из стандартов формата токена PKCS#15

Много статей написано про стандарты API между токенами и программным обеспечением. Однако, стандартизация формата хранения данных на самих токенах, как правило, несправедливо обойдена стороной. В данной статье кратко описан один из стандартов формата токена PKCS#15 (Public Key Cryptography standard), опубликованного RSA Laboratories.

c261401319f67b4c1f5dbb7d919f9eec.jpg

Криптографический токен и зачем стандартизировать формат его хранения

Криптографический токен — портативное устройство, способное хранить криптографические учетные данные, идентифицирующие его владельца (например, смарт-карты).  Они отлично подходят для обеспечения безопасности и приватности в приложениях. На них может храниться в защищенном формате важная информация, такая как пароли, секретные ключи,   закрытые ключи и т.д.

Токены предоставляют изолированное пространство, в котором можно обрабатывать чувствительную информацию, чтобы не открывать ее в самих приложениях, подверженных различным атакам.

Формат токена — это подробное описание того, как некоторые абстракции более высокого уровня, такие как ключи и сертификаты, представлены на токене, например, в виде структуры данных, содержимого файла, структуры каталогов и т.д.

Может возникнуть очевидный вопрос: зачем стандартизировать формат токенов, если и так существуют стандартизированные API между приложениями и токенами? Дело в том, что разные приложения все еще используют разные API для общения с токенами. Другими словами,  многие приложения привязаны к конкретным токенам, а токены привязаны к конкретным приложениям.  Стандартизация формата токена позволяет приложениям, поддерживающим разные API, сосуществовать на одном токене.

00623045bfa00a0df18c4d51b5647f56.png

Что же такое стандарт PKCS#15?

В первую очередь PKCS#15 — это попытка устранить разницу между токенами в отношении информации, связанной с безопасностью. В нем описаны формат хранения зашифрованной информации (ключей, сертификатов, данных аутентификации или просто зашифрованных данных) и спецификация обмена информацией между машиной и токеном. 

333a5c9248776bbaabbc7836229addea.png

PKCS#15:

  • обеспечивает функциональную совместимость компонентов, работающих на различных платформах

  • позволяет приложениям использовать преимущества продуктов от различных производителей

  • позволяет использовать самые последние технологии без необходимости переписывать программное обеспечение

  • поддерживает все современные стандарты из смежных областей, дополняя их только там, где это необходимо

Например, благодаря этому стандарту владелец смарт-карты, на которой будет храниться сертификат цифровой подписи, будет иметь возможность предоставить его на любой машине и любому программному обеспечению.

Стоит так же отметить, что PKCS#15 полностью совместим со стандартом API PKCS#11, однако не привязан к нему.

Объекты в PKCS#15

В стандарте описано четыре основных класса: ключи, сертификаты, объекты аутентификации и объекты данных (например, объект информации о самом токене). У всех объектных классов есть свои подклассы. Например, класс ключей имеет подклассы закрытых ключей, открытых ключей и секретных ключей, каждые из которых уже являются объектами, хранящимися непосредственно в токене.

0db277ae50978822f08544dd66c405c4.png

Объекты могут быть закрытыми, т.е. защищенными от несанкционированного доступа, или открытыми. В случае смарт-карт, любой доступ (чтение, запись и т.д.) к закрытым объектам определяется объектами аутентификации (в которых также определяются и процедуры аутентификации). Для держателя карты доступ производится на основе некоторой информации или биометрических данных. Открытые объекты не защищены от несанкционированного чтения. Защита от записи открытых объектов зависит от конкретной имплементации.

Примеры поддерживаемых объектов

В стандарте описаны правила хранения ключей и сертификатов многих популярных криптографических алгоритмов:

Формат файлов токена

В стандарте описано как элементы более высокого уровня, такие как ключи и сертификаты, могут быть представлены в терминах элементов более низкого уровня, а именно в файлах и структурах каталогов.

Общая структура токена имеет следующий вид:

Аббревиатуры:

  • EF — файл общего назначения (elementary file), в котором хранятся различные данные или записи с одинаковым идентификатором

  • DF — специализированный файл (dedicated file). В нем хранится информация о файловом управлении. В нем также может быть опциально выделена дополнительная память, доступная для аллокации. Специализированные файлы могут являться корнем для файлов общего назначения или других специализированных файлов

EF (DIR) — необязательный файл, в котором могут храниться одно или несколько приложений, используемых токеном.

DF (PKCS#15) — этот файл имеет иерархическую структуру. Она может отличаться от одной реализации токена к другой, но, как правило, имеет следующий вид:

834305bd22b89d4f3982e56bb3764914.png

Object Directory File (ODF) — файл общего назначения, в котором хранятся указатели на другие файлы из DF (PKCS#15) и основная информация об этих файлах.

Public/Private/Secret Key Directory Files (Pu/Pr/S KDFs) — файлы общего назначения, в которых хранится информация о ключах, которые доступны приложению PKCS#15, а также указатели на сами ключи. Пара закрытого и открытого могут использовать один и тот же идентификатор.

b04235267c5ccb2a6fb2e032e8c0ae6a.png

Certificate Directory Files (CDFs) — файлы, в которых хранится информация о сертификатах, а также указатели на сами сертификаты. Если сертификат содержит открытый ключ, парный закрытый ключ которого также хранится на карте, то они могут использовать один и тот же идентификатор.

Data Object Directory Files (DODFs) — файлы, в которых хранится информация об остальных данных, известных приложениям PKCS#15, и указатели на эти данные.

Authentication Object Directory Files (AODFs) — файлы, в которых хранится информация об объектах аутентификации (различных биометрические данных, паролях,  PIN-кодах и т.д.), а также указатели на эти объекты. Например, в случае PIN-кода можно хранить его длину и допустимые символы.

TokeInfo File — файл, в котором хранится основная информация о самом токене: серийный номер, поддерживаемы форматы данных, поддерживаемые криптографические алгоритмы и т.д.

Применение PKCS#15 на практике

de287078688b9095182d2aa1955dde9f.png

Чаще всего стандарт PKCS#15 используется для электронной идентификации (EID). На данный профиль EID PKCS#15 используется:

  • в качестве формата токена для SIM-модуля WAP (WIM)

  • в качестве формата токена для национальной финской карты EID

Также стандарт поддерживается крупнейшими вендорами, такими как Microsoft и Apple.

Заключение

Несмотря на то, что стандарт PKCS#15 довольно старый (1999 год), он уже многие годы позволяет поддерживать безопасность смарт-карт, не беспокоясь о совместимости. Стандартизация в области защиты информации дала большой скачок развитию современных технологий.

Ссылки на источники:

© Habrahabr.ru