См. также:
- Двухфакторная PAM-аутентификация с использованием ключевых носителей: пакет libpam-csp;
- Двухфакторная PAM-аутентификация с использованием ключевых носителей: пакет libpam-p11;
- Двухфакторная PAM-аутентификация с использованием ключевых носителей: пакет libpam-pkcs11;
- Двухфакторная аутентификация в доменах;
- Программный эмулятор ключевых носителей softhsm2.
Данная статья применима к:
- 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-устройства. При этом:
Для корректной передачи и дальнейшей работы устройства в ВМ на хост-машине должна быть отключена служба pcscd:
sudo systemctl stop pcscd.service pcscd.socket- После перезапуска ВМ устройство может отображаться, как переданное ВМ, но быть неработоспособно. Для предотвращения/устранения этой проблемы следует переподключать устройства после перезапуска ВМ.
Программное обеспечение для работы с ключевыми носителями
Инструменты командной строки
opensc-asn1 | opensc | Инструмент для работы с данными в формате ASN.1 | Основной репозиторий Astra Linux |
opensc-explorer | opensc | Инструмент для интерактивной и пакетной работы с ключевыми носителями | Основной репозиторий Astra Linux |
opensc-notify | opensc | Инструмент для мониторинга событий, связанных с ключевыми носителями | Основной репозиторий Astra Linux |
opensc-tool | opensc | Инструмент командной строки для работы с ключевыми носителями | Основной репозиторий Astra Linux |
p11-kit | p11-kit | Инструмент командной строки для работы с ключевыми носителями PKCS#11 | Основной репозиторий Astra Linux |
p11tool | gnutls-bin | Инструмент командной строки для работы с ключевыми носителями PKCS#11 | Базовый репозиторий Astra Linux |
pcsc_scan | pcsc-tools | Сканер подключенных ключевых носителей | Основной репозиторий Astra Linux |
pkcs11-data | pkcs11-data | Инструмент командной строки для работы с ключевыми носителями PKCS#11 | Репозиторий Debian |
pkcs11-register | opensc | Инструмент командной строки для регистрации ключевых носителей PKCS#11 в известных приложениях (Chrome, Firefox, Thunderbird, Seamonkey) | Основной репозиторий Astra Linux |
pkcs11-tool | opensc | Инструмент командной строки для работы с ключевыми носителями PKCS#11 | Основной репозиторий Astra Linux |
pkcs15-crypt | opensc | Инструмент командной строки для выполнения криптографических операций с ключевыми носителями PKCS#15 | Основной репозиторий Astra Linux |
pkcs15-init | opensc | Инструмент командной строки для инициализации ключевых носителей PKCS#11 | Основной репозиторий Astra Linux |
pkcs15-tool | opensc | Инструмент командной строки для работы со структурами данных 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.so | libp11-dev | Библиотека C, стандартная ссылка на актуальную реализацию для разработчиков. | Базовый репозиторий Astra Linux |
libp11.so.3 libp11.so.3.4.1 | libp11-3 | Библиотека C, актуальная реализация. | Основной репозиторий Astra Linux |
softhsm2-util | softhsm2 | Инструмент командной строки из пакета softhsm2. | Основной репозиторий Astra Linux |
Модули аутентификации
pam_csp | libpam-csp | Модуль аутентификации по паролю, сохраненному в токене. Для доступа к сохраненному паролю используется PIN-код. Допускает использование пассивных токенов | Только при условии использования csp-monitor. | Основной репозиторий Astra Linux |
pam_p11 | libpam-p11 | Модуль аутентификации по сертификату. Проверка сертификата выполняется с помощью неизвлекаемого ключа. Требует использования активного токена | Нет | Основной репозиторий Astra Linux |
pam_pkcs11 | libpam_pkcs11 | Универсальный модуль аутентификации. Возможна настройка разных способов проверки, в том числе без использования токенов (LDAP) | Да | Основной репозиторий Astra Linux |
pam_sss | sssd | Универсальный модуль аутентификации в домене службы sssd. Поддерживает аутентификацию с использованием ключевых носителей. | Нет | Основной репозиторий Astra Linux |
Дополнительные библиотеки для работы с ключевыми носителями
Архитектура x86-64: /usr/lib/x86_64-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.so | ifd-rutokens | Драйвер для токенов Rutoken S | https://www.rutoken.ru/support/download/nix/ |
/usr/lib/librtpkcs11ecp.so | librtpkc11ecp | Интерфейсная библиотека PKCS#11/PKCS#15 для токенов Рутокен ЭЦП | https://www.rutoken.ru/support/download/nix/ |
/usr/lib/libjcPKCS11-2.so | jcpkcs11-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. Для установки пакета:
- Загрузить актуальную версию по ссылке: https://www.rutoken.ru/support/download/pkcs/.
Выполнить установку из загруженного файла:
sudo apt install ./librtpkcs11ecp_*_amd64.deb
В разных обновлениях Astra Linux и на разных аппаратных платформах эта библиотека может размещаться в различных каталогах. Далее в примерах предполагается, что библиотека расположена в файле /usr/lib/librtpkcs11ecp.so (актуально для платформы x86-64). Для того, чтобы определить реальное расположение библиотеки, можно использовать команду:
Драйверы Рутокен S
Драйверы Рутокен S (библиотека librutokens.so) представлены в пакете ifd-rutokens. Для установки пакета:
- Загрузить актуальную версию по ссылке: https://www.rutoken.ru/support/download/get/rtDrivers-x64-deb.html.
Выполнить установку из загруженного файла:
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 и может быть установлен с помощью графического менеджера пакетов или командой:
После установки пакета:
- Для использовании модуля 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
- Указать интерфейсные библиотеки ключевых носителей, с которыми будет осуществляться взаимодействие через libpkcs11.so, для чего создать соответствующие файлы в каталоге /etc/pkcs11/modules/ (предполагается, что интерфейсные модули установлены):
- Для токенов Аладдин:echo -e "module: /usr/lib/libjcPKCS11-2.so" | sudo tee /etc/pkcs11/modules/aladdin.module
- Для токенов Рутокен:echo -e "module: /usr/lib/librtpkcs11ecp.so" | sudo tee /etc/pkcs11/modules/rutoken.module > /dev/null
- Для токенов Аладдин:
Специально указывать модуль в конфигурации openssl нет необходимости. Проверить готовность модуля можно командами:
пример вывода команды:
(pkcs11) pkcs11 engine
[ available ]
или использовать инструмент командной строки p11toool (см. ниже).
Инструмент командной строки p11tool
Для установки инструмента командной строки p11tool:
- Для обновлений, вышедших ранее Astra Linux Special Edition 1.8: подключить базовый репозиторий.
Установить пакет gnutls-bin:
sudo apt install gnutls-bin- При необходимости использовать интерфейсные библиотеки производителей:
Создать каталог /etc/pkcs11/modules/:
sudo mkdir -p /etc/gnutls- Создать файлы в каталоге /etc/pkcs11/modules/ (общая системная конфигурация). Минимальное содержимое файлов — строка в формате module: <путь_к_библиотеке>, подробнее см. man pkc11.conf. Пользовательские конфигурации могут быть размещены в каталоге ~/.config/pkcs11/pkcs11.conf,
Основные действия с ключевыми носителями
Поиск и идентификация подключенных ключевых носителей
Физические устройства — инструмент lsusb
Самой надежной командой для поиска подключенных токенов является команда lsusb. Эта команда:
- не требует установки никаких дополнительных пакетов;
- распознает подключенные устройства на физическом уровне, даже если они программно полностью несовместимы с используемой ОС.
В том числе, командой обнаруживаются токены, работающие по стандартам U2F (FIDO) и FIDO2.
Пример вывода команды (для наглядности приведена только информация о токенах):
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, к которым настоящая статья неприменима.
- для токенов Рутокен (подробнее см. ATR-строки и PID/VID Рутокен):
Инструмент командной строки pcsc_scan
Инструмент командной строки pcsc_scan представлен в пакете pcsc-tools. Установка пакета:
Служба pcscd не работает постоянно. Служба останавливается после 60 секунд неактивности и активируется по мере поступления запросов через сокет pcscd.socket. При недостатке вычислительных ресурсов (например, создать дефицит ресурсов можно включив режим отладки в службе pcscd) активация по запросу может выполняться слишком долго, что ведет к появлению случайных ошибок (например, не обнаруживается служба, не обнаруживаются ключевые носители и пр.).
Команда pcsc_scan без аргументов выводит значительный объем информации об обнаруженных ключевых носителях, после чего ожидает подключение новых устройств (прекратить ожидание можно, нажав Ctrl+C):
Пример вывода команды:
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):
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. Для этого:
Выполнить команду:
sudo systemctl edit pcscd.serviceВвести текст:
[Service] ExecStart= ExecStart=/usr/sbin/pcscd --foreground
- Сохранить изменения.
Перезапустить службу pcscd.service:
sudo systemctl restart pcscd.service
Инструмент командной строки p11tool
Инструмент командной строки p11tool представлен в пакете gnutls-bin и может быть установлен командой:
С помощью установленного инструмента список подключенных ключевых носителей можно получить используя опцию --list-tokens:
... 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:
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 доступных ключевых носителей:
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
При необходимости можно зафиксировать интерфейсную библиотеку. Например, для интерфейсной библиотеки Рутокен:
pkcs11:model=Rutoken%20lite;manufacturer=Aktiv%20Co.;serial=419b79e8;token=419b79e8
pkcs11:model=Rutoken%20ECP;manufacturer=Aktiv%20Co.;serial=413a49ed;token=413a49ed
Инструмент командной строки pkcs11-tool
Инструмент командной строки pkcs11-tool представлен в пакете opensc и может быть установлен командой:
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). Например, для интерфейсного модуля Рутокен:
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
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
Инструмент командной строки opensc-tool
Инструмент командной строки opensc-tool представлен в пакете opensc и может быть установлен командой:
# 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
Выбор ключевого носителя для работы, чтение каталога данных с ключевого носителя
Инструмент командной строки p11tool
При работе с инструментом p11tool ключевой носитель задается указанием его URL. Например, чтение каталога данных ключевого носителя:
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:
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-код для аутентификации будет запрошен в интерактивном режиме):
Далее в примерах для упрощения изложения опции выбора ключевого носителя по возможности не указываются. 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-кода. Кроме этого, требуется указать интерфейсный модуль, соответствующий ключевому носителю:
Инициализация ключевого носителя на уровне стандарта PKCS#15 с помощью инструмента pkcs15-init применима к токенам Рутокен. См. Двухфакторная аутентификация: libpam-csp и csp-monitor.
Создаваемая при этом файловая система несовместима с файловой системой, создаваемой при форматировании токена инструментами производителя.
Изменение SO-PIN-кода
Для смены SO-PIN-кода требуется указать действующий и новый коды:
Изменение PIN-кода
При получении ключевого носителя необходимо получить PIN-код. После получения необходимо сменить PIN-код.
В качестве PIN-кода недопустимо использовать значения, используемые производителем носителя по умолчанию. Для уточнения см. документацию на используемые ключевые носители .
Превышение установленного количества попыток ввода PIN-кода ведет к блокировке ключевого носителя.
Некоторые модели могут быть разблокированы администратором, некоторые блокируются необратимо. Для уточнения см. документацию на используемые ключевые носители .
Изменение PIN-кода выполняется его владельцем. Для изменения требуется указать действующий и новый коды:
Создание ключевой пары
При работе с активными ключевыми носителями создание ключевой пары выполняется встроенным криптопровайдером на самом носителе:
- --keypairgen — команда создания ключевой пары;
- --label <метка> — метка (имя) ключевой пары;
- --key-type <алгоритм> — алгоритмы, применяемые для создания ключа. Обычно используется rsa:2048, для ключевых носителей с апплетами Аладдин ГОСТ можно использовать алгоритм GOSTR3410-2001:A.
- --id <идентификатор> — идентификатор ключевой пары.
Подготовка ключевых пар для размещения в пассивных ключевых носителях может быть выполнена с помощью инструмента openssl. См. документацию man openssl-genrsa.
Создание сертификата открытого ключа
Для создания сертификата открытого ключа используется ранее созданная ключевая пара. Создание сертификата выполняется с помощью инструмента openssl. Необходимые команды могут быть введены в командной сессии openssl. При работе в сценариях для ввода команд может быть использовано перенаправление ввода. Недостающая информация будет запрошена в интерактивном режиме. Пример использования перенаправления ввода:
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' — необязательный параметр с указанием реквизитов запроса на сертификат. Если параметр не указан — реквизиты будут запрошены в интерактивном режиме;
- -key <URL_ключа> — указание, какой закрытый ключ следует использовать для подписания сертификата. Некоторые возможные варианты указания URL:
- 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
MODULE_PATH = /usr/lib/librtpkcs11ecp.so
Сохранение данных в ключевом носителе
Созданный на предыдущем шаге сертификат загружается (импортируется) в ключевой носитель следующей командой:
- --type cert — тип загружаемых данных (в данном случае — сертификат);
- -w <имя_файла> — имя загружаемого файла;
- --label <метка> — метка создаваемого объекта;
- --id <идентификатор> — идентификатор ранее созданной ключевой пары.
Сохранять на ключевых носителях можно не только ключи и сертификаты, но и любые данные. При этом:
- используется соответствующий тип данных (при использовании pkcs11-tool — тип данных data, для других инструментов см. документацию);
- идентификатор (опция --id) не используется.
Объекты типа данные идентифицируются метками (--label) и именами приложений (--application-label) (а также идентификаторами приложений (OID), но их получение требует регистрации).
Например, команда для сохранения данных в режиме обычного USB-накопителя:
Для использования встроенной защиты ключевого носителя данные следует сохранять с указанием ключа --private, например:
Экспорт данных, сохраненных в ключевом носителе
Для экспорта сохраненных данных используется опция --read. По умолчанию объект выводится в стандартный вывод (stdout), файл для сохранения объекта можно указать с помощью опции --output-file, например:
Удаление данных
Для удаления данных используется опция --delete-object. Остальные опции (идентификаторы объекта, PIN-код) такие же, как в примерах выше: