Перейти к содержанию

SoftHSM: учебная модель PKCS#11

SoftHSM — программная реализация интерфейса PKCS#11. Она помогает освоить слоты, токены, роли пользователя, PIN и объекты сертификатов без аппаратного устройства.

В НАЙС.ОС SoftHSM используется здесь именно как учебный PKCS#11. ГОСТ-механизмы в данной сборке SoftHSM отключены. Для тестирования ГОСТ-подписей потребуется аппаратный токен с соответствующей библиотекой производителя или другая специально собранная совместимая реализация.

Проверяем инструменты

rpm -q softhsm
softhsm2-util --show-slots
find /usr/lib -name libsofthsm2.so -print 2>/dev/null

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

umask 077
LAB="$(mktemp -d)"
mkdir -p "$LAB/tokens"
printf 'directories.tokendir = %s/tokens\nobjectstore.backend = file\n' "$LAB" > "$LAB/softhsm2.conf"
export SOFTHSM2_CONF="$LAB/softhsm2.conf"
softhsm2-util --show-slots

Инициализация требует SO PIN и пользовательского PIN. Команды, передающие их через аргументы, подходят только для одноразового учебного стенда и не должны попадать в историю производственной оболочки. Лучше инициировать лабораторный токен локально, не записывать реальные PIN в сценарий автоматизации и удалить тестовые данные после занятия.

Инициализация учебного токена

На одноразовой лабораторной машине создайте новый программный токен:

read -r -s -p 'Учебный SO PIN: ' SO_PIN; echo
read -r -s -p 'Учебный PIN пользователя: ' USER_PIN; echo

softhsm2-util --init-token --free \
  --label "NiceOS-PKCS11-LAB" \
  --so-pin "$SO_PIN" \
  --pin "$USER_PIN"

unset SO_PIN USER_PIN
softhsm2-util --show-slots

Значения PIN не вводятся в историю оболочки, но на короткое время появляются в аргументах процесса softhsm2-util. Именно поэтому пример предназначен только для изолированной учебной среды с одноразовыми PIN, которые никогда не применяются в реальной инфраструктуре. Для производственных аппаратных токенов используйте защищённые средства производителя.

После инициализации команда --show-slots покажет слот, метку и факт наличия инициализированного токена. Уточните его slot ID прежде, чем выполнять дальнейшие операции.

Создание учебного ключа

Для освоения PKCS#11 выполните генерацию обычной тестовой RSA-пары внутри SoftHSM (это не ГОСТ-ключ):

MODULE=/usr/lib/pkcs11/libsofthsm2.so
pkcs11-tool --module "$MODULE" \
  --keypairgen --key-type rsa:2048 \
  --label NiceOS-Lab-Key --id 01 \
  --login

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

pkcs11-tool --module "$MODULE" --list-objects

При выборе ГОСТ-кривой для аппаратного токена нужен механизм, реально объявленный модулем производителя. Процедуру создания ключа ГОСТ выполняйте по руководству для аппаратных носителей после проверки списка --list-mechanisms.

Проверка PKCS#11

MODULE=/usr/lib/pkcs11/libsofthsm2.so
pkcs11-tool --module "$MODULE" --list-slots
pkcs11-tool --module "$MODULE" --list-mechanisms

Если путь библиотеки отличается, получите его из rpm -ql softhsm.

Чему учимся

  • Различать слот и инициализированный токен.
  • Отличать открытый объект сертификата от защищённого закрытого ключа.
  • Проверять права на операции и корректность PIN без экспериментов с блокировкой.
  • Уметь удалять учебную среду, не затрагивая рабочие токены.

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