(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.
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
Deja una respuesta