Cifrado de base de datos PostgreSQL

Bilal Shahid 20 junio 2023
  1. Introducción al cifrado
  2. Cifrado de base de datos PostgreSQL
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:

  1. Debe montar los discos de destino y de origen en la VM temporal.

  2. Conectar la VM a través de un puerto serie. Debe habilitar una conexión de puerto serie para realizar este paso. Puede agregar habilitar puerto serie con el valor VERDADERO en los metadatos para permitir la conexión del puerto serie.

  3. 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.

  4. 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.

  5. 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 y crypto. Puede instalar bibliotecas adicionales si es necesario.
  • Instale PostgreSQL en su sistema.
  • Cambie al usuario postgres usando su - 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 cifrado key en postgresql.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:

  1. Habilite la extensión pgcrypto usando CREAR EXTENSIÓN SI NO EXISTE pgcrypto.
  2. Generalmente, el comando PGP_SYM_ENCRYPT cifra los datos mientras que PGP_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.

Bilal Shahid avatar Bilal Shahid avatar

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