18.8. Opciones de cifrado #

PostgreSQL ofrece cifrado en varios niveles y proporciona flexibilidad para proteger los datos contra la divulgación debido al robo del servidor de bases de datos, administradores sin escrúpulos y redes inseguras. También puede ser necesario el cifrado para proteger datos confidenciales como registros médicos o transacciones financieras.

Cifrado de contraseñas

Las contraseñas de los usuarios de la base de datos se almacenan como hashes (determinados por la configuración password_encryption), de modo que el administrador no puede determinar la contraseña real asignada al usuario. Si se utiliza el cifrado SCRAM o MD5 para la autenticación del cliente, la contraseña sin cifrar nunca está presente en el servidor, ni siquiera de forma temporal, porque el cliente la cifra antes de enviarla a través de la red. Se prefiere SCRAM porque es un estándar de Internet y es más seguro que el protocolo de autenticación MD5 específico de PostgreSQL.

Warning

El soporte para contraseñas cifradas con MD5 está obsoleto y se eliminará en una futura versión de PostgreSQL. Consulta Section 20.5 para obtener detalles sobre cómo migrar a otro tipo de contraseña.

Cifrado para columnas específicas

El módulo pgcrypto permite almacenar ciertos campos cifrados. Esto es útil si solo una parte de los datos es confidencial. El cliente proporciona la clave de descifrado y los datos se descifran en el servidor para luego enviarse al cliente.

Los datos descifrados y la clave de descifrado están presentes en el servidor durante un breve período de tiempo mientras se descifran y se comunican entre el cliente y el servidor. Esto presenta un breve momento en el que los datos y las claves pueden ser interceptados por alguien con acceso completo al servidor de bases de datos, como el administrador del sistema.

Cifrado de partición de datos

El cifrado del almacenamiento se puede realizar a nivel de sistema de archivos o a nivel de bloques. Las opciones de cifrado del sistema de archivos de Linux incluyen eCryptfs y EncFS, mientras que FreeBSD utiliza PEFS. Las opciones de cifrado a nivel de bloques o de disco completo incluyen dm-crypt + LUKS en Linux y los módulos GEOM geli y gbde en FreeBSD. Muchos otros sistemas operativos admiten esta funcionalidad, incluido Windows.

Este mecanismo evita que los datos sin cifrar sean leídos de las unidades si estas o la computadora completa son robadas. Esto no protege contra ataques mientras el sistema de archivos está montado, porque al estar montado, el sistema operativo proporciona una vista sin cifrar de los datos. Sin embargo, para montar el sistema de archivos, necesitas alguna forma de pasar la clave de cifrado al sistema operativo y, a veces, la clave se almacena en algún lugar del host que monta el disco.

Cifrar datos a través de la red

Las conexiones SSL cifran todos los datos enviados a través de la red: la contraseña, las consultas y los datos devueltos. El archivo pg_hba.conf permite a los administradores especificar qué hosts pueden utilizar conexiones no cifradas (host) y cuáles requieren conexiones cifradas con SSL (hostssl). Además, los clientes pueden especificar que se conecten a los servidores únicamente a través de SSL.

Las conexiones cifradas con GSSAPI cifran todos los datos enviados a través de la red, incluidas las consultas y los datos devueltos. (No se envía ninguna contraseña a través de la red). El archivo pg_hba.conf permite a los administradores especificar qué hosts pueden utilizar conexiones no cifradas (host) y cuáles requieren conexiones cifradas con GSSAPI (hostgssenc). Además, los clientes pueden especificar que se conecten a los servidores únicamente mediante conexiones cifradas con GSSAPI (gssencmode=require).

También se puede utilizar Stunnel o SSH para cifrar las transmisiones.

Autenticación de host SSL

Es posible que tanto el cliente como el servidor se proporcionen certificados SSL mutuamente. Requiere cierta configuración adicional en cada extremo, pero esto proporciona una verificación de identidad más sólida que el mero uso de contraseñas. Evita que una computadora se haga pasar por el servidor el tiempo suficiente para leer la contraseña enviada por el cliente. También ayuda a prevenir ataques de tipo man in the middle (hombre en el medio), donde una computadora entre el cliente y el servidor se hace pasar por el servidor, lee y transmite todos los datos entre el cliente y el servidor.

Cifrado del lado del cliente

Si el administrador del sistema de la máquina del servidor no es de confianza, es necesario que el cliente cifre los datos; de esta forma, los datos sin cifrar nunca aparecen en el servidor de bases de datos. Los datos se cifran en el cliente antes de enviarse al servidor, y los resultados de la base de datos tienen que ser descifrados en el cliente antes de ser utilizados.