Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> podwójne hashowanie haseł, ogólnie n-hashowanie
nospor
post 27.02.2006, 11:48:23
Post #1





Grupa: Moderatorzy
Postów: 36 482
Pomógł: 6303
Dołączył: 27.12.2004




w związku z lekkim OT w pewnym temacie, który rozwinął się w ciekawą dyskusję, temat rozdzielam. Dotyczy on:
Czy podwójne (n-te) hashowanie hasła jest bezpieczniejsze, od pojedynczego hashowania

md5 sie nie odkoduje. mozna trafic na rozwiązanie metodą brute force. Dla tej metody jednak jest bez roznicy, czy ty dane haslo przepuścic przez md5 raz, dwa czy milion razy wink.gif

Posty będące duplikacją postów już zawartych w temacie, będą bez ostrzeżenia usuwane. Ma to zapobiedz tworzeniu się zbędnego śmietnika


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
yevaud
post 31.07.2011, 19:16:35
Post #2





Grupa: Zarejestrowani
Postów: 471
Pomógł: 89
Dołączył: 29.07.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Często w tym wątku pojawia się problem szybkości algorytmu hashowania. Martwicie się, że algorytm będzie wolny, cieszycie się gdy md5 jest superszybkie. Wydaje mi się, że to podstawowy błąd na poziomie założen. Funkcje hashujące których używamy - i nie ważne czy będzie to md5, czy coś z rodziny sha2, albo nawet cos bardziej ekscentrycznego jak haval - nie zostały zaprojektowane do szyfrowania kilku/kilkunasto znakowych haseł, a do hashowania dużych bloków danych, lub do hashowania duzych ilości skrótów w bardzo krótkim czasie(np. podczas sortowania, lub w implementacji protokołu sieciowego). One naprawde SĄ szybkie:)

W przypadku haseł w serwisie webowym, operacja hashowania wykonywana jest tylko raz na każde logowanie, więc nie musi być bardzo szybka. Różnice zajętości ramu podczas obliczeń na poziomie kilu kb także nie są tutaj problemem. Dodatkowo np. obliczanie hasha nie powinno dać się zrównoleglić. Można pewnie wymienić jeszcze kilka założeń które będą prawdziwe dla haseł serwisu webowego, a niekoniecznie prawdziwe przy innych zastosowaniach.

Popatrzmy w jaki sposób można zaatakować hash w serwisie webowym:

a) brute-force. Najbardziej rozpowszechniona i najłatwiejsza metoda ataku.
Problemem jest bardzo duża szybkość komputerów. Atakujący może wygenerować olbrzymie ilości hashów w krótkim czasie. Dodatkowo niezabezpieczony formularz logowania może pozwalać na wielokrotne logowania w krótkim czasie. Za kilkaset $/h można wynając superkomputer obliczający 500,000,000,000 hashy na sekundę!

cool.gif slownik/brute-force
Problemem jest mała inwencja użytkowników przy wymyślaniu haseł

c) rainbow
Problemem jest generalnie brak "soli" smile.gif Atakujący ma wygenerowany słownik hashy

d) analiza różnicowa i inne metody matematyczne
W typowym serwisie webowym nie jest to problem, jednak warto pamiętać, że md5(md5($val)) będzie miało prawdopodobnie gorsze właściwości, niż pojedyńcze użycie funkcji hashującej, dlatego należy raczej unikać takiego rozwiązania. Problem wielokrotnego hashowania typu md5(md5(md5(...) leży prymitywnym sposobie podawania danych do funkcji -> tylko za pierwszym razem używamy całości dostępnych danych, za każdym następnym razem do funkcji hashującej wchodzą zawsze dokladnie 32 znaki, a większość "losowości" która tkwiła w oryginalnym haśle, jest (prawdopdobnie) powoli tracona przez funkcje mieszającą. Piszę prawdopodobnie bo nie udało się udowodnić do tej pory ani że jest tracona ani że nie jest, można jednak dość bezpiecznie założyć, że stałe 32 znaki poddawane cały czas temu samemu algorytmowi, maja raczej gorsze właściwości niż losowy ciąg znaków smile.gif

e) atak DOS
W przypadku serwisu webowego, atak na kolizję przy logowaniu nie ma za bardzo sensu, ale jeśli operacja hashowania jest kosztowna, można doprowadzić do wyczerpania zasobów serwera np. poprzez wielokrotne logownie.


Teraz remedium na nasze problemy:
e) ograniczenie ilości logowań, albo szybka funkcja hashująca
d) używanie całości danych wejściowych przy każdej iteracji algorytmu hashującego, używanie matematycznie poprawnych funkcji hashujących
c) sól.
cool.gif Słownik i odrzucanie idiotycznych haseł użytkowników. Narzucenie odpowiedniego poziomu skomplikowania na hasła.
a) Wolny algorytm hashowania! przez wolny, rozumiem np. ~10ms

