Dołącz do zespołu ekspertów! Backend lub Frontend Developer?

Sprawdź najnowsze oferty pracy naszego partnera - 8lines.io!

Bezpieczeństwo haseł - poradnik

Założony przez  Narzew.

6 znakowy kod składający się z samych małych liter to (26)^8 czyli 208827064576 a komputer który łamie takie hasło ma 4 procesory i 1 rdzeń przetwarza w 1 ms jeden taki ciąg czyli 1*4(ilość rdzeni)*1000(bo 1s to 1000 ms)*60(zamieniamy na minuty)*60(zamieniamy na godziny)*24(ile w ciągu całej doby) i otrzymujemy 345600000 i przy takich założeniach komputerowi zajmie złamanie takiego kodu około 604 dni, więc ośmiu znakowy kod od biedy wystarczy :P.

lukasamd napisał(a):Dlatego limitowanie haseł "od góry" jest totalnie bez sensu.
Tak ale im dłuższy kod tym w bazie zajmuje więcej miejsca, a np na niektórych serwerach bazy mają ograniczoną pojemność.
szymon1051, twoje rozumowanie jest błędne.

Do ataków Bruteforce często wykorzystuje się procesor graficzny, ze względu na szybszy dostęp do pamięci :) Taki procesor w dobrej karcie jest w stanie wykonać np. 1000000000 operacji na sekundę, więc:
208827064576 / 1000000000 = 208,83 sekundy = 3,5 minuty.

A teraz, gdyby robił to zwykły procesor CPU o taktowaniu 3,2 GHz na dwóch rdzeniach:
6400000000 operacji na sekundę: 208827064576 / 6400000000 = 32 sekundy, nie biorąc pod uwagę opóźnienia na dostęp do RAMu, które gra tutaj kluczową rolę i które powoduje, że metoda ta jest mniej wydajna niż przy użyciu GPU.

Bo procesor nie wykonuje 1000 operacji na sekundę, tylko kilka miliardów (biorąc pod uwagę wykorzystanie pamięci RAM, to kilkanaście milionów), a to spora różnica ;p
:: Akcja DZIĘKUJĘ ZA POMOC ::
Pomocy udzielam jedynie na forum. Wszystkie rzeczy wykraczające poza tą dziedzinę wykonuję odpłatnie.
@szymon1051:
Procesor jest słaby wydajnościowo do bruteforce... ale kto broni wykorzystać GPU? Teraz są takie narzędzia i takie procesory graficzne, że takie hasełko jest rozbijane bardzo szybko. Zresztą, Victor linkował na forum do świetnego pakietu narzędzi.

