podwójne hashowanie haseł, ogólnie n-hashowanie |
podwójne hashowanie haseł, ogólnie n-hashowanie |
27.06.2009, 15:12:49
Post
#101
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Już od kilku lat istnieje taki malutki projekcik http://www.openwall.com/phpass/ i chyba staje się coraz popularniejszy bo więcej darmowych skryptów zaczyna z niego korzystać (drupal, WP, ajkieś fora). Osobiście już dawno porzuciłem własne pomysły na rzecz tego. Najsilniejsza metoda to blowfish a ta z kolei według różnych testów jest też bardzo szybka. A i tak na nic nasze starania jeśli user trzyma hasło przypięte do monitora.
-------------------- |
|
|
10.07.2009, 06:26:05
Post
#102
|
|
Grupa: Zarejestrowani Postów: 461 Pomógł: 32 Dołączył: 17.09.2003 Skąd: Łódź Ostrzeżenie: (0%) |
Ja zawsze używam następującej metody i jak do tej pory nikomu się nie udało włamać.
W bazie trzymam następujące informacje o haśle: MD5 z hasła SHA1 z hasła długość hasła i oczywiście mam jeszcze użytą sól do zabiegów MD5 i SHA1, która jest generowana na podstawie informacji: id użytkownika, login użytkownika, data rejestracji (czyli tych danych, które są niezmienne). Żeby umilić życie te trzy wartości mam zapisane odpowiednio w jednym ciągu. Na niektórych serwisach rezygnuję z użycia SHA1 ponieważ jak do tej pory MD5 z długością hasła dawało skuteczną ochronę. Oprócz tego kody źródłowe, które są na serwerze są zakodowane więc nie jest łatwo rozpoznać jak dokładnie jest tworzone hasło. Sama zawartość bazy danych niestety niewiele pomoże. Aha - wspominałem już o tym, że wartości wpisywane do bazy o użytkowniku takie jak dane osobowe są zaszyfrowane a klucz szyfrujący/odszyfrujący znajduje się w zakodowanym kodzie źródłowym. Wiem, że moja metody jest mniej skuteczna niż wielokrotne MD5 haseł ... ale muszę jakoś sobie radzić Pozdrawiam, Łukasz |
|
|
31.07.2011, 19:16:35
Post
#103
|
|
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ę! slownik/brute-force Problemem jest mała inwencja użytkowników przy wymyślaniu haseł c) rainbow Problemem jest generalnie brak "soli" 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 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. 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 |
|
|
11.02.2012, 23:20:37
Post
#104
|
|
Grupa: Zarejestrowani Postów: 115 Pomógł: 13 Dołączył: 19.06.2011 Skąd: Ruda Śląska Ostrzeżenie: (0%) |
Witam. Wiem, że tu bardziej chodzi o hash haseł, ale ja mam pytanie o przenoszenie hash'a między serwerami. Np. jeśli w hashu chcemy przenieść 3 zmienne:
Kod $id = 1; $imie = 'andrzej'; $nazw = 'kowalski'; I chcę to przenieść na inny serwer, aby wykorzystać w formularzu w postaci tajnej: Kod $hash = md5($id.$imie.$nazw); Dodaje do url'a i przechwytuję na inym serwerze w postaci: example.com/form.php?hash=9812asd65017578gs23487 (liczby przypadkowe z klawiatury, jednak to jest ten wygenerowany hash). Teraz chciałbym wpisać te 3 zmienne zakodowane w hashu do formularza. Jak to zrobić? Z góry dzięki za pomoc Pozdrawiam. PS. Sorry za odkopanie, ale nie chciałem specjalnie nowego tematu zakładać. Ten post edytował sobol6803 11.02.2012, 23:21:53 -------------------- |
|
|
12.02.2012, 03:24:44
Post
#105
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 4 Dołączył: 9.01.2012 Ostrzeżenie: (0%) |
Jeśli chcesz mieć zdekodowane te dane to tak się nie da (a raczej Ty tego nie zrobisz).
jeśli ma to być hash wpisany w input to proszę:
Podstawy podstawy podstawy! |
|
|
20.08.2012, 05:34:45
Post
#106
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 1 Dołączył: 23.02.2012 Ostrzeżenie: (0%) |
A co myślicie by zrobić własne hashowanie ?
Funkcja str_replace |
|
|
20.08.2012, 16:20:33
Post
#107
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów |
A czy przeczytałeś w ogóle ten temat...?
-------------------- ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
23.08.2012, 12:02:45
Post
#108
|
|
Grupa: Zarejestrowani Postów: 160 Pomógł: 6 Dołączył: 13.01.2012 Skąd: Bytom Ostrzeżenie: (0%) |
Najlepiej używać bcrypt, bo możemy dostosować 'trudność obliczeń' tzw. rundy, 12 rund tak zwolni prędkość ataku brute-force... że sobie to odpuszczą chyba, że to hasło do biur CIA / FBI
http://www.codinghorror.com/blog/2012/04/speed-hashing.html Bcrypt: php manual -> crypt -------------------- |
|
|
21.10.2012, 11:38:46
Post
#109
|
|
Grupa: Zarejestrowani Postów: 728 Pomógł: 76 Dołączył: 12.06.2009 Ostrzeżenie: (0%) |
W manulau nie zalecają stosowania md5, sha1, sha256 do heszowania ze względu na zbyt dużą szybkość i możliwy atak brute force. Mam dwa pytania:
1. Czy md5, sha1 i sha256 itp. mogą wygenerwać dwa lub więcej takich samych kluczy dla różnych danych wejściowych ? Przypuszczam, że tak bo inaczej taki algorytm byłby doskonałym archiwizerem. W dokumntacji algorytmu md5 -> http://www.faqs.org/rfcs/rfc1321.html znalałem jednak coś takiego: Cytat It is conjectured that it is computationally infeasible to produce two messages having the same message digest, or to produce any message having a given prespecified target message digest. Więc jak to jest ? 2. Wbudowane opóźnienie można osiągnąć za pomocą funckji crypt gdzie określamy algorytm, sól i ilość iteracji (to jest wbudowane opóźnienie). Tyle, że funkcja crypt nie obsługiwana przez silnik bazy danych. Jeśli np. w Zend autoryzacja odbywa się przy pomocy Zend_Auth_Adapter_DbTable w ten sposób. To klasa wykorzystuje wbudowaną funcję silnika bazy danych czyli SHA1 i CONCAT Jak uwierzytelnić za pomocą crypt ?
-------------------- gry flash online
Dobry hosting i tanie odnowienia domen firma: masternet. Zarabianie bez wysiłku na domenach bez ruchu: prolink. |
|
|
22.10.2012, 13:17:57
Post
#110
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów |
Cytat Czy md5, sha1 i sha256 itp. mogą wygenerwać dwa lub więcej takich samych kluczy dla różnych danych wejściowych ? Tak, gdyż wynika to z dziedziny, w której są tworzone hashe. Jest ona znacznie bardziej ograniczona niż treść, którą można hashować. Cytat 2. Wbudowane opóźnienie można osiągnąć za pomocą funckji crypt gdzie określamy algorytm, sól i ilość iteracji (to jest wbudowane opóźnienie). Tyle, że funkcja crypt nie obsługiwana przez silnik bazy danych. Jeśli np. w Zend autoryzacja odbywa się przy pomocy Zend_Auth_Adapter_DbTable w ten sposób. To klasa wykorzystuje wbudowaną funcję silnika bazy danych czyli SHA1 i CONCAT Jak uwierzytelnić za pomocą crypt ? Masz tu błędne założenie projektowe - PO CO obarczać bazę hashowaniem? -------------------- ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
25.10.2012, 15:58:05
Post
#111
|
|
Grupa: Zarejestrowani Postów: 728 Pomógł: 76 Dołączył: 12.06.2009 Ostrzeżenie: (0%) |
To akurat nie moje założenie tak jest zaimplementowana metoda w zend framework, jakoś jednak przeżyje z sha1 + podwójna sól. No chyba, że ktoś na zend posługuje się crypt i byłby chętny opisać jak się za to zabrać
-------------------- gry flash online
Dobry hosting i tanie odnowienia domen firma: masternet. Zarabianie bez wysiłku na domenach bez ruchu: prolink. |
|
|
21.02.2015, 03:00:41
Post
#112
|
|
Grupa: Zarejestrowani Postów: 73 Pomógł: 0 Dołączył: 20.02.2015 Skąd: localhost Ostrzeżenie: (10%) |
Zawsze offtopowałem ^^.
A do tematu: Można zrobić coś takiego, myślę że to coś da
A output raw bardzo dziwny : y Z��o��~��� Nie wiem co to znaczyć ma, no ale myślę że hasło zahaszowane dobrze Raczej te kilka bajtów ktoś by rozszyfrowywał z 10 lat hahahaha -------------------- |
|
|
21.02.2015, 08:24:20
Post
#113
|
|
Grupa: Zarejestrowani Postów: 655 Pomógł: 73 Dołączył: 2.05.2014 Ostrzeżenie: (0%) |
Zawsze offtopowałem ^^. A do tematu: Można zrobić coś takiego, myślę że to coś da
A output raw bardzo dziwny : y Z��o��~��� Nie wiem co to znaczyć ma, no ale myślę że hasło zahaszowane dobrze Raczej te kilka bajtów ktoś by rozszyfrowywał z 10 lat hahahaha to niczym się nie różni jak zwykłe md5($haslo, $sól). Masz bcrypt od takich zadań. -------------------- Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.
Fachowo.co Behance.net/fachowo |
|
|
21.02.2015, 08:47:25
Post
#114
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
|
|
|
2.05.2015, 19:28:12
Post
#115
|
|
Grupa: Zarejestrowani Postów: 73 Pomógł: 0 Dołączył: 20.02.2015 Skąd: localhost Ostrzeżenie: (10%) |
A ogarnijcie to:
ma to sens? wklejcie do notatnika, zincludujcie albo w tym samym pliku poza funkcja echo hash('string'); mysle ze cos da ^^ ciekawe, jak bardzo przedluza czas wykonania niz samo md5 -------------------- |
|
|
2.05.2015, 20:03:10
Post
#116
|
|
Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) |
A ogarnijcie to:
ma to sens? wklejcie do notatnika, zincludujcie albo w tym samym pliku poza funkcja echo hash('string'); mysle ze cos da ^^ ciekawe, jak bardzo przedluza czas wykonania niz samo md5 Nie ma: Po 1: Bo infinite recursion Po 2: Sam "tok myślenia" takiego kodu to pomysł delikatnie mówiąc wysoce nierozsądny -------------------- ET LINGUA EIUS LOQUETUR IUDICIUM
|
|
|
21.03.2017, 12:19:02
Post
#117
|
|
Grupa: Zarejestrowani Postów: 87 Pomógł: 3 Dołączył: 23.04.2013 Ostrzeżenie: (30%) |
Przyznam szczerze, iż nie wiem jak robi się w praktyce ataki b-f. Nigdy nie robilem Wiem z teorii tylko jak dzialają. Ale przypuśćmy, ze taki atak polega na ciąglym wysylaniu requesta do strony, gdzie należy się zalogować. W request wysylane jest haslo. Jak wiemy jest to haslo wówczas w postaci jawnej (nie hashowane). Tak więc nie ma znaczenia, ze hash będzie mial 32 bajty czy też więcej. Nie ma znaczenia, ze po stronie serwera bedzi dodawany jakiś tajny ciąg do tego. Znaczenie ma to, ze haslo ma 8 znaków i wygenerowanie ich wszystkich kombinacji nie ma już zadnego związku z metodami hashowania na serwerze. Bardzo dobre spostrzeżenie wówczas po-któreś tam hashowanie nie ma znaczenia, tylko obciąża kod po stronie serwera. Jeśli tak mogę się wtrącić w dyskusję a do tego postu doszedłem tylko. Natomiast hashowanie haseł nie jest metoda kompresji, ktoś kto tak myśli bardzo sie myli, to że powstają 32 znaki o tym nie świadczy, to błędny wniosek. Raz że takie hashowanie powinno być jednostronne a dwa że jest stratne, czyli za długie treści są obcinane, po to właśnie, aby nie można było odszyfrować tego hasła, nie zawsze tak jest, ale tak powinno być. Algorytm matematyczny nam to gwarantuje, unikalność hasha i tylko wyniki są porównywane jeśli tak to jestes zalogowany itp - to aluzja do wcześniejszego posta. Natomiast co do łamiania algorytmów (nie brute force) to nie nie odbywa sie to tak jak sie wielu wydaje. Przykładem może być base64_encode, proszę sobie kilkukrotnie kodować jakąs treść i zobaczyć wynik. Jeśli dany algorytm jest złamany to nie będzie miało znaczenia ile razy był użyty bo będzie to rozpoznawalne, przedłuży pracę ale da sie zrobić i czas nie będzie zbytnio długi, bo złamanie nie jest tak czasochłonne jak brute force. Ten post edytował darek334 21.03.2017, 12:28:58 |
|
|
21.03.2017, 12:24:13
Post
#118
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
Skoro przytoczyles moja wypowiedz sprzed ponad 10 lat to ja moze tylko uaktualnei to troche:
wtedy byla mowa o zwyklym md5, sha1, i dodaniu jakiejs tam soli. Teraz, gdy w metodach hashowania mozna okreslic, ze hashowanie ma zajac np. 1sekunde, to juz metoda hashowania na serwerze ma znaczenie, gdyz moze bardzo znacznie wydluzyc czas ataku BF i najzwyklej w swiecie taki atak sie nie powiedzie spowodow czasowych -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
4.06.2017, 20:12:13
Post
#119
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 0 Dołączył: 1.02.2017 Skąd: Polska Ostrzeżenie: (0%) |
|
|
|
4.06.2017, 21:06:09
Post
#120
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
@Przemek19 Polecam przeczytac ten temat od poczatku. Masz tam wyjasnione czemu twoja metoda jest totalnie do bani i totalnie niebezpieczna
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
Wersja Lo-Fi | Aktualny czas: 27.04.2024 - 09:32 |