Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kilka znaków zamiast całego hasła - jak to działa?
Forum PHP.pl > Forum > PHP
Stron: 1, 2
phpion
@Damonsson:
Pomysł moim zdaniem chybiony właśnie z racji konieczności sprawdzania X możliwości. Do tego musiałbyś znać długość hasła użytkownika czyli zapisywać ją w bazie. Bez tego też by dało radę, ale z jeszcze większą ilością kombinacji.
Damonsson
Przy 0 znakach ok, szukałby w nieskończoność pewnie. Ale może właśnie dla przykładowo 12 znakowego hasła, gdyby mu podać 6 znaków w dobrej kolejności na dobrych pozycjach, dałoby radę jakoś to w normalnym czasie ogarnąć?

No bo jeśli działałoby to tak samo szybko jak dla 0 znaków, no to rzeczywiście wystarczyłoby poznać algorytm i podstawić same xxxxxxxxx i dostałby hasło algorytmem napisanym przez nas.

Nie chce mi się wierzyć, że banki trzymają hashe (wiadomo jakoś posolone, ale jednak brakujący element wejściowy ma tylko 1 znak, do reszty można dojść, jesli jest dostęp do bazy i kodu) jednego znaku, czy też hashe haseł składających się z 5 znaków tylko.
nospor
@Damonsson ale zrozum, ze Twoim sposobem Ty naprawdę minimum w 50% ułatwiasz zadanie hakerom + jako gratis dorzucasz im swoje serwery by odwalaly za nich robote.... Przeciez taki system co proponujesz nie ma racji bytu
NetBeans
Również zastanawiałem się nad bezpieczeństwem takiego rozwiązania i nie byłem do końca przekonany. Jednak czekałem na rozwój dyskusji. Cały czas staramy się udowodnić, że to może być bezpieczne, chociaż w głębi duszy wiemy, że nie za bardzo może się równać z dobrym algorytmem haszującym odpowiednio posolonym. Co do rozwiązania bez rozbijania na osobne znaki rónież uznałem, że byłoby to niewydajne.

Przy okazji, algorytmy dostarczane przez funkcję password_hash() faktycznie są bezpieczniejsze od SHAx? Warto używać tej funkcji? I jak później porównać hash z bazy z tym co poda użytkownik skoro nie wiemy jaka sól została użyta?
redeemer
Cytat(Damonsson @ 18.07.2013, 14:00:54 ) *
Przy 0 znakach ok, szukałby w nieskończoność pewnie. Ale może właśnie dla przykładowo 12 znakowego hasła, gdyby mu podać 6 znaków w dobrej kolejności na dobrych pozycjach, dałoby radę jakoś to w normalnym czasie ogarnąć?

Zakładając, że możliwych znaków jest tylko 62 (duże i małe litery + cyfry). To w tym przypadku który podałeś musimy sprawdzić maksymalnie 56800235584 różnych haseł. Zakładając że do hashowania używamy SHA512 i sprawdzamy takie hasło używając w tym momencie najszybszego (chyba) "crackera" na GPU jakim jest oclhashcat na GPU AMD hd7970 (76 000 000 sha512/sec - dane ze strony programu) maksymalny czas wyniesie około 740 sekund. Gdy dodamy tylko jedną "niewiadomą" literkę ten czas wynosi już prawie 13 godzin.
Damonsson
No to mój pomysł można włożyć między książki fantasy biggrin.gif
Crozin
Cytat
Przy okazji, algorytmy dostarczane przez funkcję password_hash() faktycznie są bezpieczniejsze od SHAx? Warto używać tej funkcji? I jak później porównać hash z bazy z tym co poda użytkownik skoro nie wiemy jaka sól została użyta?
Główną zaletą Blowfisha w porównaniu do SHA-x jest czas generowania, który można odpowiednio dostosować. Czas generowania jednego hasha Blowfish będzie na poziomie dziesiętnych części sekundy, zaś SHA-x dziesięcio- czy stutysięcznych sekundy. Przy atakach typu BruteForce ma to ogromne znaczenie. Hash SHA-x można by niby powtarzać wielokrotnie w celu uzyskania podobnego czasu generowania, ale funkcje z tej rodziny nie są zaprojektowane do tego typu działania, stąd ich bezpieczeństwo spada.
freemp3
Cytat
Nie chce mi się wierzyć, że banki trzymają hashe

Mi nawet przez myśl nie przeszlo, żeby ich nie miały wink.gif

Wydaje mi się, że dobrym rozwiązaniem było by zastosowanie elementu X w kodzie, który byłby ładowany z innego miejsca w systemie i byłby odpowiedzialny za kodowanie haseł. Banki mając do dyspozycji całe serwerownie mogą sobie pozwolić na postawienie maszyny dostępnej jedynie lokalnie, której zadaniem będzie tylko i wyłącznie kodowanie haseł. Co do samego mechanizmu porównywania poszczególnych literek to chyba jedynym rozwiązaniem jest rozbicie hasła na części i zakodowanie każdej literki z osobna. Może istnieją jakieś metody operujące na całym haśle, ale wątpie i ręki nie daje wink.gif Mechanizm szyfrowania już zależy od konkretnego systemu i raczej nie jest prosty. Tęgie głowy siedzą nad tym, żeby odczytanie przechowywanych danych było jak najtrudniejsze smile.gif

Najlepszym rozwiązaniem według mnie jest stosowanie jakiejś dynamicznie generowanej soli i na pewno nie za pomocą liczb pseudolosowych wink.gif Np. imię lub nazwisko, czy za pomocą innych informacji podawanych przez użytkownika. Dodatkowo można zastosować specjalne opóźnienia tak jak @Crozin napisałeś, np 2ms. Dla użytkownika żadna różnica a dla kogoś kto puści skrypt w pętle spore utrudnienie.
NetBeans
No dobra, przekonaliście mnie, ale co z tą solą, o któej wspomniałem wyżej? Jak taki hash potem porównać?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.