Kodowanie, hashowanie haseł - osobna"sól" dla każdego hasła?

0

Jestem właśnie na etapie zabezpieczenia haseł i tak się zastanawiam którą metoda będzie najbardziej opcjonalna, ergonomiczna.
Doszedłem do wniosku że sha224 będzie chyba jedną z najbezpieczniejszych metod zarazem też w miarę lekką dla naszego serwera (Jeżeli macie inne zdanie to śmiało piszcie). Mimo wszystko chciałbym przesolić moje hasła i teraz pytanie:

Po co dla każdego hasła stosować osobną sól i przetrzymywać ją w bazie?
Czy nie jest tak że kiedy baza trafi w niepowołane ręce to wtedy haker i tak sobie zobaczy tą sól i rozkoduje mu potrzebne hasła?
Nie lepiej i bezpieczniej taką sól jedną przechować na pliku w serwerze?
Co myślicie o dodatkowym zabezpieczeniu, które już na poziomie strony pliku php zmieni wszystkie litery alfabetu albo cyfry?

1

W bazie danych masz przechowywane zahashowane hasło czyli np. "hasło" + "sól", chodzi o to, że jak ktoś Ci się włamie np. korzystając z sql injection i ukradnie bazę danych, to nie będzie znał "soli", bo ona dodawana jest na etapie hashowania i zdefiniowana zwykle w głównych konfigach serwisu czyli idąc tym tropem - NIE jest zapisywana w bazie. Jak ktoś Ci się włamie na serwer i uzyska dostęp do kodów, konfigów i baz danych to nic Ci nie pomoże ;)

0

Jak ktoś się włamie na serwer to ja to wiem że szans nie mam żadnych : ). Myślałem że sól jakoś trafia wygenerowana do bazy, a później stamtąd jest ściągana i weryfikowana(gdzieś tak przeczytałem że jakiś cms ma). Wydało mi się to totalnie bezsensu. Ja uczyłem się tak że na poziomie kodu tą sól tworzyłem. Czyli w sumie jeżeli użyje nawet md5 a w kodzie przemieszam dodatkowo hasło, to ktoś bez włamania na serwer nie dowie się jakie to były hasła. Czyli jedyną metoda na dzień dzisiejszy jest zastosowanie sha2 czyli np sha224 czy 512, by mieć pewność że kodu nikt nie złamie.

0

zastanawiam się jeszcze nad jedną rzeczą, czemu drupal 7 mimo ze używa sha512 to ilość znaków ma jakby skróconą? Możliwe że po prostu kod jest ucięty?

przykładowe hasło drupal :
$S$ Dxl65W9p 07LfQU7jvy5CnsyDpMoLujiAgzy123khcg1OJi/P9pKS
Z czego pierwsze 3 dodawane sa w drupallu wersji 7 a od 4 do 11 to sól.

przykładowe haslo czyste z sha512:
cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e

2

Doszedłem do wniosku że sha224 będzie chyba jedną z najbezpieczniejszych metod zarazem też w miarę lekką dla naszego serwera (Jeżeli macie inne zdanie to śmiało piszcie)

Ale funkcja hashująca NIE MA BYĆ lekka. Ma być ciężka. Niech się liczy nawet 3 sekundy. Po zalogowaniu i tak powinieneś używać tokenów logowania (a nie przechowywać w ciastkach loginów i haseł, nawet zaszyfrowanych), więc tylko przy logowaniu będzie "lag". A po wykradnięciu bazy i soli - wciąż nie będzie można rozkodować haseł na zasadzie wygenerowania tęczowej tablicy - bo generowanie jednego hasha zajmie te właśnie 3 sekundy - będzie to nieopłacalne - a uchroni np. konta do allegro Twoich użytkowników, jeżeli na Twojej stronie użyją takiego samego loginu i hasła. W praktyce przejęcie bazy z danymi użytkowników będzie mało szkodliwe (o ile szybko się zorientujesz, a Twoja strona nie jest istotnym miejscem w sieci (wykradnięcie hasła do forum i próba przejęcia tożsamości na nim nie jest zbyt istotna - tzn. zawsze zostaje socjotechnika w przypadku popularnego użytkownika, ale pomijam to w tym momencie).

Poczytaj: http://codahale.com/how-to-safely-store-a-password/ oraz wiele innych materiałów w necie.

0

Już wiem jak to drupal robi : ) tam jest konwertowane z sha512 na base64, dzięki czemu nie tracimy bitów, ale zmniejszamy objętość w bazie : )

0

tam jest konwertowane z sha512 na base64, dzięki czemu nie tracimy bitów, ale zmniejszamy objętość a bazie : )

ty rozumiesz co ty pleciesz? chyba nie bardzo. doczytaj sobie czym jest base64

0

Sól powinna być osobna dla każdego hasła. Dzięki temu to samo hasło zostanie zakodowane do innej postaci dla innych użytkowników.

Weźmy na przykład takiego Facebooka. Nie wiem jak solą, ale mają setki milionów użytkowników. Z tego powodu, jeśli stosowali jedną sól i mieli prosty algorytm szyfrowania typu shaX(hasło + stała globalna sól) to można by dla nich wygenerować osobną tęczową tablicę. Poza tym wspólna sól spowodowałaby, że te same hasła miałyby te same hasze co mocno przyspieszyłoby zdekodowanie masy haseł. Przy osobnych solach nie ma żadnego z tych dwóch problemów.

Nic nie stoi na przeszkodzie by mieć wiele poziomów solenia. Np lokalna sól dla każdego użytkownika + globalna sól w konfigu + sól w kodzie + itd

0

A więc podsumowując ten wątek : ) stworzyłem coś takiego : Pierw hashuje sobie sha512 zepnięte razem $data.$hasło.$salt z czego:
hasło- hasło wpisywane przez użytkownika
$data- pobierana data rejestracji z bazy
$salt - sól która jest zapisana w kodzie.

To wszystko na końcu jeszcze przerabiam(chyba dobrze to nazywam) na base64, dzięki czemu nie tracę ilości bitów które zabezpieczają mi hasło, a zarazem je skracam o niepotrzebne bity, które zajeły by mi tylko miejsca w bazie. Myślę że sobie poradziłem : )

1 użytkowników online, w tym zalogowanych: 0, gości: 1