Об этом проекте

pg_vault_tde — это расширение PostgreSQL с открытым исходным кодом, обеспечивающее прозрачное шифрование данных (TDE) для версий PostgreSQL 17 и 18, с запланированной поддержкой версии 19. Оно использует алгоритм шифрования AES-256-GCM и работает на уровне Table Access Method, что означает шифрование данных перед записью и их расшифровку при чтении без необходимости изменений в ядре PostgreSQL. Расширение поддерживает несколько решений для управления ключами: HashiCorp Vault, OpenBao, локальные хранилища PKCS#12 и HSM PKCS#11. Ключи шифрования управляются внешними системами и кэшируются в разделяемой памяти с возможностью автоматической ротации. Ключевые особенности: * **Прозрачное шифрование**: Шифрует каждую кортежу с помощью AES-256-GCM. Данные шифруются перед попаданием в менеджер хранилища и расшифровываются после извлечения. * **Варианты управления ключами**: Поддержка HashiCorp Vault/OpenBao, локальных хранилищ PKCS#12 и интеграции с PKCS#11/HSM. * **Отсутствие модификаций ядра**: Работает как подключаемое расширение. * **Шифрование индексов**: Поддерживает AES-256-SIV для B-Tree индексов (`tde_btree`). В будущих версиях планируется поддержка индексов GIN, Hash и GiST для равенства. * **Шифрование WAL**: Данные шифруются перед записью в журнал предзаписи (Write-Ahead Log, WAL). * **Настройка KMS для каждой базы данных**: Позволяет использовать разные настройки KMS для отдельных баз данных в одном кластере. * **Ротация ключей**: Поддерживает ротацию DEK для каждой таблицы (онлайн) и ротацию KEK. Установку можно выполнить путем сборки из исходного кода или с помощью `pgxn install`. Конфигурация включает добавление `pg_vault_tde` в параметр `shared_preload_libraries` в файле `postgresql.conf`, а затем создание расширения в базе данных. Для настройки выбранного провайдера KMS и его параметров используются специфические параметры GUC. Расширение определяет новый метод доступа к таблицам `encrypted_heap` для создания зашифрованных таблиц. Данные прозрачно расшифровываются при чтении. Формат данных для зашифрованных кортежей включает заголовок, вектор инициализации (IV), шифротекст, тег GCM, версию и счетчик поколений, что добавляет небольшие накладные расходы на каждую кортежу.