Дерево страниц

См. также:

Данная статья применима к:

  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8)
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7), РУСБ.10015-10
  • Astra Linux Special Edition РУСБ.10015-17
  • Astra Linux Special Edition РУСБ.10015-37
  • Astra Linux Special Edition РУСБ.10015-03

Данная статья неприменима к ключевым носителям, работающим по стандартам U2F (FIDO) и FIDO2.

В соответствии с указаниями производителя данная статья в части подготовки ключевых носителей к работе неприменима к токенам Аладдин JaCarta-2 ГОСТ:

Согласно «Правилам пользования сертифицированного устройства JaCarta-2 ГОСТ» администрирование такого устройства должно выполняться с использованием СКЗИ «Криптотокен 2 ЭП» в исполнении 13 – «АРМ администратора безопасности JaCarta-2 ГОСТ».
АРМ администратора безопасности необходим для:

  • инициализации JaCarta-2 ГОСТ;
  • импорта доверенного открытого ключа в JaCarta-2 ГОСТ;
  • генерации собственной ключевой пары в JaCarta-2 ГОСТ;
  • смены ключа администратора безопасности;
  • установки PIN- и PUK-кодов пользователя в JaCarta-2 ГОСТ;
  • разблокирования JaCarta-2 ГОСТ;
  • управления файлами в JaCarta-2 ГОСТ;
  • генерации и управления мастер-ключами;
  • генерации ключей для HMAC, импорта и управления ими в JaCarta-2 ГОСТ;
  • установки и смены пароля сброса JaCarta-2 ГОСТ к заводским настройкам;
  • сброса JaCarta-2 ГОСТ к заводским настройкам;
  • просмотра журналов операций СКЗИ «Криптотокен 2 ЭП» при работе АРМа администратора безопасности.

Термины

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

    • необходимостью ввода пароля (PIN-кода) для доступа к данным;

    • возможностью выполнять криптографические операции непосредственно на ключевом носителе (только для активных ключевых носителей).

  • Токен — ключевой носитель, подключающийся непосредственно к компьютеру и не требующий для подключения специальных промежуточных устройств. Обычно реализуется в форм-факторе USB-устройства. Термин токен часто применяется к смарт-картам (см. ниже).
  • Смарт-карта — ключевой носитель в форм-факторе кредитной карты, подключающийся к специальному промежуточному устройству — считывателю, подключенному к компьютеру.
  • PIN-код — пароль пользователя для доступа к пользовательским данным, хранящимся в ключевом носителе. Термин PIN обычно ассоциируется с цифровыми значениями, однако в PIN-кодах ключевых носителей допускается также использование букв латинского алфавита и, в некоторых моделях, спецсимволов.
  • SO-PIN-код — пароль администратора ключевого носителя. Производителями задаются стандартные значения PIN- и SO-PIN-кодов, которые в обязательном порядке должны быть изменены при передаче ключевых носителей в эксплуатацию. Справку по стандартным значениям кодов см. в статьях:
  • Криптопровайдер — модуль, позволяющий выполнять криптографические операции. Применительно к ключевым носителям это встроенный в носитель программно-аппаратный модуль, позволяющий выполнять криптографические операции непосредственно на ключевом носителе, без экспорта ключей за его пределы.
  • Пассивный ключевой носитель — ключевой носитель, не имеющий встроенного криптопровайдера. Например, токены Аладдин JaCarta LT, Рутокен Lite, Рутокен S. Такие ключевые носители предназначены для защищенного хранения данных, и не предназначены для аутентификации с использованием ключевых пар. Такие носители могут не поддерживать сохранение данных типа закрытый ключ и секретный ключ (однако любые данные могут быть сохранены как тип данные).
  • Апплет — встроенное приложение ключевого носителя. См, например: Аладдин: Работа с апплетами.

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

  • Активный ключевой носитель — ключевой носитель, способный самостоятельно выполнять криптографические операции, например, генерацию ключевых пар с созданием неизвлекаемого закрытого ключа. Например, токены Рутокен ЭЦП и большинство токенов Аладдин.
  • Закрытый ключ — ключ асимметричной криптосистемы, принадлежащий исключительно владельцу ключа и не подлежащий распространению. Используется для дешифрования данных, зашифрованных соответствующим открытым ключом.
  • Открытый ключ — ключ асимметричной криптосистемы, создаваемый на основе закрытого ключа и подлежащий распространению. Используется корреспондентами владельца закрытого ключа для шифрования сообщений, предназначенных владельцу закрытого ключа.
  • Неизвлекаемый ключ — закрытый или секретный ключ, хранящийся в активном ключевом носителе и не подлежащий передаче за его пределы. Такой ключ, как правило, создается криптопровайдером активного ключевого носителя и все операции с таким ключом выполняются криптопровайдером внутри носителя. Не поддерживается пассивными носителями.
  • Секретный ключ — ключ симметричной криптосистемы. Используется:
    • обеими сторонами коммуникации для шифрования и дешифрования данных;
    • владельцем ключа для шифрования и дешифрования собственных данных.
  • Ключевая пара — закрытый ключ и соответствующий ему открытый ключ.
  • Сертификат открытого ключа (сертификат) — пакет данных, состоящий из открытого ключа и информации о его владельце, скрепленных электронной подписью либо доверенного удостоверяющего центра, либо самого владельца соответвующего закрытого ключа (самоподписанный сертификат). Используется для идентификации владельца открытого ключа.
  • PKCS #15: Cryptographic Token Information Format Standard — стандартный формат хранения данных в ключевых носителях. Используется как в активных, так и в пассивных ключевых носителях (доступность тех или иных операций зависит от реализации устройства).
  • PKCS #11: Cryptographic Token Interface Standard (Cryptoki) — стандартный программный интерфейс активных ключевых носителей. Является интерфейсом более высокого уровня, чем PKCS #15. Частично применим к пассивным ключевым носителям (зависит от реализации). Описание доступно по ссылке: PKCS #11 Cryptographic Token Interface Base Specification Version 3.0.
  • URL (URI) — текстовый адрес ключевого носителя или объекта в ключевом носителе. Служит для идентификации ключевых носителей (объектов в ключевом носителе) при использовании протокола PKCS#11. Например, URL ключевого носителя и URL объекта (публичного ключа) в токене Аладдин JaCarta:

    URL: pkcs11:model=JaCarta%20Laser;manufacturer=Aladdin%20R.D.;serial=4E46002229073933;token=toklabel
    URL: pkcs11:model=JaCarta%20Laser;manufacturer=Aladdin%20R.D.;serial=4E46002229073933;token=toklabel;id=%45;object=objlabel;type=public

    Подробнее см. RFC 7512 The PKCS #11 URI Scheme.

  • Слот — условная точка подключения ключевого носителя. Номер слота может использоваться для идентификации ключевых носителей при использовании протокола PKCS#11. Может быть использован в составе URL для идентификации объектов в конкретном ключевом носителе.
  • APDU (Application Protocol Data Unit) — протокол обмена данными со смарт-картами.

