Модуль безопасного хранения QSS
- Описание
- Использование
- Утилита
qss_mgr
и управление ключами - Утилита
qss_recrypt
используется для перешифрования таблиц БД новым набором ключей - Утилита
qss_pinpad
предназначена для ввода пина криптотокена при использовании ключей в режиме pkcs11 - Утилита
magma_key_gen
- Пример создания и включения шифрованной таблицы
- Получение тестовых ключей
- Инициализация QSS в режиме мастер ключа подписанного пользовательским ключем на файловой системе
- Инициализация QSS в режиме мастер ключа подписанного пользовательскимм ключем на крипто-токене
- Добавление возможности запуска сервера с другим пользовательским ключем
- Включение QSS на сервере
- Создание зашифрованной таблицы
- Подготовка к перешифровке БД новым мастер-ключем
Описание
Модуль безопасного хранения «КВАНТ-ГИБРИД» (Quantum Secure Storage, QSS) позволяет создавать таблицы, которые шифруются при записи на диск.
При старте сервера СУБД главный процесс QHB читает с диска мастер-ключ шифрования и сохраняет его в общей памяти, доступной дочерним процессам.
При чтении\записи блока\страницы на диск этот ключ используется для расшифровки\шифрования блока
Использование
Использование модуля в SQL:
create table t_qss(c1 int, c2 varchar) USING qss;
В qhb.conf добавляется параметр qss_mode: int
с возможными режимами:
- 0 - отключено: попытки создания новых таблиц с
using qss
или чтение\запись в уже существующие приводит к ошибкам, - 1 - включено: при старте сервера считывается qss.toml и производится загрузка актуального мастер-ключа с его расшифровкой, при любых ошибках сервер останавливается
Файлы, используемые в QSS:
.
└── PGDATA
├── base
├── qhb.conf
└── qss
├── 0.key
├── 1.key
└── qss.toml
В qss.toml
хранятся общие настройки qss (например, путь к динамической библиотеке работы с крипто-токеном) и дополнительная информация по ключам, например, режим расшифровки ключа:
- не зашифрован,
- ключ расшифровки находится в файловой системе, например, на примонтированном usb, с указанием пути
- ключ расшифровки находится на криптотокене, с указанием его идентификатора
Бинарная версии ключа (файл .key
) состоит из заголовка постоянного размера с информацией: версия (1),
режим расшифровки (должен совпадать с записью в файле-конфигурации) и 32 байтов зашифрованного мастер-ключа
Утилита qss_mgr
и управление ключами
Для управления ключами используется утилита qss_mgr со следующими командами:
bash-4.2$ qss_mgr --help
qss_mgr 1.1.0
qss configures secured storage in QHB database
USAGE:
qss_mgr [FLAGS] [OPTIONS] <SUBCOMMAND>
FLAGS:
-h, --help
Prints help information
--new
Work with key group for key replacement
-V, --version
Prints version information
OPTIONS:
-d, --data-dir <data-dir>
Specifies the directory with database data [env: PGDATA=/tmp/qhb-data/]
SUBCOMMANDS:
add Add new version of master key encrypted with other secret key
del Remove key
help Prints this message or the help of the given subcommand(s)
init Initialize config and first encrypted master key
use-new Backup current key set and replace it with new
verify Verify key or keys
Общий флаг --new
позволяет работать с "новым" набором ключей переключиться на которой можно командой use-new
Инициализация с добавлением первого мастер-ключа
Примечание!!!
в режиме pkcs11 для ввода пин-кода используется утилита qss-pinpad, запущенная на этом же компьютере в другом терминале.
Initialize config and first encrypted master key
USAGE:
qss_mgr init [OPTIONS] [master-key]
OPTIONS:
-k, --key <key> Key for encryption
-f, --key-format <key-format> Format of key for encryption: bin, base64, armored [default: bin]
--master-key-format <master-key-format> Source master key format: bin, base64, armored [default: bin]
-m, --mode <mode> Master key encrypt mode: fs, pkcs11 [default: pkcs11]
--module <pkcs11-module-path> PKCS11 module
--token-key-id <token-key-id> User key ID on token for pkcs11
--token-serial-number <token-serial-number> Token serial number for pkcs11
ARGS:
<master-key> Source master key file
Добавление мастер ключа, зашифрованного ключом другого пользователя
Add new version of master key encrypted with other secret key
USAGE:
qss_mgr add [OPTIONS] [master-key]
OPTIONS:
-k, --key <key> Key for encryption
-f, --key-format <key-format> Format of key for encryption: bin, base64, armored [default: bin]
--master-key-format <master-key-format> Source master key format: bin, base64, armored [default: bin]
-m, --mode <mode> Master key encrypt mode: fs, pkcs11 [default: pkcs11]
-n, --num <num> Previous key index to load master key from
--token-key-id <token-key-id> User key ID on token for pkcs11
--token-serial-number <token-serial-number> Token serial number for pkcs11
ARGS:
<master-key> Source master key file
Удаление ключа
Remove key
USAGE:
qss_mgr del [FLAGS] --num <num>
FLAGS:
-q, --quiet Quiet mode: don't ask for confirmation
OPTIONS:
-n, --num <num> Key index
Переключение на новый набор ключей
Backup current key set and replace it with new
USAGE:
qss_mgr use-new
Проверка ключей
Verify key or keys. If checking all keys, check that master keys is same
USAGE:
qss_mgr verify [OPTIONS]
OPTIONS:
-n, --num <num> Key index, if not specified, tries to check all keys
Утилита qss_recrypt
используется для перешифрования таблиц БД новым набором ключей
Список команд
qss_reqcrypt 1.1.0
qss recrypt QHB cluster with new master key
USAGE:
qss_recrypt [FLAGS] --data-dir <data-dir> <SUBCOMMAND>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
-v, --verbose Sets logging level to Debug [default: Info]
OPTIONS:
--data-dir <data-dir> Specifies the directory with database data [env: PGDATA=/tmp/qhb-data/]
SUBCOMMANDS:
add Scan database and add it to recrypt's config
help Prints this message or the help of the given subcommand(s)
recrypt Do database reencryption
Сканирование БД и сохранение данных о ее зашифрованных таблицах в файл конфигурации
Scan database and add it to recrypt's config
USAGE:
qss_recrypt --data-dir <data-dir> add [FLAGS] [OPTIONS]
FLAGS:
--no-timeout Run app with no timeout, use instead of -t 0s
OPTIONS:
-d, --dbname <dbname> Specifies the name of the database to connect to [env: PGDATABASE=]
-h, --host <host> Specifies the host name of the machine on which the server is running. If the value
begins with a slash, it is used as the directory for the Unix-domain socket [env:
PGHOST=/home/evgen/work/db/build/dbsockets]
-p, --port <port> Specifies the TCP port or the local Unix-domain socket file extension on which the
server is listening for connections [env: PGPORT=] [default: 5432]
-t, --timeout <timeout> Seconds to wait when attempting connection, supports "human time", -t 3s
-U, --username <username> Connect to the database as the user username instead of the default [env: PGUSER=]
Перешифрование кластера (экземпляра QHB)
При старте будет выполнена расшифровка старого мастер ключа (с запросом пина криптотокена при необходимости), а потом нового.
Do database reencryption
USAGE:
qss_recrypt --data-dir <data-dir> recrypt
Утилита qss_pinpad
предназначена для ввода пина криптотокена при использовании ключей в режиме pkcs11
Запускать следует в отдельном терминале перед стартом сервера или использованием qss_mgr для добавления или проверки ключей
Утилита magma_key_gen
magma_key_gen
предназначена для генерации пользовательских ключей QSS на крипто-токенах, поддерживающих аппаратное шифрование по ГОСТ 34.12-2018 и ГОСТ 34.13-2018
Утилита поставляется в пакете qhb-contrib
magma_key_gen
принимает следующие аргументы командной строки:
Аргумент | Описание |
---|---|
--id id | идентификатор создаваемого ключа |
--module pkcs11-module-path | путь к библиотеке крипто-токена. По-умолчанию используется /usr/lib64/librtpkcs11ecp.so |
Если ключ с таким идентификатором уже существует, программа выводит об этом сообщение и завершает работу.
Пример создания и включения шифрованной таблицы
Получение тестовых ключей
Создать мастер ключ и ключ пользователя:
head -c 32 /dev/urandom > master_key.bin
head -c 32 /dev/urandom > user1.bin
Инициализация QSS в режиме мастер ключа подписанного пользовательским ключем на файловой системе
qss_mgr init \
--module=/usr/lib64/librtpkcs11ecp.so \
--mode fs \
--key user1.bin \
master_key.bin
Инициализация QSS в режиме мастер ключа подписанного пользовательскимм ключем на крипто-токене
qss_mgr init \
--module=/usr/lib64/librtpkcs11ecp.so \
--mode pkcs11 \
--token-serial-number 3c4c6444 \
--token-key-id 1234 \
master_key.bin
Добавление возможности запуска сервера с другим пользовательским ключем
Должен быть доступен ключ первого пользователя.
qss_mgr add \
-mode fs \
-k user2.bin \
-n 0
Включение QSS на сервере
echo "qss_mode = 1" >> "${PGDATA}/qhb.conf"
qhb-ctl restart
Создание зашифрованной таблицы
create table t_qss(c1 int, c2 varchar) USING qss;
Подготовка к перешифровке БД новым мастер-ключем
Добавление нового мастер-ключа
qss_mgr --new init \
--module=/usr/lib64/librtpkcs11ecp.so \
--mode fs \
--key user1.bin \
new_master_key.bin
Сбор информации о зашифрованных таблицах в БД
Выполняется при запущенном кластере, надо повторить для всех БД в кластере, содержащих шифрованные таблицы
qss_recrypt --data-dir "${PGDATA}" add \
--dbname my
Запуск перешифровки кластера
Выполняется на остановленном кластере
qss_recrypt --data-dir "${PGDATA}" recrypt
Переключение на новый мастер-ключ
Выполняется на остановленном кластере. Переносит текущий набор ключей в папку old, заменяя его подготовленным набором ключей из папки new
qss_mgr --data-dir "${PGDATA}" use-new