Jblew.pl - Notatnik młodego programisty. Elektronika, webmastering, programowanie.

Bezpieczeństwo haseł w bazie danych

Zauważyłem, że bardzo powszechne jest stwierdzenie, iż o bezpieczeństwie haseł decyduje ich długość, natomiast całkowicie zapomina się w tym momencie o algorytmie, który tworzy skrót. Na bardzo wielu stronach tworzenie skrótu wygląda tak: md5($hash). Funkcja jest bardzo prosta, wykonuje się szybko…
No właśnie, wykonuje się szybko… Działa to bardzo na korzyść hakera, który najczęściej, aby poznać hasło, szyfruje (takim samym algorytmem) po kolei miliony ciągów znaków i porównuje z hashem wykradzionym z naszej bazy danych. W jego interesie jest to, aby wszystko odbyło się jak najszybciej.
Natomiast właściciel strony internetowej, zwykle, nie musi porównywać milionów ciągów na sekundę, więc może sobie pozwolić na nieco dłuższe wykonywanie kodu.
Postanowiłem wykonać kilka pomiarów na swoim komputerze. Tworzenie skrótu md5("test"); trwa ok. 16us. Natomiast poniższy kod:

$str = md5("test");
for($i = 1;$i < 5000;$i++) {
$str = md5(base64_encode($str));
}

wokonuje się w 8000us, czyli 8ms, czyli 0.008 sekundy. Cóż to jest dla systemu… Użytkownik nawet nie mrugnie, gdy skróty jego haseł zostaną porównane. Jednak haker będzie przez to łamał hasło 500 razy dłużej!

Oczywiście to „zabezpieczenie” będzie użyteczne dopiero gdy hakerowi uda się włamać na stronę, jednak nie możemy wykluczać takiego przypadku, a każda forma obrony naszej witryny jest warta zastosowania!




Ciekawy sposób szyfrowanie haseł

Ostatni znalazłem ciekawy sposób na szyfrowanie haseł:

ço\kÍ9Ń­4×Í;÷GóĆúߎĽónš –   Jaki to szyfr?

To jest ciąg hehe zaszyfrowany najpierw w md5 a potem odszyfrowany za pomocą base64.
base64_decode(md5("hehe")) Pozornie to nic, a nawet mogą wystąpić trudności z przesłaniem tego przez protokół http, a poza tym ktoś może wpaść na pomyśł zaszyfrowania tego za pomocą base64 i wtedy dostanie nasze szyfr md5, i może go szybko złamać za pomocą tęczowych tablic lub metodą siłową.

Nasz szyfr staje się użyteczny dopiero po ponownym zakodowaniu tego w md5: md5(base64_decode(md5("hehe"))) Nikt nie będzie widział, jakie dziwne znaki kryje nasz hash, poza tym większość programów do łamania hashów md5 nie uwzględnia takich znaków, bo po prostu każdy dodatkowy znak wydłuża czas łamania szyfru, a tu mamy ich całkiem dużo.




Bannery

Create your own banner at mybannermaker.com!

Archiwum