Cifrado de base de datos PostgreSQL
Este tutorial describe varias formas que puede elegir para cifrar sus datos en PostgreSQL.
Introducción al cifrado
El cifrado, en términos simples, es un método mediante el cual se pueden proteger los datos. Se modifica sistemáticamente para ocultar los contenidos y hacerlos ilegibles para cualquier persona excepto para los usuarios previstos.
Es posible ya que solo los destinatarios previstos tendrán una clave
para descifrar los datos para leerlos. Como resultado, cualquier información confidencial siempre se ocultará.
Se recomienda cifrar los datos en todos los casos. Sin embargo, es crucial si se envía o recibe información confidencial en un servidor no seguro o en cualquier otra situación en la que los datos estén amenazados.
Cifrado de base de datos PostgreSQL
Una base de datos se puede cifrar en tres capas diferentes según el requisito. Incluye lo siguiente:
- Solicitud de cliente
- Dispositivo de almacenamiento
- La propia base de datos.
Recuerde que el autocifrado de la base de datos suele ser la mejor forma de cifrado, ya que se sabe que cubre la mayoría de los modelos de amenazas.
Podemos aplicar otros métodos, pero el objetivo principal debe ser proteger la aplicación cliente. Entonces, aquí hay algunos enfoques que puede elegir para cifrar sus datos en PostgreSQL.
Cifrado de disco del sistema
Como sugiere el nombre, el cifrado de disco del sistema es un proceso en el que el software/hardware de cifrado de disco cifra todos los datos que se guardan en su disco.
Significa que podríamos cifrar los datos de un usuario tan pronto como se creen si el software o el hardware están programados para hacerlo simultáneamente.
Para esto, no tendrá que modificar su configuración de PostgreSQL ya que su disco está encriptado. Una manera fácil de realizar el cifrado del disco del sistema es usar una VM
en Linux.
Esto es lo que debe hacer:
Primero, cree una VM
temporal, que será un duplicado de su máquina de destino. El disco de destino puede ser uno existente, pero es mejor crear uno nuevo y agregar su base de datos más adelante.
Independientemente de su decisión, el disco de destino debe tener al menos 256MB
más que el disco de origen. A continuación, puede seguir las instrucciones que se indican a continuación:
-
Debe montar los discos de destino y de origen en la
VM
temporal. -
Conectar la
VM
a través de un puerto serie. Debe habilitar una conexión de puerto serie para realizar este paso. Puede agregarhabilitar puerto serie
con el valorVERDADERO
en los metadatos para permitir la conexión del puerto serie. -
A continuación, tendrás que hacer accesible
grub
. Para hacerlo, use el siguiente comando:grub2-mkconfig -o/boot/grub2/grub.cfg
Después de esto, reinicie el sistema y se podrá acceder a
grub
en la consola serie. -
Formatee el disco para crear un sistema sin cifrar (arranque) y cifrado. Permite que el sistema inicie
grub
para que el usuario pueda ingresar una “clave” para descifrar los datos.Podemos hacerlo usando el comando
fdisk /dev/sdb
. -
Utilice
cryptsetup
para cifrar el disco. También puede asignar una parte específica del disco que se va a cifrar. Luego, puede cifrar su base de datos siempre que exista en este disco.
Después de esto, se pueden realizar pasos adicionales, como cambiar el tamaño del disco o crear copias de seguridad.
Cifrado de datos transparente
PostgreSQL TDE
es una función que permite a un usuario realizar el cifrado de PostgreSQL para toda la base de datos utilizando el cifrado de clúster. Cifra mientras escribe en el disco y descifra mientras lee de él.
Puede realizar los siguientes pasos durante la instalación de PostgreSQL para que esto se aplique de forma predeterminada.
-
Cree un directorio para PostgreSQL. A menudo se utiliza la ubicación predeterminada.
-
Es necesario instalar bibliotecas para
bison
,readline
,flex
,zlib
,openssl
ycrypto
. Puede instalar bibliotecas adicionales si es necesario. -
Instale PostgreSQL en su sistema.
-
Cambie al usuario
postgres
usandosu - postgres
. -
Cree un clúster encriptado usando
-K
.Por ejemplo,
initdb -D /usuario/pgsql/xyz -K/usuario/pgsql/clave
. Aquí,usuario/pgsql/clave
devuelve una clave de cifrado. -
initdb
almacena el comando de cifradokey
enpostgresql.conf
.
El clúster se ha creado correctamente y ahora cifrará sus datos. Cuando un usuario ejecuta Postgres, estos clústeres encriptados no serán diferentes a los no encriptados.
La única diferencia es que se establecerá la variable de cifrado de datos.
Cifrado de una sección específica de la base de datos
Con los métodos anteriores, se cifra toda la base de datos o todas las bases de datos en PostgreSQL. Sin embargo, también puede cifrar bases de datos individuales o incluso una parte específica de una base de datos.
Lo mejor es usar una extensión como pgcrypto
para lograr esto. Así es como funciona el cifrado Postgres selectivo usando pgcrypto
:
- Habilite la extensión
pgcrypto
usandoCREAR EXTENSIÓN SI NO EXISTE pgcrypto
. - Generalmente, el comando
PGP_SYM_ENCRYPT
cifra los datos mientras quePGP_SYM_DECRYPT
los descifra.
Así es como puede cifrar y descifrar columnas en PostgreSQL.
Insertar datos cifrados en una columna
INSERT INTO temp (x, y)
VALUES
('xx', PGP_SYM_ENCRYPT('yy', 'key')::text);
Actualizar datos que ya están cifrados
UPDATE temp
SET y= PGP_SYM_ENCRYPT('content', 'key')::text
WHERE x= 'xx';
Descifrar datos para leer
SELECT x, PGP_SYM_DECRYPT(y::bytea, 'key') as data
FROM temp WHERE x= 'xx';
Eso resume algunas de las diferentes formas en que puede cifrar su base de datos según sus requisitos. El cifrado de PostgreSQL puede parecer difícil a primera vista, pero es bastante simple de lograr.
Esperamos haberte ayudado a identificar qué tipo de servicio de cifrado funciona mejor para ti para que tus datos estén siempre protegidos.
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub