Solenie haseł

Odpowiedz Nowy wątek
2011-08-30 21:55
no_name
0

Mam pytanie odnośnie solenia haseł. Czy może to być tak , że podczas rejestracji koduje hasło np sha1 i dodaje do niego sól co jest np obecną datą ? A w bazie to się zapisuje jako hasło a sól to data rejestracji. Czy takie coś może być ?

A i drugie pytanie odnośnie zabezpieczeń. Jeśli w cookies bym przechowywał jakieś identyfikatory sesji a w bazie danych już tą realną sesję to nie obciąży to za bardzo systemu? Da się jakoś tak zrobić aby w normalnych $_SESSION to przechowywać tak aby nie było to do przechwycenia ?

1. Może być. 2. Przecież tak działają sesje w PHP OOTB. W ciastku / URL przechowywany jest identyfikator sesji, a w pliku na serwerze zserializowane dane sesyjne. - Rev 2011-08-30 22:02

Pozostało 580 znaków

2011-08-30 22:02
Kumashiro
0
no_name napisał(a)

Mam pytanie odnośnie solenia haseł. Czy może to być tak , że podczas rejestracji koduje hasło np sha1 i dodaje do niego sól co jest np obecną datą ? A w bazie to się zapisuje jako hasło a sól to data rejestracji. Czy takie coś może być ?

Jeśli "obecna data" i "data rejestracji" są takie same, to tak. Pamiętaj tylko, że salt musi być znany w postaci niezakodowanej w momencie testu hasła.

no_name napisał(a)

A i drugie pytanie odnośnie zabezpieczeń. Jeśli w cookies bym przechowywał jakieś identyfikatory sesji a w bazie danych już tą realną sesję to nie obciąży to za bardzo systemu? Da się jakoś tak zrobić aby w normalnych $_SESSION to przechowywać tak aby nie było to do przechwycenia ?

Tu nie wiem zbytnio o co Ci chodzi. Możesz przechowywać w bazie sesję (np. jakiś obiekt z danymi sesji), ale musisz skądś wiedzieć do której sesji przypiąć dane połączenie. Robisz to identyfikatorem sesji. Natomiast nie wiem co chcesz trzymać w "normalnych $_SESSION".

Pozostało 580 znaków

2011-08-30 22:04
0

Solenie odbywa się przed haszowaniem. Sól powinna być dość długa (powiedzmy minimum 20 losowych znaków z base64) i zapisana w bazie czystym tekstem.

Edit:
Za późno :p


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit, 2011-08-30 22:04

Pozostało 580 znaków

2011-08-30 22:06
0

dodaje do niego sól co jest np obecną datą ?
sól powinna być raczej losowa, i różna dla różnych użytkowników. zdecydowanie nie powinna się dawać z góry przewidzieć - a datę można przewidzieć z dowolnym wyprzedzeniem.
w ten sposób atakujący może zapuścić liczenie tęczowych tablic, niech mu to zajmie nawet miesiąc, po czym dokładnie tego dnia dla którego liczył tablice system będzie jego.

Pozostało 580 znaków

2011-08-30 22:07
no_name
0

Chodzi mi po prostu o to by nie obciążać bazy. No mam identyfikator sesji w ciasteczku. A w $_SESSION trzymam te dane które również tak samo mógłbym trzymać w bazie danych. Będzie to chyba oszczędniejsze dla bazy jednak czy tak samo bezpieczne ?

Pozostało 580 znaków

2011-08-30 22:11
no_name
0

Skoro sól ma być taka długa to mam i ją zapisac w postaci zakodowanej ? Bo hasło wiadomo z solą. No ale też nie moze byc bóg wie ile tych znaków.

Pozostało 580 znaków

2011-08-30 22:12
Kumashiro
0
Azarien napisał(a)

sól powinna być raczej losowa, i różna dla różnych użytkowników.

Losowa być nie musi. Różna, zdecydowanie. Soli się w celu wygenerowania różnych haszy dla tego samego hasła. User A może mieć takie samo hasło jak user B i bez soli hasze byłyby identyczne. Znając hasło usera B, znamy wtedy hasło usera A (i na odwrót).

Azarien napisał(a)

zdecydowanie nie powinna się dawać z góry przewidzieć - a datę można przewidzieć z dowolnym wyprzedzeniem.

Obawiam się, że mylisz salt z np. wektorem. Sól musi być znana dla systemu autoryzującego. Np. PAM dokleja sól w postaci jawnej do hasha: $sól$hash$
Nie ma zatem co przewidywać, gdyż salt jest jawny.

Pozostało 580 znaków

2011-08-30 22:20
0

Skoro sól ma być taka długa to mam i ją zapisac w postaci zakodowanej

Sól zapisujesz czystym tekstem! Jak ją zakodujesz nieodwracalnie to jak potem sprawdzisz zgodność hasła z haszem?

Nie ma zatem co przewidywać, gdyż salt jest jawny.

Azarienowi chodziło o to, że sól jest przewidywalna, a nie jawna. Załóżmy, że data rejestracji jest solą i atakujący chce zaatakować jakiś mało znany (jeszcze) ale interesujący serwis. Liczy tęczowe tablice np dla daty tydzień w przód, a potem wysyła serwis na digga czy slashdota. Zakładając, że się wstrzeli z przewidzianą datą rejestracji kont, łamanie haseł będzie bardzo łatwe.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.

Pozostało 580 znaków

2011-08-30 22:25
Kumashiro
0
Wibowit napisał(a)

Azarienowi chodziło o to, że sól jest przewidywalna, a nie jawna. Załóżmy, że data rejestracji jest solą i atakujący chce zaatakować jakiś mało znany (jeszcze) ale interesujący serwis. Liczy tęczowe tablice np dla daty tydzień w przód, a potem wysyła serwis na digga czy slashdota. Zakładając, że się wstrzeli z przewidzianą datą rejestracji kont, łamanie haseł będzie bardzo łatwe.

Racja. Niedoczytałem, że chodzi o TT. Chyba pora iść spać.

Pozostało 580 znaków

2011-08-30 22:26
no_name
0

No dobra wymyśliłem tak sobie na szybkości.

  • Mam jakiś stały tekst np. "Lubie mleko" ( zapisany gdzieś w pliku konfiguracyjnym ) , przepuszczam go np. przez md5.
  • Kolejnym krokiem jest zapisanie unikalnego ciągu znaków również zakodowanego jakimś tam algorytmem ( Będzie to zapisane w DB bo gdzieś trzeba zapisać ) .
  • Pobranie daty rejestracji w formacie unixowym.

Teraz łącze wszystkie 3 powyższe czynności z hasłem które przepuszczam np. przez md5.

Czy ten algorytm/sposób już wzbudza większe szanse powodzenia ?

Pozostało 580 znaków

2011-08-30 22:31
0

Po co tak kombinować?

  1. Generujesz sól za pomocą sól = base64(random) gdzie random zwraca losową liczbę np 100-bitową, albo i większą,
  2. Zapisujesz do bazy dwie rzeczy: otrzymaną sól czystym tekstem oraz np base64(md5(sól + hasło)).
  3. Przy uwierzytelnianiu użytkownika obliczasz base64(md5(sól_pobrana_z_bazy + hasło_podane_w_formularzu_logowania)) i sprawdzasz z zapisaną w bazie wartością.

Edit:
Zamiast md5 lepiej użyć sha1 lub sha256/ sha512.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit, 2011-08-30 23:22

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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