A argument z bazą danych... jedziesz po całości. Jeżeli trzymasz hasła w oryginalnej formie w bazie, to nie mamy o czym rozmawiać. W bazie trzyma się tylko hashe, NIGDY nie powinno się trzymać oryginalnych haseł. Same hashe mają natomiast stałą długość i dosyć niewielką w porównaniu do innych zapisów w bazie - sha512 to 128 znaków (które nie potrzebuje UTF-8, a więc zajmujące mniej miejsca). Porównaj to do długości typowego posta...
Hash to jest jak taki "klucz" na podstawie którego generowane jest wpis w bazie ? A z tego co znalazłem w internecie są kodowane w md5, tu mam generator takich haseł http://killbox.pl/work/md5/md5.php a tu dekoder http://anqel.pl/narzedzia/md5/md5search.php , kilka min w google. Mam nadzieje że kody w badzie są jakoś inaczej kodowane niż md5, jak tak łatwo można znaleźć takie dekodery. Przy czym http://anqel.pl/narzedzia/md5/md5search.php nie poradził sobie z
hasło do zakodowania: To jest moje hasło do konta.
hasło zakodowane md5: c65901b5b3b3940327e0a04840639ceb
ale poradził sobie z
hasło do zakodowania: Mybb
hasło zakodowane md5: 5daa9855e1a48cd58ea5c5063dcee7f3
(md5 zostały wygenerowane przez http://killbox.pl/work/md5/md5.php )
Ale pewnie jak by poszukał odrobinę dłużej znalazł by jakiś lepszy dekoder i to z łatwością.
To nie jest kodowanie i dekodowanie, to jest hashowanie!
Hashowanie to tworzenie od podanego ciągu skrótu nieodwracalnego. To co znalazłeś to nie żadne dekodery, ale wyszukiwanie konfliktów lub tzw. tęczowe tablice. Skoro w wypadku md5 wszystko zamienia się na ciągi 32-znakowe, to wiadomo, że występować będą kolizje tj. kilka ciągów, które po hashowaniu da w efekcie ten sam skrót (albo podchodząc do tego matematycznie: skoro ilość możliwych ciągów jest nieskończona, to ilośc konfliktów również dąży do nieskończoności).
Podstawa: z hasha nie jesteś w stanie wyciągnąć oryginalnego ciągu znaków! Można znaleźć jedynie coś z takim samym hashem (co przy użyciu samego md5 [np. phpbb2, phpbb2 by Przemo] pozwoli na zalogowanie się).

Sam hash md5 to nie jest obecnie żadne zabezpieczenie, bo istnieją naprawdę rozbudowane tablice z kolizjami i znalezienie takowej nie trwa zbyt długo. Stosowane są różne techniki do "wzmanciania" hashy i utrudniania wyszukiwania kolizji. Dla przykładu MyBB stosuje coś takiego i tak wygląda tworzenie hasha:

md5(md5($salt).$password)

Gdzie $salt to losowy ciąg znaków ze zbiorów a-Z1-9 o długości 8 (indywidualny dla każdego użytkownika i zapisywany w bazie), a $password to wprowadzone przez użytkownika hasło. Takie zmiany w hashach to nie jest idealna metoda, ale zawsze utrudnia znalezienie kolizji.

Możesz zapytać teraz - skoro nie ma w bazie ani prawdziwych haseł, ani nie da się ich wydobyć, to w jaki sposób jest możliwe logowanie się? Ano w bardzo prosty.
Gdy użytkownik próbuje się zalogować, wpisane przez niego hasło również jest zamieniane na hash. Ten hash jest porównywany z tym wpisanym w bazie. Jeżeli się zgadza, to użytkownik może zostać zalogowany.

Podsumowując:
Dlaczego hasha a nie hasła? Bo nawet w wypadku włamania, znaleziony może być jedynie konflikt. Jeżeli ktoś używa dobrego, niesłownikowego hasła (np. wspomniane wcześniej zdania) to uzyskanie takiego samego ciągu-konfliktu jest w zasadzie niemożliwe. Ktoś znajdzie konflikt, ale z innym słowem i w wypadku wycieku bazy danych być może uda mi się zalogować tylko do tego pojedynczego serwisu. Nawet jeżeli użytkownik stosuje w wielu miejscach to samo (mocne) hasło, to najprawdopodobniej są tam stosowane inne kombinacje / inne solenie i znaleziony konflikt nie da nikomu dostępu.
lukasamd napisał(a):Kod:
md5(md5($salt).$password)

Gdzie $salt to losowy ciąg znaków ze zbiorów a-Z1-9 o długości 8 (indywidualny dla każdego użytkownika i zapisywany w bazie),

lukasamd napisał(a):Możesz zapytać teraz - skoro nie ma w bazie ani prawdziwych haseł, ani nie da się ich wydobyć, to w jaki sposób jest możliwe logowanie się? Ano w bardzo prosty.
Gdy użytkownik próbuje się zalogować, wpisane przez niego hasło również jest zamieniane na hash. Ten hash jest porównywany z tym wpisanym w bazie. Jeżeli się zgadza, to użytkownik może zostać zalogowany.

Jak może się zgadzać jak $salt to

lukasamd napisał(a):Gdzie $salt to losowy ciąg znaków ze zbiorów a-Z1-9 o długości 8 (indywidualny dla każdego użytkownika i zapisywany w bazie),
Zgadza się, bo:

lukasamd napisał(a):(indywidualny dla każdego użytkownika i zapisywany w bazie)

Zresztą, jeżeli nie wierzysz, to możesz sam sprawdzić w plikach MyBB - pliki:
/inc/functions.php
/inc/functions_user.php
Na dobrą sprawę jak chemy się czuć bezpiecznie to powinniśmy tworzyć przypadkowe hasla, potem zapisywac je w excelu czy innym zapisywaczu i ewentualnie sprawdzac jak czegos potrzebujemy. Nie stosowac kluczy czy powtarzac kombinacji. Taki plik mozemy zawsze nosic pod dziwna nazwa na penie zeby sie nikt nie wyczail o co chodzi ;d. Jednak powiedzmy sobie szczerze, czy nam przecietnym zjadaczom chleba sa az takie kombinacje potrzebne ;]? Chyba, ze boimy sie ze dziewczyna dorwie sie do naszych kont i wygrzebie cos czego nie powinna ;D
Nidrax napisał(a):Chodzi o to, że lepsze jest długie hasło, które łatwiej jest zapamiętać, aniżeli krótkie i skomplikowane, bo prostym bruteforcem im więcej jest znaków, tym dłużej ci zajmie złamanie hasła.

szymon1051 napisał(a):Tak tylko jak mamy ograniczoną ilość znaków np możemy tylko 6 znakowe hasło to hasło xxxxxx będzie (26)^6 czyli 308915776 ale jak zmienimy 1 znak na dużą literę np xXxxxx to będzie (26+26)^6 czyli 19770609664 a jak zmienimy 1 znak na cyfrę np xX0xxx będzie (26+26+10)^6 czyli 56800235584 a jak zmienimy znak na znak specjalny np xX0x#x będzie (26+26+10+27)^6 czyli 496981290961. Podsumowując dobrze jest dodać przynajmniej jedną cyfrę, jedną dużą literę i jeden znak specjalny. Tylko po jednym bo większa ilość nie wpłynie na wzór n^k gdzie n to ilość znaków z których możemy skorzystać a k to długość hasła. Czyli reasumując hasło "to moje hasło do konta" napisane w teki sposób "To moje hasło do konta." będzie bardziej bezpieczne bo mamy jedną dużą literę i jeden znak specjalny (nie licząc spacji). Z tego też wynika że jak możemy w haśle użyć od 6 do 16 znaków najlepiej użyć 16 znaków.

lukasamd napisał(a):A nie lepiej coś prostszego do zapamiętania, a jednak skomplikowanego?
Np.

"to jest moje testowe hasło do skrzynki email"

Jest ono o wiele łatwiejsze do zapamiętania, a silniejsze niż to, które podałeś. Sprawdzić możesz chociażby tutaj:
http://rumkin.com/tools/password/passchk.php

Waldemar44 czytałeś w ogóle ten temat ?



Użytkownicy przeglądający ten wątek:

2 gości