Инструкция по использованию QSS в режиме хранения пользовательского ключа на крипто-токене

В данной инструкции представлены рекомендации по использованию модуля безопасного хранения QHB (Quantum Secure Storage, QSS), а также сценарий инициализации QSS c помощью утилит qss_mgr и qss_pinpad. Кроме того, здесь представлена информация об использовании Рутокена как средства безопасной двухфакторной аутентификации пользователей, генерации и защищенного хранения ключей шифрования. Более подробную информацию см. в главе Модуль безопасного хранения QSS.

В QHB допускается использование токенов, поддерживающих аппаратное шифрование с использованием алгоритма Магма ГОСТ 34.12-2018 (ГОСТ 28147-89) и поддерживающих стандарт PKCS#11. Шифрование проверялось на следующих токенах: Рутокен ЭЦП 2.0, Рутокен ЭЦП 2.0 сертифицированный ФСБ, Рутокен ЭЦП 2.0 3000, сертифицированный ФСБ (более подробную информацию о токенах можно найти на официальном сайте www.rutoken.ru или по ссылке rutoken-ecp).

Для начала работы с QSS требуется установить QHB на ваш компьютер и инициализировать кластер базы данных (обычно путь к данным кластера экспортируется в переменную среды PGDATA). Если вы устанавливаете пакеты из репозитория QHB, можно воспользоваться краткой инструкцией по начальной загрузке и установке).

Также для работы требуется установленный модуль PKCS#12. Для Рутокена его можно скачать по ссылке библиотека PKCS. Токен устанавливается по пути /usr/lib64/librtpkcs11ecp.so или /usr/lib/librtpkcs11ecp.so, в зависимости от операционной системы.

Инициализации ключей

Сервер баз данных должен остаться выключенным.

Подключите USB-носитель к компьютеру для генерации мастер ключа.

Примечание.
USB-носитель должен всегда подключаться по одному и тому же пути (здесь используется путь /mtn/flash_master для флеш-накопителя с мастер-ключом). Не следует копировать мастер-ключ на компьютер. USB-носитель с мастер-ключом (или сам файл мастер-ключа) нужен только при инициализации QSS, а потом, как и носитель с токеном, должен храниться в защищенном месте.

Выполните генерацию мастер-ключа (данную операцию необязательно производить на сервере c QHB, выполнение возможно на любой другой машине):

head -c 32 /dev/random > /mnt/flash_master/master.bin

Пользовательский ключ (далее токен) генерируется внешними программно-аппаратными средствами или утилитой magma_key_gen, которая поставляется в пакете qhb-contrib.

Проверить токен можно с помощью утилиты из пакета opensc. Если у вас нет данного пакета, его можно скачать, выполнив на терминале соответствующую команду.

Для CentOS/Fedora:

sudo dnf install opensc

для Debian/Astra:

sudo apt-get install opensc

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

pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -T

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

Available slots:
Slot 0 (0x0): Aktiv Rutoken ECP 00 00
  token label        : test_label
  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   : 20.5
  firmware version   : 23.2
  serial num         : 3c4c6444
  pin min/max        : 6/32

serial num — это уникальный серийный номер токена, который требуется для добавления токена в QSS.

Также необходимо проверить список ключей на токене. Для этого введите на своем терминале:

pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -Ol

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

Using slot 0 with a present token (0x0)
Logging in to "test_label".
WARNING: user PIN to be changed
Please enter User PIN:
Secret Key Object; unknown key algorithm 50
  label:      
  ID:         3132333435
  Usage:      encrypt, decrypt, verify

Запись unknown key algorithm 50 означает, что используется тип ключа Магма. ID отображен в шестнадцатеричном виде, в данном случае это строка «3132333435», что соответствует строке «12345». Этот ID также нужен для добавления токена в QSS. В строке Usage должно быть указано encrypt, decrypt.

Описание инициализации QSS

В отдельном терминале запустите утилиту qss_pinpad, она требуется для ввода пин-кода токена. Запуск должен производиться от пользователя, который будет добавлять ключи в QSS.

Подключите USB-носители с мастер-ключом и пользовательским ключом (токеном).

Добавьте ключи в QSS с помощью утилиты qss_mgr (здесь и далее не указаны пути до места хранения исполняемых файлов QHB). Данная командная строка требует установленной переменной среды PGDATA. В случае если PGDATA не установлена, для указания пути до папки базы данных следует использовать параметр -d либо --data-dir:

qss_mgr init \
--module=/usr/lib64/librtpkcs11ecp.so \
-m pkcs11 \
--token-serial-number 3c4c6444 \
--token-key-id 12345 \
/mnt/flash_master/master.bin

Введите пин-код токена, запрос которого будет выдан в терминале с qss_pinpad в процессе работы.

Отключите USB-носитель с мастер-ключом и токен.

Примечание.
Токеном должен «владеть» пользователь, имеющий право запускать сервер (далее Админ). Если таких Админов несколько, то у каждого должен быть свой токен.

Далее рассмотрим пример добавления в QSS дополнительного ключа (если Админ один, можете пропустить этот пункт):

  1. В отдельном терминале запустите qss_pinpad.

  2. Подключите токен нового Админа и токен уже зарегистрированного Админа.

  3. Для добавления в QSS дополнительного ключа введите:

qss_mgr add
-m pkcs11 \
--token-serial-number 3c4c6444 \
--token-key-id 3132333435 \
-n 0 \ # номер ключа уже добавленного Админа (при инициализации добавляется ключ с номером 0)

Включение режима работы сервера с QSS

Для использования QSS при работы с вашей базой данных включите шифрование путем добавления значения qss_mode = 1 в файл qhb.conf:

echo qss_mode = 1 >> $PGDATA/qhb.conf

Запуск сервера

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

  1. В отдельном терминале запустить qss_pinpad (утилита будет использоваться для ввода пин-кода токена).

  2. Подключить USB-носитель Админа с токеном.

  3. Выполнить запуск сервера баз данных с помощью утилиты qhb_ctl от имени пользователя QHB:

qhb_ctl start
  1. Ввести пин-код в терминале с qss_pinpad.

  2. Отключить USB-носитель (токен).