Ключевые носители, совместимые с Astra Linux

Данная статья неприменима к ключевым носителям, работающим по стандартам U2F (FIDO) и FIDO2.

Актуальных список совместимых ключевых носителей приведен на WEB-сайте Astra Linux в разделе Ready for Astra. При написании этой статьи использовались следующие ключевые носители — токены:

  • Рутокен S;
  • Рутокен Lite;
  • Рутокен ECP 3.0;
  • Аладдин JaCarta Laser (JaCarta PKI);
  • Аладдин JaCarta ГОСТ 2.0.

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

Отдельно статья успешно проверена на следующих токенах (в примерах статьи не используются):

  • Аладдин JaCarta PRO, так же определяется как Bank of Lithuania Identification card и Gemalto SafeNet eToken Java Based Cards;
  • Аладдин SafeNet Etoken 5100, он же Aladdin Knowledge Systems Token JC (далее в тексте — Etoken).
  • Аладдин JaCarta LT.

Отличия в работе с разными моделями описаны непосредственно в примерах команд.

Особенности применения ключевых носителей в виртуальных машинах

При работе с виртуальными машинами (ВМ) ключевые носители, подключенные к хост-машине, могут быть переданы ("проброшены") в виртуальные машины как обычные USB-устройства. При этом:

  1. Для корректной передачи и дальнейшей работы устройства в ВМ на хост-машине должна быть отключена служба pcscd:

    sudo systemctl stop pcscd.service pcscd.socket

  2. После перезапуска ВМ устройство может отображаться, как переданное ВМ, но быть неработоспособно. Для предотвращения/устранения этой проблемы следует переподключать устройства после перезапуска ВМ.

Программное обеспечение для работы с ключевыми носителями

Инструменты командной строки

opensc-asn1openscИнструмент для работы с данными в формате ASN.1Основной репозиторий Astra Linux
opensc-exploreropenscИнструмент для интерактивной и пакетной работы с ключевыми носителямиОсновной репозиторий Astra Linux
opensc-notifyopenscИнструмент для мониторинга событий, связанных с ключевыми носителямиОсновной репозиторий Astra Linux
opensc-toolopenscИнструмент командной строки для работы с ключевыми носителямиОсновной репозиторий Astra Linux
p11-kitp11-kitИнструмент командной строки для работы с ключевыми носителями PKCS#11Основной репозиторий Astra Linux
p11toolgnutls-binИнструмент командной строки для работы с ключевыми носителями PKCS#11Базовый репозиторий Astra Linux
pcsc_scanpcsc-toolsСканер подключенных ключевых носителейОсновной репозиторий Astra Linux
pkcs11-datapkcs11-dataИнструмент командной строки для работы с ключевыми носителями PKCS#11Репозиторий Debian
pkcs11-registeropenscИнструмент командной строки для регистрации ключевых носителей PKCS#11 в известных приложениях (Chrome, Firefox, Thunderbird, Seamonkey)Основной репозиторий Astra Linux
pkcs11-toolopenscИнструмент командной строки для работы с ключевыми носителями PKCS#11Основной репозиторий Astra Linux
pkcs15-cryptopenscИнструмент командной строки для выполнения криптографических операций с ключевыми носителями PKCS#15Основной репозиторий Astra Linux
pkcs15-initopenscИнструмент командной строки для инициализации ключевых носителей PKCS#11Основной репозиторий Astra Linux
pkcs15-toolopenscИнструмент командной строки для работы со структурами данных PKCS#15Основной репозиторий Astra Linux
rtadminПоставляется в виде исполняемого файлаИнструмент командной строки для работы с ключевыми носителями Рутокен.
Для Astra Linux Special Edition 1.8 следует использовать версию rtadmin не ниже 3.1
Утилита администрирования Рутокен (rtAdmin)
python-pkcs11Пакет репозиториев pip/pip3 python-pkcs11Библиотека PythonРепозитории pip/pip3
libp11.solibp11-dev

Библиотека C, стандартная ссылка на актуальную реализацию для разработчиков.
Для платформы x86-64: /usr/lib/x68_64-linux-gnu/libp11.so

Базовый репозиторий Astra Linux
libp11.so.3
libp11.so.3.4.1
libp11-3

Библиотека C, актуальная реализация.
Для платформы x86-64 /usr/lib/x68_64-linux-gnu/libp11.so.3*

Основной репозиторий Astra Linux
softhsm2-utilsofthsm2

Инструмент командной строки из пакета softhsm2.
Может использоваться для отладки. В силу поддержки единых стандартов может применяться и для работы с физическими устройствами

Основной репозиторий Astra Linux

Модули аутентификации

pam_csplibpam-cspМодуль аутентификации по паролю, сохраненному в токене.
Для доступа к сохраненному паролю используется PIN-код.
Допускает использование пассивных токенов

Только при условии использования csp-monitor.
Начиная с csp-moniror версии  1.0.8+ci1 — для токенов и смарт-карт,
в более ранних версиях — только для токенов

Основной репозиторий Astra Linux
pam_p11libpam-p11Модуль аутентификации по сертификату.
Проверка сертификата выполняется с помощью неизвлекаемого ключа.
Требует использования активного токена
НетОсновной репозиторий Astra Linux
pam_pkcs11libpam_pkcs11Универсальный модуль аутентификации.
Возможна настройка разных способов проверки, в том числе без использования токенов (LDAP)
ДаОсновной репозиторий Astra Linux
pam_ssssssdУниверсальный модуль аутентификации в домене службы sssd.
Поддерживает аутентификацию с использованием ключевых носителей.
НетОсновной репозиторий Astra Linux

Дополнительные библиотеки для работы с ключевыми носителями

