2009-07-29 7 views
40

I read że istnieją typy danych, które szyfrują, więc hasła są zabezpieczone w bazie danych.Jaki jest typ danych dla hasła w PostgreSQL?

Używam w tej chwili varchar do przechowywania haseł. Wpadłem na pomysł, że powinienem jakoś zastosować funkcję SHA-512 do hasła i umieścić je gdzieś tak, aby usunąć hasło w postaci zwykłego tekstu.

Jednak typ danych w Perlu sugeruje mi, że w PostgreSQL jest lepszy sposób niż varchar.

Jaki jest typ danych dla hasła w PostgreSQL?

Odpowiedz

42

Jeff ma dobry artykuł pod tytułem You're Probably Storing Passwords Incorrectly. W tym artykule omówiono różne sposoby przechowywania haseł w bazach danych oraz niektóre typowe pułapki, które można napotkać. W szczególności omawia zastosowanie algorytmów mieszających, tablic tęczowych i użycia "soli" w celu zmniejszenia ryzyka związanego z włamaniem do pliku haseł.

Używanie typu danych varchar doskonale nadaje się do przechowywania poprawnie haszowanego hasła. Na przykład tutaj jest częścią mojego aktualnego rekordu konta z bazy produkcyjnej:

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

W tym przypadku passhash jest reprezentacja hex z SHA-1 soli połączonego z moim hasłem.

+0

powinien być solą różne dla każdego konta w tabeli Konta? –

+1

Tak, potrzebna jest inna sól. W przeciwnym razie jest tak samo jak brak soli. Jeff opisuje to w swoim artykule. –

+0

Świetny artykuł, do którego się odnosisz. Autor sugeruje (dużo) dłuższe sole niż używasz, jakie jest twoje uzasadnienie użycia znacznie krótszych soli? – mvexel

4

Install „moduł chkpass”

Ten moduł implementuje chkpass typ danych, który jest przeznaczony do przechowywania zaszyfrowanych haseł. Musisz zainstalować pakiet postgresql contrib i uruchomić polecenie CREATE EXTENSION, aby zainstalować.

W Ubuntu 12.04 byłoby to tak:

sudo apt-get install postgresql-contrib 

Restart serwer PostgreSQL:

sudo /etc/init.d/postgresql restart 

Wszystkie dostępne rozszerzenie są w:

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

Teraz można uruchomić CREATE EXTENSION command.

Przykład:

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'; 

Zwraca

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

Co jest zaletą tego pakietu w porównaniu do odpowiedzi grepa, gdzie sól i hash? –

+1

chkpass używa algorytmu kryptograficznego. Hash jest algorytmem, który miał kilka przypadków wycieków haseł w 2012 roku. Sól jest połączeniem, akcją przed hash, co zwiększa bezpieczeństwo. Zaletą korzystania z chkpass jest łatwość porównywania tekstowego. –

+0

Czy administrator może wyświetlać prawdziwe hasła? Myślę, że nie powinni. Czym jest algorytm kryptowy? –

Powiązane problemy