2009-07-29 160 views
40

I read que hay tipos de datos que hacen el cifrado para que las contraseñas estén protegidas en su base de datos.¿Cuál es el tipo de datos para una contraseña en PostgreSQL?

Utilizo en este momento varchar para almacenar contraseñas. He tenido la idea de que de alguna manera debería aplicar una función SHA-512 a la contraseña y poner esos datos en algún lugar de manera que se elimine la contraseña de texto sin formato.

Sin embargo, el tipo de datos en Perl me sugiere que hay una mejor manera en PostgreSQL que varchar.

¿Cuál es el tipo de datos para una contraseña en PostgreSQL?

Respuesta

42

Jeff tiene un buen artículo titulado You're Probably Storing Passwords Incorrectly. Este artículo analiza varias formas de almacenar contraseñas en bases de datos y algunos de los errores comunes con los que se puede encontrar. En particular, se analiza el uso de algoritmos hash, tablas rainbow y el uso de "sal" para reducir el riesgo de un archivo de contraseña comprometido.

El uso del tipo de datos varchar es perfectamente adecuado para almacenar una contraseña correctamente hash. Por ejemplo, aquí es parte de mi registro de cuenta real de una base de datos de producción:

=> select account_id, email, salt, passhash from account where email = '[email protected]'; 
account_id |  email  |  salt  |     passhash     
------------+------------------+------------------+------------------------------------------ 
      1 | [email protected] | GFR9uT4N4Tzl3vnK | 2c2bf00079a6d49a8f7fb17cefb52fdb41a4b043 
(1 row) 

En este caso, passhash es la representación hexadecimal del SHA-1 de la sal concatenado con mi contraseña.

+0

En caso de ser la sal diferente para cada cuenta en la tabla Cuentas? –

+1

Sí, se requiere una sal diferente. De lo contrario, es lo mismo que nada de sal. Jeff lo cubre en su artículo. –

+0

Gran artículo al que te refieres. El autor sugiere sales (mucho) más largas que las que usa, ¿cuál es su razón de ser para usar sales mucho más cortas? – mvexel

4

Instalar "módulo chkpass"

Este módulo implementa un chkpass tipo de datos que está diseñado para el almacenamiento de contraseñas cifradas. Necesita instalar el paquete contrib postgresql y ejecutar el comando CREATE EXTENSION para instalarlo.

En Ubuntu 12.04 que sería algo así:

sudo apt-get install postgresql-contrib 

Reiniciar el servidor PostgreSQL:

sudo /etc/init.d/postgresql restart 

Todo extensión disponible está en:

/opt/PostgreSQL/9.5/share/postgresql/extension/ 

Ahora puede ejecutar el Comando CREAR EXTENSIÓN.

Ejemplo:

CREATE EXTENSION chkpass; 

CREATE TABLE accounts (username varchar(100), password chkpass); 
INSERT INTO accounts(username, "password") VALUES ('user1', 'pass1'); 
INSERT INTO accounts(username, "password") VALUES ('user2', 'pass2'); 

select * from accounts where password='pass2'; 

devoluciones

username | password 
--------------------------- 
"user2" | ":Sy8pO3795PW/k" 
+0

¿Cuál es el beneficio de este paquete en comparación con la respuesta de grep donde sal y hash? –

+1

chkpass usa el algoritmo crypt. Hash es un algoritmo que tuvo varios casos de contraseñas filtradas en 2012. Salt es una combinación, una acumulación antes del hash que aumenta la seguridad. La ventaja de usar chkpass es la facilidad de la comparación textual. –

+0

¿Puede el administrador ver tener la capacidad de ver contraseñas reales? Creo que no deberían. ¿Cuál es el algoritmo de la cripta? –

Cuestiones relacionadas