Архитектура x86-64: /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so
Архитектура aarch64: /usr/lib/aarch64-linux-gnu/opensc-pkcs11.so

opensc-pkcs11Реализация протокола PKCS#11 общего назначенияОсновной репозиторий Astra Linux
Архитектура x86-64:
/usr/lib/x86_64-linux-gnu/engines-1.1/libpkcs11.so
(/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so)
Архитектура aarch64:
/usr/lib/aarch64-linux-gnu/engines-1.1/libpkcs11.so
(/usr/lib/aarch64-linux-gnu/engines-1.1/pkcs11.so)
libengine-pkcs11-opensllЕдиный интерфейсный модуль openssl.
Обеспечивает возможность работы с интерфейсными библиотеками разных ключевых носителей.
Основной репозиторий Astra Linux
/usr/lib/pcsc/drivers/ifd-rutokens.bundle/Contents/Linux/librutokens.soifd-rutokensДрайвер для токенов Rutoken Shttps://www.rutoken.ru/support/download/nix/
/usr/lib/librtpkcs11ecp.solibrtpkc11ecpИнтерфейсная библиотека PKCS#11/PKCS#15 для токенов Рутокен ЭЦПhttps://www.rutoken.ru/support/download/nix/
/usr/lib/libjcPKCS11-2.sojcpkcs11-2Интерфейсная библиотека PKCS#11 для токенов АладдинПредоставляется производителем. Может быть доступна в составе ПО "Единый клиент JaCarta"

Графические инструменты для работы с ключевыми носителями

Универсальный клиент JaCartaНе оформлен в виде пакета Debian.
Поставляется производителем в виде архива.
Сценарий установки включен в архив
Графический инструмент для работы с ключевыми носителями Аладдин, кроме апплетов JaCarta-2 ГОСТwww.aladdin-rd.ru
АРМ администратора безопасности JaCarta-2 ГОСТФорма поставки неизвестнаИнструмент для работы с апплетами Аладдин JaCarta-2 ГОСТ. В Astra Linux неприменимПоставляется на коммерческой основе
АРМ разработчика JaCarta-2 ГОСТФорма поставки неизвестнаИнструмент для работы с апплетами Аладдин JaCarta-2 ГОСТ. В Astra Linux неприменимВходит в состав JaCartа-2 SDK, предоставляется производителем по запросу
Центр управления РутокенrtcontrolcenterЦентр управления Рутокен для GNU/Linux DEBКонтрольный центр Рутокен

Подготовка к работе с ключевыми носителями

Установка интерфейсных библиотек производителей

Интерфейсная библиотека Рутокен ЭЦП

Интерфейсная библиотека Рутокен librtpkcs11ecp.so представлена в пакете librtpkcs11ecp. Для установки пакета:

  1. Загрузить актуальную версию по ссылке: https://www.rutoken.ru/support/download/pkcs/.
  2. Выполнить установку из загруженного файла:

    sudo apt install ./librtpkcs11ecp_*_amd64.deb

В разных обновлениях Astra Linux и на разных аппаратных платформах эта библиотека может размещаться в различных каталогах. Далее в примерах предполагается, что библиотека расположена в файле /usr/lib/librtpkcs11ecp.so (актуально для платформы x86-64). Для того, чтобы определить реальное расположение библиотеки, можно использовать команду:

