Инструкция по использованию 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 или по ссылке https://www.rutoken.ru/products/all/rutoken-ecp/.
Для начала работы с QSS требуется установить QHB на ваш компьютер и инициализировать кластер БД (обычно путь к данным кластера экспортируется в переменную среды PGDATA). Если вы устанавливаете пакеты из репозитория QHB, то вы можете воспользоваться инструкцией (см. Краткая инструкция по начальной загрузке и установке).
Так же для работы требуется установленный модуль PKCS#12. Для Рутокен его можно скачать по ссылке https://www.rutoken.ru/support/download/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
для дебиан/астра:
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", также нужен для добавления токена в 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 дополнительного ключа (если Админ один - можете пропустить этот пункт):
В отдельном терминале запустите qss_pinpad.
Подключите токен нового Админа и токен уже зарегистрированного Админа
Для добавления в 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 (вариант хранения пользовательского ключа на крипто-токене) порядок действий будет следующий:
-
В отдельном терминале запустить qss_pinpad (будет использоваться для ввода пин-кода токена)
-
Подключить USB носитель Админа с токеном
-
Выполнить запуск сервера БД с помощью утилиты qhb_ctl от имени пользователя QHB:
qhb_ctl start
-
Ввести пин-код в терминале с qss_pinpad
-
Отключить USB носитель (токен)