No włąsnie, jak widać na końcu szybki algorytm hashujący, jest tak naprawde WADĄ w przypadku typowego serwisu webowego.

Po tym przydlugim wstępie, przejdę do sedna:
http://en.wikipedia.org/wiki/Bcrypt - nie mylić z http://bcrypt.sourceforge.net/
jest to algorytm który spełnia założenia które sobie postawiliśmy. Jest matematycznie poprawny, oparty na sboxach z blowfisha, a do tego można sterować jego złożonością tak żęby osiągnąć wymaganą szybkość(a raczej wolność). Niewielka modyfikacja w szybkości funkcji hashującej i atakujący który próbuje bruteforce potrzebuje nagle lat zamiast minut na złamanie haseł, a dla naszego serwisu różnica rzędu paru ms przy logowaniu nie jest zauważalna.

http://stackoverflow.com/questions/4795385...asswords-in-php

Podsumowując:
1. wolna, poprawna matematycznie funkcja hashująca typu bcrypt
2. słownik
3. ograniczenie ilości logowań
4. sól

Ten post edytował yevaud 31.07.2011, 19:21:50
Go to the top of the page
+Quote Post

Posty w temacie
- nospor   podwójne hashowanie haseł   27.02.2006, 11:48:23
- - viking   Już od kilku lat istnieje taki malutki projekcik h...   27.06.2009, 15:12:49
- - Kocurro   Ja zawsze używam następującej metody i jak do tej ...   10.07.2009, 06:26:05
- - yevaud   Często w tym wątku pojawia się problem szybkości a...   31.07.2011, 19:16:35
- - sobol6803   Witam. Wiem, że tu bardziej chodzi o hash haseł, a...   11.02.2012, 23:20:37
- - Leihto   Jeśli chcesz mieć zdekodowane te dane to tak się n...   12.02.2012, 03:24:44
- - Amedos   A co myślicie by zrobić własne hashowanie ? Funkcj...   20.08.2012, 05:34:45
- - erix   A czy przeczytałeś w ogóle ten temat...?   20.08.2012, 16:20:33
- - mrWodoo   Najlepiej używać bcrypt, bo możemy dostosować ...   23.08.2012, 12:02:45
- - amii   W manulau nie zalecają stosowania md5, sha1, sha25...   21.10.2012, 11:38:46
- - erix   CytatCzy md5, sha1 i sha256 itp. mogą wygenerwać d...   22.10.2012, 13:17:57
- - amii   To akurat nie moje założenie tak jest zaimplemento...   25.10.2012, 15:58:05
- - Neymar11   Zawsze offtopowałem ^^. A do tematu: Można zrobić...   21.02.2015, 03:00:41
|- - Forti   Cytat(Neymar11 @ 21.02.2015, 03:00:41...   21.02.2015, 08:24:20
- - Crozin   To na dobrą sprawę jest nic innego, jak[PHP] pobie...   21.02.2015, 08:47:25
- - Neymar11   A ogarnijcie to: [PHP] pobierz, plaintext <?fu...   2.05.2015, 19:28:12
|- - pyro   Cytat(Neymar11 @ 2.05.2015, 19:28:12 ...   2.05.2015, 20:03:10
- - nospor   Skoro przytoczyles moja wypowiedz sprzed ponad 10 ...   21.03.2017, 12:24:13
- - Przemek19   Nie lepiej zrobić coś takiego? [PHP] pobierz, plai...   4.06.2017, 20:12:13
- - nospor   @Przemek19 Polecam przeczytac ten temat od poczatk...   4.06.2017, 21:06:09
- - Przemek19   Ok, miałem 2 minuty, więc nie doczytałem   4.06.2017, 21:15:37
2 Stron V  < 1 2


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.06.2024 - 11:04