find /usr/*(lib|lib64) -name librtpkcs11ecp.so

Драйверы Рутокен S

Драйверы Рутокен S (библиотека librutokens.so) представлены в пакете ifd-rutokens. Для установки пакета:

  1. Загрузить актуальную версию по ссылке: https://www.rutoken.ru/support/download/get/rtDrivers-x64-deb.html.
  2. Выполнить установку из загруженного файла:

    sudo apt install ./ifd-rutokens_*_amd64.deb

Интерфейсная библиотека Аладдин libjcPKCS11-2.so

Инструкция по установке предоставляется производителем.

Универсальный интерфейсный модуль openssl libpkcs11.so

Интерфейсный модуль openssl libpkcs11.so обеспечивает единый интерфейс для доступа к ключевым носителям через интерфейсные библиотеки этих носителей. Для доступа к ключевым носителям используется инструменты p11-kit и pkcs11tool (см. далее).

Интерфейсный модуль openssl libpkcs11.so входит в состав пакета libengine-pkcs11-openssl и может быть установлен с помощью графического менеджера пакетов или командой:

sudo apt install libengine-pkcs11-openssl

После установки пакета:

  1. Для использовании модуля libpkcs11.so следует отключить использование модуля opensc-pkcs11.so (если установлен пакет opensc-pkcs11), для чего создать файл /etc/pkcs11/modules/opensc-pkcs11.module, запрещающий использование этого модуля:
    echo -e "enable-in:" | sudo tee /etc/pkcs11/modules/opensc-pkcs11.module > /dev/null
  2. Указать интерфейсные библиотеки ключевых носителей, с которыми будет осуществляться взаимодействие через libpkcs11.so, для чего создать соответствующие файлы в каталоге /etc/pkcs11/modules/ (предполагается, что интерфейсные модули установлены):
    1. Для токенов Аладдин:
      echo -e "module: /usr/lib/libjcPKCS11-2.so"  | sudo tee /etc/pkcs11/modules/aladdin.module
    2. Для токенов Рутокен:
      echo -e "module: /usr/lib/librtpkcs11ecp.so" | sudo tee /etc/pkcs11/modules/rutoken.module       > /dev/null

Специально указывать модуль в конфигурации openssl нет необходимости. Проверить готовность модуля можно командами:

openssl engine pkcs11 -t

пример вывода команды:

openssl engine pkcs11 -t

(pkcs11) pkcs11 engine
     [ available ]

или использовать инструмент командной строки p11toool (см. ниже).

Инструмент командной строки p11tool

Для установки инструмента командной строки p11tool:

  1. Для обновлений, вышедших ранее Astra Linux Special Edition 1.8: подключить базовый репозиторий.
  2. Установить пакет gnutls-bin:

    sudo apt install gnutls-bin

  3. При необходимости использовать интерфейсные библиотеки производителей:
    1. Создать каталог /etc/pkcs11/modules/:

      sudo mkdir -p /etc/gnutls

    2. Создать файлы в каталоге /etc/pkcs11/modules/ (общая системная конфигурация). Минимальное содержимое файлов — строка  в формате module: <путь_к_библиотеке>, подробнее см. man pkc11.conf. Пользовательские конфигурации могут быть размещены в каталоге ~/.config/pkcs11/pkcs11.conf, 

Основные действия с ключевыми носителями

Поиск и идентификация подключенных ключевых носителей

Физические устройства — инструмент lsusb

Команда lsusb распознает считыватели смарт-карт, но не распознает подключенные к считывателям смарт-карты.

Самой надежной командой для поиска подключенных токенов является команда lsusb. Эта команда:

  • не требует установки никаких дополнительных пакетов;
  • распознает подключенные устройства на физическом уровне, даже если они программно полностью несовместимы с используемой ОС.

В том числе, командой обнаруживаются токены, работающие по стандартам U2F (FIDO) и FIDO2.

Пример вывода команды (для наглядности приведена только информация о токенах):

lsusb

Bus 002 Device 009: ID 24dc:0101 Aladdin R.D Aladdin R.D. JaCarta
Bus 002 Device 006: ID 0a89:0020 Aktiv Rutoken S
Bus 002 Device 011: ID 24dc:0101 Aladdin R.D Aladdin R.D. JaCarta
Bus 002 Device 010: ID 0a89:0030 Aktiv Rutoken ECP
Bus 002 Device 007: ID 0a89:0025 Aktiv Rutoken lite
В выводе команды доступны:

  • числовой код производителя (VID):
    • 0a89 — Рутокен;
    • 24dc — Аладдин;
    • 0529 — Аладдин Etoken;
  • числовой код модели (PID):
    • для токенов Рутокен (подробнее см. ATR-строки и PID/VID Рутокен):
      • 0020 — Aktiv Rutoken S;
      • 0030 — Aktiv Rutoken ECP;
      • 0025 — Aktiv Rutoken Lite;
      • 0090 —токены Рутокен U2F, к которым настоящая статья неприменима;
      • 0093 —Aktiv — токены Рутокен MFA, к которым настоящая статья неприменима;
    • для токенов Аладдин:
      • 0620 — Аладдин Etoken;
      • 0406 — Аладдин JaCarta SF ГОСТ, к которым настоящая статья неприменима;
      • 0101 — токены Аладдин JaCarta, в том числе:
        • Аладдин JaCarta Laser (JaCarta PKI), рассматриваются далее в статье; 
        • Аладдин JaCarta ГОСТ 2.0, к которым настоящая статья неприменима;
      • 0501 — токены Аладдин JaCarta U2F, к которым настоящая статья неприменима;
      • 0102 — токены Аладдин JaCarta LT;
      • 0401 — токены Аладдин JaCarta WebPass, к которым настоящая статья неприменима.

Инструмент командной строки pcsc_scan

Инструмент командной строки pcsc_scan представлен в пакете pcsc-tools. Установка пакета:

sudo apt install pcsc-tools
Для работы пакета требуется служба pcscd. Служба представлена в пакете pcscd. Устанавливается автоматически при установке пакета pcsc-tools или может быть установлена отдельно.

Служба pcscd не работает постоянно. Служба останавливается после 60 секунд неактивности и активируется по мере поступления запросов через сокет pcscd.socket. При недостатке вычислительных ресурсов (например, создать дефицит ресурсов можно включив режим отладки в службе pcscd) активация по запросу может выполняться слишком долго, что ведет к появлению случайных ошибок (например, не обнаруживается служба, не обнаруживаются ключевые носители и пр.).

Команда pcsc_scan без аргументов выводит значительный объем информации об обнаруженных ключевых носителях, после чего ожидает подключение новых устройств (прекратить ожидание можно, нажав Ctrl+C):

pcsc_scan
Для быстрого поиска подключенных и опознанных ключевых носителей удобнее использовать опцию -r (краткий вывод без ожидания подключения новых ключевых носителей):
pcsc_scan -r


Пример вывода команды:
Using reader plug'n play mechanism
Scanning present readers...
0: Aktiv Rutoken lite 00 00
1: Aktiv Rutoken ECP 01 00
2: Aladdin R.D. JaCarta [SCR Interface] (000000000000) 02 00
3: Aktiv Co. Rutoken S 00 00
4: Aladdin R.D. JaCarta [SCR Interface] (000000000000) 03 00 

Возможно также получить идентификационные строки ключевых носителей (Answer To Reset, ATR):

pcsc_scan | grep -E " (Reader| ATR)"
Пример вывода команды:

 Reader 0: Aktiv Rutoken lite 00 00  ATR: 3B 8B 01 52 75 74 6F 6B 65 6E 6C 69 74 65 C2
 Reader 1: Aktiv Rutoken ECP 01 00  ATR: 3B 8B 01 52 75 74 6F 6B 65 6E 20 44 53 20 C1
 Reader 2: Aladdin R.D. JaCarta [SCR Interface] (000000000000) 02 00  ATR: 3B DC 18 FF 81 91 FE 1F C3 80 73 C8 21 13 66 01 06 11 59 00 01 28
 Reader 3: Aktiv Co. Rutoken S 00 00  ATR: 3B 6F 00 FF 00 56 72 75 54 6F 6B 6E 73 30 20 00 00 90 00
 Reader 4: Aladdin R.D. JaCarta [SCR Interface] (000000000000) 03 00  ATR: 3B DC 18 FF 81 91 FE 1F C3 80 73 C8 21 13 66 01 06 11 59 00 01 28

Для ключевых носителей Рутокен значения ATR задокументированы, см. ATR-строки и PID/VID Рутокен. Для ключевых носителей Аладдин ATR одинаковый, и на этом уровне идентифицировать модель устройства не представляется возможным.
Пример кода для анализа ATR: https://github.com/LudovicRousseau/pyscard-contrib/tree/master/parseATR.

Служба pcscd по умолчанию настроена так, что автоматически отключается после 60 секунд бездействия и перезапускается по требованию. Такое поведение может вести к "плавающим" ошибкам при обращениях к ключевым носителям в случаях, когда служба не успевает запуститься.

Для предотвращения таких ошибок можно запретить автоматическое отключение, удалив параметр службы --auto-exit. Для этого:

  1. Выполнить команду:

    sudo systemctl edit pcscd.service

  2. Ввести текст:

    [Service]
    ExecStart=
    ExecStart=/usr/sbin/pcscd --foreground
  3. Сохранить изменения.
  4. Перезапустить службу pcscd.service:

    sudo systemctl restart pcscd.service

Инструмент командной строки p11tool

Инструмент командной строки p11tool представлен в пакете gnutls-bin и может быть установлен командой:

sudo apt install gnutls-bin

С помощью установленного инструмента список подключенных ключевых носителей можно получить используя опцию --list-tokens:

p11tool --list-tokens
Эта команда выводит URL ключевого носителя, его серийный номер, название производителя и название модели. Команда не позволяет получить номера слотов (выводимые командой номера ключевых носителей номерами слотов не являются), и этот инструмент работает не с номерами слотов, а с URL. Дополнительно команда сообщает об использованном интерфейсном модуле. Некоторые токены могут отображаться как несколько устройств. Например, токен Рутокен ЕСР обнаруживается интерфейсными модулями opensc-pkcs11.so и librtpkcs11ecp.so:

...
Token 3:
	URL: pkcs11:model=PKCS%2315;manufacturer=Aktiv%20Co.;serial=00000000419b79e8;token=Rutoken%20ECP
	Label: Rutoken ECP
	Type: Hardware token
	Flags: uPIN uninitialized
	Manufacturer: Aktiv Co.
	Model: PKCS#15
	Serial: 00000000419b79e8
	Module: opensc-pkcs11.so
...
Token 6:
	URL: pkcs11:model=Rutoken%20ECP;manufacturer=Aktiv%20Co.;serial=413a49ed;token=413a49ed
	Label: 413a49ed
	Type: Hardware token
	Flags: RNG, Requires login
	Manufacturer: Aktiv Co.
	Model: Rutoken ECP
	Serial: 413a49ed
	Module: librtpkcs11ecp.so

Для получения краткого списка URL ключевых носителей можно использовать опцию --list-token-urls:

p11tool --list-token-urls
Пример вывода команды (согласно стандарту представления URL спецсимволы заменяются числовыми представлениям: %20 — пробел, %23 —"решетка" и т. д.):

pkcs11:model=p11-kit-trust;manufacturer=PKCS%2311%20Kit;serial=1;token=System%20Trust
pkcs11:model=JaCarta%20Laser;manufacturer=Aladdin%20R.D.;serial=4E46001953483957;token=4E46001953483957
pkcs11:model=JaCarta%20GOST%202.0;manufacturer=Aladdin%20R.D.;serial=4E46001310573957;token=JaCarta-2%20GOST
pkcs11:model=PKCS%2315;manufacturer=Aktiv%20Co.;serial=00000000419b79e8;token=Rutoken%20ECP
pkcs11:model=PKCS%2315;manufacturer=Aktiv%20Co.;serial=41538f00;token=Rutoken%20S
pkcs11:model=Rutoken%20lite;manufacturer=Aktiv%20Co.;serial=419b79e8;token=419b79e8
pkcs11:model=Rutoken%20ECP;manufacturer=Aktiv%20Co.;serial=413a49ed;token=413a49ed

Получить список URL ключевых носителей можно также использовав опцию --list-all (показать все объекты ключевого носителя), не указав конкретный URL носителя. При этом будет выведено предупреждение и список URL доступных ключевых носителей:

p11tool --list-all

warning: no token URL was provided for this operation; the available tokens are:

pkcs11:model=p11-kit-trust;manufacturer=PKCS%2311%20Kit;serial=1;token=System%20Trust
pkcs11:model=JaCarta%20Laser;manufacturer=Aladdin%20R.D.;serial=4E46001953483957;token=4E46001953483957
pkcs11:model=JaCarta%20GOST%202.0;manufacturer=Aladdin%20R.D.;serial=4E46001310573957;token=JaCarta-2%20GOST
pkcs11:model=PKCS%2315;manufacturer=Aktiv%20Co.;serial=00000000419b79e8;token=Rutoken%20ECP
pkcs11:model=PKCS%2315;manufacturer=Aktiv%20Co.;serial=41538f00;token=Rutoken%20S
pkcs11:model=Rutoken%20lite;manufacturer=Aktiv%20Co.;serial=419b79e8;token=419b79e8
pkcs11:model=Rutoken%20ECP;manufacturer=Aktiv%20Co.;serial=413a49ed;token=413a49ed

Полученные URL далее можно использовать для выбора ключевых носителей и объектов внутри них.

При необходимости можно зафиксировать интерфейсную библиотеку. Например, для интерфейсной библиотеки Рутокен:

p11tool --list-token-urls --provider /usr/lib/librtpkcs11ecp.so

pkcs11:model=Rutoken%20lite;manufacturer=Aktiv%20Co.;serial=419b79e8;token=419b79e8
pkcs11:model=Rutoken%20ECP;manufacturer=Aktiv%20Co.;serial=413a49ed;token=413a49ed
При этом ключевой носитель Рутокен ЕСР представлен только одним устройством, а подключенный Рутокен S вообще не обнаружен (так как для него используется библиотека opensc-pkcs11.so).

Инструмент командной строки pkcs11-tool

Инструмент командной строки pkcs11-tool представлен в пакете opensc и может быть установлен командой:

sudo apt install opensc
Инструмент pkcs11-tool, в отличие от вышеописанного p11tool, работает не с URL, а с данными ключевых носителей. Команда для получения списка подключенных ключевых носителей (по умолчанию применяется универсальная интерфейсная библиотека opensc-pkcs11.so, соответственно, в списке отображаются только работающие с ней ключевые носители):
pkcs11-tool --list-token-slots
Вывод команды:

Available slots:
Slot 0 (0x0): Aktiv Rutoken lite 00 00  token label    : Rutoken ECP  token manufacturer : Aktiv Co.  token model    : PKCS#15  token flags    : token initialized  hardware version  : 0.0  firmware version  : 0.0  serial num     : 00000000419b79e8  pin min/max    : 4/8
Slot 1 (0xc): Aktiv Co. Rutoken S 00 00  token label    : Rutoken S  token manufacturer : Aktiv Co.  token model    : PKCS#15  token flags    : rng, token initialized  hardware version  : 0.0  firmware version  : 0.0  serial num     : 41538f00  pin min/max    : 4/8 

Используемые инструментом модули должны быть указаны в командной строке (опция --module). Например, для интерфейсного модуля Рутокен:

pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --list-token-slots

Available slots:
Slot 0 (0x0): Aktiv Rutoken lite 00 00
 token label    : 419b79e8
 token manufacturer : Aktiv Co.
 token model    : Rutoken lite
 token flags    : login required, rng, SO PIN to be changed, token initialized, PIN initialized, user PIN to be changed
 hardware version  : 65.4
 firmware version  : 30.2
 serial num     : 419b79e8
 pin min/max    : 4/32
Slot 1 (0x1): Aktiv Rutoken ECP 01 00
 token label    : 413a49ed
 token manufacturer : Aktiv Co.
 token model    : Rutoken ECP
 token flags    : login required, rng, SO PIN to be changed, token initialized, PIN initialized, user PIN to be changed
 hardware version  : 60.1
 firmware version  : 30.2
 serial num     : 413a49ed
 pin min/max    : 6/32
или для интерфейсного модуля Аладдин:
pkcs11-tool --module /usr/lib/libjcPKCS11-2.so --list-token-slots

Available slots:
Slot 0 (0x1ffff): Aladdin R.D. JaCarta [SCR Interface] (000000000000) 02 00
 token label    : 4E46001953483957
 token manufacturer : Aladdin R.D.
 token model    : JaCarta Laser
 token flags    : login required, token initialized, PIN initialized
 hardware version  : 1.0
 firmware version  : 1.0
 serial num     : 4E46001953483957
 pin min/max    : 4/16
Slot 1 (0x2ffff): Aladdin R.D. JaCarta [SCR Interface] (000000000000) 03 00
 token label    : JaCarta-2 GOST
 token manufacturer : Aladdin R.D.
 token model    : JaCarta GOST 2.0
 token flags    : login required, rng, token initialized, PIN initialized, other flags=0x800
 hardware version  : 1.0
 firmware version  : 2.55
 serial num     : 4E46001310573957
 pin min/max    : 6/32
Индекс слота указан после слова Slot, далее номер слота каждого ключевого носителя указан в скобках в виде шестнадцатиричного числа (0x0, 0xc, 0x1, 0x1ffff, 0x2ffff), нумерация слотов — своя для каждого интерфейсного модуля, одни и те же индексы могут использоваться разными модулями для разных ключевых носителей. 

Инструмент командной строки opensc-tool

Инструмент командной строки opensc-tool представлен в пакете opensc и может быть установлен командой:

sudo apt install opensc
Список подключенных ключевых носителей можно получить командой:
opensc-tool --list-readers

# Detected readers (pcsc)
Nr. Card Features Name
0  Yes       Aktiv Rutoken lite 00 00
1  Yes       Aktiv Rutoken ECP 01 00
2  Yes       Aladdin R.D. JaCarta [SCR Interface] (000000000000) 02 00
3  Yes       Aktiv Co. Rutoken S 00 00
4  Yes       Aladdin R.D. JaCarta [SCR Interface] (000000000000) 03 00
Выбор ключевого носителя далее может выполняться с помощью опции --reader (-r) по его номеру (в примере выше — первый столбец).

Выбор ключевого носителя для работы, чтение каталога данных с ключевого носителя

Инструмент командной строки p11tool

При работе с инструментом p11tool ключевой носитель задается указанием его URL. Например, чтение каталога данных ключевого носителя:

p11tool --list-all 'pkcs11:model=Rutoken%20ECP;manufacturer=Aktiv%20Co.;serial=413a49ed;token=413a49ed'
Пример вывода команды (данный ключевой носитель ранее был использован для размещения данных):

Object 0:   URL: pkcs11:model=Rutoken%20ECP;manufacturer=Aktiv%20Co.;serial=413a49ed;token=413a49ed;id=%45;object=testlabel;type=public   Type: Public key (RSA-2048)   Label: testlabel   ID: 45

Object 1:   URL: pkcs11:model=Rutoken%20ECP;manufacturer=Aktiv%20Co.;serial=413a49ed;token=413a49ed;id=%45;object=sert;type=cert   Type: X.509 Certificate (RSA-2048)   Expires: Wed Aug 2 17:26:33 2023   Label: sert   ID: 45

На ключевом носителе доступны два публичных объекта — открытый ключ (тип public) и сертификат открытого ключа (тип cert). Для получения защищенных объектов следует указать PIN-код пользователя и необходимость аутентификации с заданным PIN-кодом (опция --login). PIN-код передается через переменную окружения GNUTLS_PIN, например:

GNUTLS_PIN=12345678 p11tool --login --list-all 'pkcs11:model=Rutoken%20ECP;manufacturer=Aktiv%20Co.;serial=413a49ed;token=413a49ed'

Пример вывода команды:

Object 0:   URL: pkcs11:model=Rutoken%20ECP;manufacturer=Aktiv%20Co.;serial=413a49ed;token=413a49ed;id=%45;object=testlabel;type=public   Type: Public key (RSA-2048)   Label: testlabel   ID: 45

Object 1:   URL: pkcs11:model=Rutoken%20ECP;manufacturer=Aktiv%20Co.;serial=413a49ed;token=413a49ed;id=%45;object=testlabel;type=private   Type: Private key (RSA-2048)   Label: testlabel   Flags: CKA_PRIVATE; CKA_NEVER_EXTRACTABLE; CKA_SENSITIVE;    ID: 45

Object 2:   URL: pkcs11:model=Rutoken%20ECP;manufacturer=Aktiv%20Co.;serial=413a49ed;token=413a49ed;id=%45;object=sert;type=cert   Type: X.509 Certificate (RSA-2048)   Expires: Wed Aug 2 17:26:33 2023   Label: sert   ID: 45

Кроме публичных объектов также показан защищенный объект — закрытый ключ (тип private), причем ключ неизвлекаемый (флаг CKA_NEVER_EXTRACTABLE).

Инструмент командной строки pkcs11-tool

Инструмент pkcs11-tool использует номера слотов (опция --slot) или индексы слотов (опция --slot-index). Пример получения каталога данных ключевого носителя, находящегося в слоте с номером 0x1ffff:

pkcs11-tool --module /usr/lib/libjcPKCS11-2.so --slot 0x1ffff --list-objects
Пример вывода команды:

Using slot 0 with a present token (0x1ffff)
Public Key Object; RSA 2048 bits  label:   testlabel  ID:     45  Usage:   encrypt, verify  Access:   local
Certificate Object; type = X.509 cert  label:   sert  subject:  DN: C=RU, ST=MO, L=Moscow, O=Astra, OU=Wiki/emailAddress=le@astralinux.ru, CN=le  ID:     45

Для получения данных с аутентификацией можно использовать опцию --login (при этом PIN-код для аутентификации будет запрошен в интерактивном режиме):

pkcs11-tool --module /usr/lib/libjcPKCS11-2.so --slot 0x1ffff --list-objects --login
или указать PIN-код с помощью опции --pin (небезопасно), при этом аутентификация будет выполнена по умолчанию (опцию --login указывать не обязательно):
pkcs11-tool --module /usr/lib/libjcPKCS11-2.so --slot 0x1ffff --list-objects --pin 1234567890

Далее в примерах для упрощения изложения опции выбора ключевого носителя по возможности не указываются. PIN- и SO-PIN-коды задаются в параметрах команд. Рассматривается только применение инструмента pkcs11-tool как более универсального и удобного.


Инициализация (очистка) и подготовка ключевого носителя

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

  • Инициализация с использованием интерфейсной библиотеки Рутокен librtpkcs11ecp.so не гарантирует удаление объектов, созданных с помощью иных программных средств. При использовании этой библиотеки после инициализации носителя и создания пользовательской структуры следует проверить наличие сохранившихся артефактов и удалить обнаруженные.
  • Для инициализации ключевых носителей Аладдин JaCarta Laser (PKI) в зависимости от версии используемого апплета может требоваться указать ранее заданный SO-PIN администратора. При этом количество попыток ввода SO-PIN ограничено. При превышении ограничения апплет блокируется. Для некоторых версий апплетов разблокировка невозможна, некоторые можно разблокировать с помощью Единого Клиента JaCarta.
  • Инициализация со сменой SO-PIN может быть выполнена:
    • либо с помощью ПО Управляющий Центр JaCarta (при этом старый SO-PIN знать не требуется);
    • либо, при наличии старого SO-PIN, в два этапа с помощью инструмента p11tool:
      • сначала инициализировать ключевой носитель используя старый SO-PIN:

        GNUTLS_SO_PIN=<старый_SO-PIN> p11tool --initialize --label "<метка>" "pkcs11:URL"
      • сменить старый SO-PIN на новый:

        GNUTLS_SO_PIN=<старый_SO-PIN> GNUTLS_NEW_SO_PIN=<новый_SO-PIN> p11tool --initialize-so-pin "pkcs11:URL"
  • Этот раздел полностью неприменим к апплетам Аладдин ГОСТ 2.0. Для их инициализации следует использовать предоставляемый производителем инструмент Единый Клиент JaCarta. Инициализация этих апплетов в автоматическом режиме (с использованием сценариев) не поддерживается.

Для инициализации обязательными являются указание метки ключевого носителя и SO-PIN-кода. Кроме этого, требуется указать интерфейсный модуль, соответствующий ключевому носителю:

pkcs11-tool --module "<интерфейсный_модуль>" --init-token --so-pin "<SO-PIN-код>" --label "<метка_ключевого_носителя>"
После инициализации на ключевом носителе должна быть создана пользовательская структура данных:
pkcs11-tool --module "<интерфейсный_модуль>" --init-pin --so-pin <SO-PIN-код> --pin <пользовательский_PIN-код>

Инициализация ключевого носителя на уровне стандарта PKCS#15 с помощью инструмента pkcs15-init применима к токенам Рутокен. См. Двухфакторная аутентификация: libpam-csp и csp-monitor.

Создаваемая при этом файловая система несовместима с файловой системой, создаваемой при форматировании токена инструментами производителя.


Изменение SO-PIN-кода

Для смены SO-PIN-кода требуется указать действующий и новый коды:

pkcs11-tool --module "<интерфейсный_модуль>" --login --login-type so --so-pin <действующий_SO-PIN-код> --change-pin --new-pin <новый_SO-PIN-код>

Изменение PIN-кода


При получении ключевого носителя необходимо получить PIN-код. После получения необходимо сменить PIN-код.
В качестве PIN-кода недопустимо использовать значения, используемые производителем носителя по умолчанию.  Для уточнения см. документацию на используемые ключевые носители .
Превышение установленного количества попыток ввода PIN-кода ведет к блокировке ключевого носителя.
Некоторые модели могут быть разблокированы администратором, некоторые блокируются необратимо. Для уточнения см. документацию на используемые ключевые носители .

Изменение PIN-кода выполняется его владельцем. Для изменения требуется указать действующий и новый коды:

pkcs11-tool --module "<интерфейсный_модуль>" --pin <действующий_PIN-код> --change-pin --new-pin <новый_PIN-код>

Создание ключевой пары

При работе с активными ключевыми носителями создание ключевой пары выполняется встроенным криптопровайдером на самом носителе:

pkcs11-tool --module "<интерфейсный_модуль>" --keypairgen --label "<метка>" --key-type <алгоритм> --id <идентификатор> --pin "<PIN-код>"
где:

  • --keypairgen — команда создания ключевой пары;
  • --label <метка> — метка (имя) ключевой пары;
  • --key-type <алгоритм> — алгоритмы, применяемые для создания ключа. Обычно используется rsa:2048, для ключевых носителей с апплетами Аладдин ГОСТ можно использовать алгоритм GOSTR3410-2001:A.
  • --id <идентификатор> — идентификатор ключевой пары.

Подготовка ключевых пар для размещения в пассивных ключевых носителях может быть выполнена с помощью инструмента openssl. См. документацию man openssl-genrsa.

Создание сертификата открытого ключа

Для создания сертификата открытого ключа используется ранее созданная ключевая пара. Создание сертификата выполняется с помощью инструмента openssl. Необходимые команды могут быть введены в командной сессии openssl. При работе в сценариях для ввода команд может быть использовано перенаправление ввода. Недостающая информация будет запрошена в интерактивном режиме. Пример использования перенаправления ввода:

openssl << EOT
engine dynamic -pre SO_PATH:/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:<интерфейсный_модуль>
req -engine pkcs11 -new -key <URL_ключа> -keyform engine -x509 -out <имя_файла> -outform DER -passin pass:<PIN-код> -subj '/C=RU/ST=MO/L=Moscow/O=Astra/OU=Wiki/emailAddress=le@astralinux.ru/CN=le'
EOT
Где:

  • openssl << EOT — вызов openssl с перенаправлением ввода. При выполнении команды openssl без параметров будет открыта интерактивная сессия для ввода команд. В данном примере в интерактивную сессию будут переданы как команды все строки до строки EOT;
  • engine dynamic -pre SO_PATH:/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:<интерфейсный_модуль> — команда загрузки необходимых для работы с ключевым носителем библиотек. Вместо <интерфейсный_модуль> следует указать используемый модуль;
  • req -engine pkcs11 --new ... — команда создания запроса на сертификат и выдачи сертификата:
    • -key <URL_ключа> — указание, какой закрытый ключ следует использовать для подписания сертификата. Некоторые возможные варианты указания URL:
      • разделенная двоеточием пара из номера слота и числового идентификатора ключа. Номер слота должен быть представлен в десятичном виде, т. е. для слота 0x1ffff должно быть указано значение 131071, для слота 0x2ffff — 196607. Например, URL может быть таким: 131071:45;
      • при работе с ключевыми носителями Рутокен можно использовать URL, полученный командой p11tool. URL должен быть заключен в одинарные кавычки. При работе с ключевыми носителями Аладдин выбор ключа с помощью таких URL не поддерживается;
      • пара из серийного номера ключевого носителя и числового идентификатора ключа в формате:

        pkcs11:serial=<серийный_номер_ключевого_носителя>;id=%<идентификатор_ключа>
    • -keyfom engine -x509 — указания по порядку формирования ключа;
    • -out <имя_файла> — имя файла для сохранения подписанного сертификата. Обычно используется расширение имени .cer;
    • -outform DER — формат, в котором будет сохранен сертификат;
    • -passin pass:<PIN-код> — необязательный параметр с указанием PIN-кода для доступа к закрытому ключу, находящемуся на ключевом носителе. Если параметр не указан — PIN-код будет запрошен в интерактивном режиме;
    • -subj '/C=RU/ST=MO/L=Moscow/O=Astra/OU=Wiki/emailAddress=le@astralinux.ru/CN=le' — необязательный параметр с указанием реквизитов запроса на сертификат. Если параметр не указан — реквизиты будут запрошены в интерактивном режиме;
  • EOT — признак окончания перенаправления ввода.

Альтернативой работы в командной оболочке openssl является внесение сведений о динамически подключаемых модулях в кастомизированные конфигурационные файлы. Например, можно скопировать стандартный конфигурационный файл /etc/ssl/openssl.cnf в файл /etc/ssl/aladdin.cnf, добавить в секцию [engines_section] описание модуля pkcs11 со ссылкой на секцию [pkcs11_section]:

[engines_section]
gost-astra=gost_section
pkcs11=pkcs11_section
и добавить саму эту секцию:
[pkcs11_section]
engine_id = pkcs11
dynamic_path = /usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so
MODULE_PATH = /usr/lib/libjcPKCS11-2.so
Можно также создать аналогичный файл /etc/ssl/rutoken.cnf, указав в нем интерфейсную библиотеку для ключевых носителей Рутокен:
MODULE_PATH = /usr/lib/librtpkcs11ecp.so
Далее при выполнении команд openssl можно выбирать нужный конфигурационный файл с помощью переменной окружения OPENSSL_CONF, например, для ключевых носителей Аладдин:

OPENSSL_CONF=/etc/ssl/aladdin.conf openssl req -batch -engine pkcs11 -new -key 131071:33 -keyform engine -out client.req -subj '/C=RU/ST=MO/L=Moscow/O=Astra/OU=Wiki/emailAddress= /CN=client'

или для ключевых носителей Рутокен:

OPENSSL_CONF=/etc/ssl/rutoken.conf openssl req -batch -engine pkcs11 -new -key 1:33 -keyform engine -out client.req -subj '/C=RU/ST=MO/L=Moscow/O=Astra/OU=Wiki/emailAddress= /CN=client'


Сохранение данных в ключевом носителе

Созданный на предыдущем шаге сертификат загружается (импортируется) в ключевой носитель следующей командой:

pkcs11-tool --module "<интерфейсный_модуль>" --pin <PIN-код> --type cert -w <имя_файла> --label <метка> --id <идентификатор>
где:

  • --type cert — тип загружаемых данных (в данном случае — сертификат);
  • -w <имя_файла> — имя загружаемого файла;
  • --label <метка> — метка создаваемого объекта;
  • --id <идентификатор> — идентификатор ранее созданной ключевой пары.

Сохранять на ключевых носителях можно не только ключи и сертификаты, но и любые данные. При этом:

  • используется соответствующий тип данных (при использовании pkcs11-tool — тип данных data, для других инструментов см. документацию);
  • идентификатор (опция --id) не используется.

Объекты типа данные идентифицируются метками (--label) и именами приложений (--application-label) (а также идентификаторами приложений (OID), но их получение требует регистрации).

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

Например, команда для сохранения данных в режиме обычного USB-накопителя:

pkcs11-tool --module "<интерфейсный_модуль>" --pin <PIN-код> --type data --write <имя_файла> --label <метка>


Для использования встроенной защиты ключевого носителя данные следует сохранять с указанием ключа --private, например:

pkcs11-tool --module "<интерфейсный_модуль>" --pin <PIN-код> --type data --write <имя_файла> --label <метка> --private


Экспорт данных, сохраненных в ключевом носителе

Для экспорта сохраненных данных используется опция --read. По умолчанию объект выводится в стандартный вывод (stdout), файл для сохранения объекта можно указать с помощью опции --output-file, например:

pkcs11-tool --module "<интерфейсный_модуль>" --type <тип_данных> --read --label <метка> --application-label <имя_приложения> --output-file <имя_файла>
В примере выше для идентификации объекта используется метка объекта и метка приложения. Для идентификации криптографических объектов можно использовать числовой идентификатор (опция --id). Для получения доступа к защищенным объектам можно использовать опции --login (PIN-код будет запрошен в интерактивном режиме) или --pin для указания PIN-кода в командной строке.

Удаление данных

Для удаления данных используется опция --delete-object. Остальные опции (идентификаторы объекта, PIN-код) такие же, как в примерах выше:

pkcs11-tool --module "<интерфейсный_модуль>" --type <тип_данных> --delete-object --label <метка> --application-label <имя_приложения>

  • Нет меток