Sobre el proyecto

pg_vault_tde es una extensión de PostgreSQL de código abierto que proporciona Cifrado de Datos Transparente (TDE, por sus siglas en inglés) para PostgreSQL versiones 17 y 18, con soporte planeado para la versión 19. Utiliza el algoritmo de cifrado AES-256-GCM y opera en la capa de Table Access Method, lo que significa que los datos se cifran antes del almacenamiento y se descifran al momento de la recuperación, sin requerir ninguna modificación al núcleo de PostgreSQL. La extensión soporta múltiples soluciones de gestión de claves: HashiCorp Vault, OpenBao, wallets locales PKCS#12 y HSMs PKCS#11. Las claves de cifrado se gestionan externamente y se almacenan en caché en memoria compartida con capacidades automáticas de rotación. Características principales: * **Cifrado Transparente**: Cifra cada tupla con AES-256-GCM. Los datos se cifran antes de llegar al gestor de almacenamiento y se descifran después de salir de él. * **Opciones de Gestión de Claves**: Soporta HashiCorp Vault/OpenBao, wallets locales PKCS#12 e integración PKCS#11/HSM. * **Sin Modificaciones al Núcleo**: Opera como una extensión plug-and-play. * **Cifrado de Índices**: Soporta AES-256-SIV para índices B-Tree (`tde_btree`). Las versiones futuras planean soporte para índices GIN, Hash y GiST. * **Cifrado de WAL**: Los datos se cifran antes de escribirse en el Write-Ahead Log (WAL). * **Configuración de KMS por Base de Datos**: Permite diferentes configuraciones de KMS para bases de datos individuales dentro del mismo clúster. * **Rotación de Claves**: Soporta tanto rotación de DEK por tabla (en línea) como rotación de KEK. La instalación puede realizarse compilando desde el código fuente o utilizando `pgxn install`. La configuración implica modificar `postgresql.conf` para incluir `pg_vault_tde` en `shared_preload_libraries` y luego crear la extensión en la base de datos. Se utilizan parámetros GUC específicos para configurar el proveedor KMS elegido y su configuración. La extensión define un nuevo método de acceso a tablas `encrypted_heap` para crear tablas cifradas. Los datos se descifran transparentemente al momento de la lectura. El formato de red para tuplas cifradas incluye un encabezado, IV, texto cifrado, tag GCM, versión y contador de generación, añadiendo una pequeña sobrecarga por tupla.