DALL·E 2024 02 13 20.56.43 Imagine a 1024x1024 pixels illustration that symbolize a guide to Postgres encryption for beginners. It should show a stylized Postgres database with

Guía de encriptación en PostgreSQL

(para Principiantes)

En el artículo de hoy vamos a abordar los diferentes métodos que podemos usar para encriptar y desencriptar datos en una base de datos PostgreSQL.

Es necesario tener algo de experiencia en Linux y PostgreSQL, mientras que la experiencia en encriptación no es obligatoria, pero es útil tenerla.

Primero, hablaremos de algunas motivaciones para utilizar la encriptación y su importancia en la seguridad de datos, y luego veremos algunas de las funciones ofrecidas por PostgreSQL para implementar encriptación.

¡Al lío!

Introducción

Aunque rara vez interactuamos con la encriptación en nuestra vida diaria, es fundamental para la seguridad de nuestra información confidencial, como las finanzas y la atención médica, y mucho más.

Por lo general, la encriptación se abstrae del usuario final, ocultando toda la complejidad matemática y los algoritmos, lo que nos permite simplemente ingresar nuestra contraseña y hacer que todo funcione.

clint patterson dYEuFB8KQJk unsplash

Sin embargo, hay compensaciones para estas abstracciones ya que tenemos que confiar en que la persona que desencripta nuestros datos no hará una copia o cualquier otro comportamiento malicioso…

En este post, repasaremos los diferentes métodos que utiliza PostgreSQL para encriptar datos y las compensaciones que encontramos al usarlos.

Opciones de encriptación

Postgres tiene hasta 6 niveles de encriptación admitidos por el software de la base de datos. Estos son:

Encriptación de contraseñas

Probablemente la forma más sencilla y comúnmente utilizada de encriptación. Antes de ser enviada al servidor, el cliente Postgres encriptará la contraseña del usuario antes de almacenarla dentro de la base de datos.

Esto significa que la contraseña en texto plano nunca se almacena en el servidor, lo que dificulta mucho que un posible atacante la obtenga.

Encriptación para columnas específicas

El módulo pgcrypto contiene funciones criptográficas para encriptar datos almacenados en columnas específicas de la base de datos.

Para desencriptar los datos, el cliente debe enviar la clave, y los datos se desencriptan en el lado del servidor.

Esto significa que tanto la clave como los datos quedan expuestos brevemente en el extremo del servidor para cualquier persona con permisos elevados (como un administrador de la base de datos).

Encriptación de particiones de datos

Este método no se refiere específicamente a PostgreSQL, sino que se refiere al sistema operativo subyacente que utiliza la encriptación al escribir datos en el disco.

Esto significa que el servidor Postgres tiene encriptación a nivel de unidad para evitar que alguien pueda leer los datos si tiene acceso físico al servidor.

Encriptación de datos a través de una red

Engloba los diferentes métodos en los que PostgreSQL puede configurarse para transferir datos de manera segura a través de la red.

Tanto SSL como GSSAPI se pueden configurar en el pg_hba.conf especificando un host y su encriptación.

SSH (que os sonará seguro) también es un protocolo aceptado por Postgres y me atrevería a decir que el más común de todos.

Autenticación de host SSL

Para este nivel, tanto el cliente como el servidor deben configurarse para intercambiar certificados SSL en un handshake SSL / TLS.

Una vez que funciona, este método evita que un posible atacante finja ser el servidor y acceda a información restringida, también conocido como ataque Man-in-the-middle.

Encriptación en el cliente

Es la última que veremos y, posiblemente, la opción más segura. Consiste en que el cliente encripte los datos directamente antes de enviarlos al servidor.

Esto significa que el cliente debe administrar toda la encriptación y desencriptación en su extremo, pero también elimina la posibilidad de que un administrador malintencionado tenga la capacidad de leer sus datos.

Funciones de encriptación

Recordad que todas estas funciones (y más) están disponibles en la documentación oficial. Concretamente en el módulo dedicado a pgcrypto.

Función Digest:

digest(data text, type text) returns bytea

Esta función transforma los datos almacenados en la variable ‘data‘ en un hash binario representado como una matriz de bytes basada en el método de encriptación especificado en type.

El algoritmo de hashing soporta md5, sha1, sha224, sha256, sha384 y sha512

Encrypt y Decrypt

Estas funciones se limitan a ejecutar un cifrado sobre los datos ingresados y no proporcionan ningún tipo de gestión de claves.

En otras palabras, se espera que el usuario (tú) maneje toda esta gestión, por lo que generalmente se desaconseja su uso en el mundo real.

encrypt(data bytea, key bytea, type text) returns bytea

decrypt(data bytea, key bytea, type text) returns bytea

Como podemos ver, tanto la función de cifrado como la de descifrado toman los mismos argumentos y devuelven el mismo tipo.

La única diferencia es que ‘data’ es una matriz de bytes en texto plano en encrypt(), mientras que en decrypt(), ‘data’ es una matriz de bytes de los datos encriptados.

Conclusión

En este post hemos visto las numerosas funciones que PostgreSQL ofrece para encriptar y desencriptar datos en y alrededor de su base de datos.

En general, la encriptación es de vital importancia para nuestra seguridad en línea y es necesaria de entender si planeas desarrollar cualquier cosa que requiera una conexión de red.

Espero que haberte ayudado a entender un poquito mejor esto de la encriptación y cómo funciona dentro de PostgreSQL.

Únete a la lista de emails para no perderte nada

No tengo ningún producto, publicidad, ni nada que venderte. De hecho, aún no tengo nada que hacer con estos emails. Pero si te interesa estar en contacto o no perderte las próximas actualizaciones en el futuro… Ya sabes 😉

    ¿Quieres trabajar con nosotros?

    Ya sea que necesites mejorar el rendimiento de consultas existentes, planificar y ejecutar migraciones de datos críticas, diseñar bases de datos desde cero o mantener un entorno de base de datos estable, estamos aquí para ayudarte.

    Trabajamos con una amplia variedad de sistemas de gestión de bases de datos (DBMS) y estamos comprometidos en proporcionar soluciones adaptadas a tus necesidades específicas. Puedes consultar nuestra lista completa de servicios aquí.

    Confía en nosotros para optimizar tus bases de datos y liberar tiempo y recursos para que puedas concentrarte en lo que realmente importa: hacer crecer tu negocio.

    ¡Contáctanos hoy mismo y descubre cómo podemos ayudarte a lograr un rendimiento óptimo en tu entorno de bases de datos


    Comentarios

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *