qBlog Quadina w świecie PHP

12gru/102

Generowanie losowego ciągu znaków – hash

Ostatnio pojawił się temat hashowania i jego powtarzalności oraz możliwości jego złamania. Bardzo często w celu wygenerowania hasła korzysta się z funkcji hashujących i wycina odpowiedni ciąg znaków zależny od naszych intencji. Najprostszym rozwiązaniem jest zastosowanie następującej konstrukcji:

$haslo = substr(md5(time().rand()),0,8);

Przypomnę, że 8 znakowy kod wygenerowany przy pomocy md5 czy sha1 ma 16^8 = 4 294 967 296 kombinacji. Wydaje mi się to wystarczająco ilością kombinacji, żeby zaniechać inne metody dodatkowego unifikowania tych haseł.

Do jego odszukania potrzeba ponad 13 lat przy założeniu testu 10 haseł na sekundę. 10 testów wydaje mi się najrealniejsze przy założeniu że łączymy się jednym wątkiem np cURLem podczas ataku, żeby nie dostać bana za wiele połączeń w tym samym czasie od apacha. Co nie oznacza, że bana nie dostaniemy chociażby za obciążanie serwera zapytaniami non-stop gdy tylko zorientuje się admin serwera, że coś za duże ma obciążenie o 3 w nocy :-)

Mówiąc innymi słowy pełne md5 to 3,4028236692093846346337460743177e+38 kombinacji, czyli jakieś 1079028307080601418897052915499 lat przy podobnym założeniu jak wyżej. Zatem dodatkowe modyfikacje kodu md5 czy sha1 są w mojej ocenie niepotrzebne.

Oczywiście zawsze można polemizować czy bezpieczniejsze jest md5 czy sha1, czy inny sposób kryptowania danych. Wszystkie dyskusje tego typu jednak zaczynają się w zupełnie złym miejscu. Bowiem nie liczy się tutaj moc obliczeniowa superkomputera, który będzie próbować to rozszyfrować, tylko w jaki sposób te dane dostaną się w ręce atakującego.

Zakres tematyczny: Programowanie Dodaj komentarz
Komentarze (2) Trackbacks (0)
  1. Testowałeś kod który opublikowałeś?

    Chyba N I E.

  2. Faktycznie zjadłem jeden nawias, ale chyba to nie problem dla jakiegokolwiek programisty dopisać sobie go u siebie w kodzie? Tematyka postu nie dotyczy samej semantyki języka PHP, ale problemu statystycznego.


Leave a comment

Brak trackbacków.