¿Qué tan segura es la contraseña de un usuario de Postgres?
Cuando se crea un nuevo usuario de la base de datos, ¿la contraseña almacenada está encriptada y incluida?
¿Qué tan segura es la contraseña de un usuario de Postgres?
Cuando se crea un nuevo usuario de la base de datos, ¿la contraseña almacenada está encriptada y incluida?
Postgres usa MD5 como algoritmo con el nombre de usuario como "salt".
El uso de una sal normalmente evita el cálculo de hashes, por ejemplo en tablas de arco iris. Usar el nombre de usuario como salt solo cubre parcialmente este problema. Es posible calcular previamente los hashes para nombres de usuario comunes, como "root" o "postgres".
Además, MD5 es uno de los hashes criptográficos más rápidos que existen. Es posible calcular 10¹¹ hashes MD5 por segundo . Esto hace posible descifrar las contraseñas utilizando un ataque de fuerza bruta, es decir, probar muchas contraseñas. Las funciones de hash de contraseña modernas están diseñadas para ser lentas, por lo que un ataque de fuerza bruta toma mucho tiempo.
En mi opinión, la técnica de almacenamiento de contraseñas de Postgres no cumple con los estándares de seguridad modernos. Puede mitigar esto utilizando una contraseña larga y aleatoria y no reutilizando esa contraseña en ningún otro lugar.
Pg almacena sus contraseñas en pg_authid
Contraseña (posiblemente encriptada); nulo si no hay ninguno. Si la contraseña está cifrada, esta columna comenzará con la cadena md5 seguida de un hash MD5 hexadecimal de 32 caracteres. El hash MD5 será de la contraseña del usuario concatenada con su nombre de usuario. Por ejemplo, si el usuario joe tiene la contraseña xyzzy, PostgreSQL almacenará el hash md5 de xyzzyjoe . Se asume que una contraseña que no sigue ese formato no está encriptada.
Puedes verlos ejecutando
SELECT rolpassword
FROM pg_authid;
Nota, no todos los usuarios autentifican md5. Puede tener usuarios que se autentiquen contra casi cualquier cosa utilizando los módulos PG Auth o un módulo PAM.
Lea otras preguntas en las etiquetas hash salt postgresql