Park Stołeczny, Emanuel Śmigło, 17.01.2012 r. o 09:56
Kącik Kodera III

Jak zweryfikować autentyczność dokumentu? Jak przechowywać wrażliwe dane? Jak sprawdzić unikatowość elementu w zbiorze? Z pomocą przyjdą nam funkcje skrótu - temat trzeciej części KK.

Głupia teoria
Funkcja skrótu (inaczej mieszająca lub hashująca) ma za zadanie przyporządkowanie argumentowi jednoznacznego skrótu, najczęściej o stałej długości. Wynik tej operacji nie jest odwracalny, czyli nie możemy przewidzieć do jakiego argumentu pasowałby znany nam skrót.

Ee? Po co mi to?
Przypuśćmy, że poseł publikuje projekt ustawy na Forum Centralnym jako załącznik w pliku PDF. Następuje debata, w wyniku której dochodzi szereg poprawek. Poprawiony projekt ponownie jest opublikowany jako plik. Po głosowaniu okazuje się jednak, że uchwalona ustawa brzmi zupełnie inaczej niż ostateczny projekt. Jaja jak berety "lub czasopisma". A wystarczyło na każdym etapie publikacji podawać do wiadomości skrót wygenerowany dla dokumentu, by zweryfikować jego autentyczność.

Przypuśćmy, że ustępujący władca zabiera z sobą hasła wszystkich mieszkańców, które były przechowywane w bazie danych w sposób jawny. Potencjalny zamęt jaki mógłby stworzyć zakrawa o thriller. Sposobem na zabezpieczenie się jest przechowywanie samych skrótów haseł. Przy logowaniu mieszkańca ponownie wyliczymy skrót i porównamy go z posiadanym.

Spoko, używam MD5
Bitch, please. Taki MD5 został uznany za przestarzały w ubiegłym wieku. SHA1, którym się jarasz powinieneś wywalić na śmieci dwa lata temu. Wzrost mocy obliczeniowej maszyn sprawił, że poziom bezpieczeństwa tych funkcji spadł niczym radziecki myśliwiec ŁaGG-3 po deszczu.

Mmm, smakujesz trochę słono...
PHP począwszy od wersji 5.1.2 wprowadził funkcję hash, która umożliwia stosowanie bardziej wysublimowanych funkcji skrótu pokroju silniejszych wariantów SHA-2, RIPEMD-320 czy Whirlpool. Jedna z zasad dotycząca bezpieczeństwa mówi: korzystaj z własnych algorytmów, bo dla rozwiązań "z półki" prędzej czy później trafią się wytrychy.

Prostym zabiegiem utrudniającym atak, jest zastosowanie tzw. soli. Sól to nic innego jak stały, znany tylko nam ciąg znaków, który dokładamy do argumentu przed wywołaniem funkcji skrótu.

f - funkcja skrótu
a - argument
b - sól
m, n - skróty

f(a) = m
f(a+b) = n
m jest różne od n

Operacja + nie musi być prostą konkatenacją (łączeniem), autor swego czasu hashował argument, haszował sól, całość mieszał i poddawał trzeciemu hashowaniu. Grunt to własna inwencja lub podglądanie inwencji innych.

W kolejnym odcinku Kąciku Kodera autor spróbuje ugryźć generowanie dokumentów PDF w PHP. Dziurawego kodu!

Goodies
- http://hashhack.com/ - cracker MD5 online (ponoć sarmackie ciastka są całkiem pyszne)
Dotacje
0,00 lt
Nikt jeszcze nie zasponsorował tego artykułu.
Serduszka
0,00 lt
Nikt jeszcze nie lubi tego artykułu.
Komentarze
Yupeng Beijin-Zhao
Kurs PHP :D!
Odpowiedz Permalink
Zbyszko Gustolúpulo
Artykuły strasznie chaotyczne, ale jednocześnie nadające kącikowi specyficzny klimat, oby tak dalej! ;-)

Dzięki dzisiejszej lekturze przynajmniej zrozumiałem co to była ta sól, którą wydawała mi się dziwacznym dodatkiem do systemu rejestracji, a korzystając z gotowca byłem zbyt leniwy, żeby przeczytać co to... ;)
Odpowiedz Permalink
György Róni Karakachanow Jr
Po raz kolejny nie rozumiem o co chodzi, ale to zapewne cenna inicjatywa! :D
Permalink
Emanuel Śmigło
Kącik z założenia celuje w czytelników mających do czynienia z programowaniem. Kursów w necie jest pod dostatkiem i nie zamierzam tworzyć kolejnego, ale jeżeli coś nie jest jasne to zapraszam na priv na bezpłatne korki. ;)
Permalink
Yupeng Beijin-Zhao
CSS się trzeba jeszcze nauczyć przed tym, (X)HTML w podstawowym zakresie opanowałem, a zaawansowane rzeczy, to tylko znaczniki skopiować i wpisać co trzeba :D.
Odpowiedz Permalink
Piotr III Łukasz
Naprawdę nie chcę uchodzić za malkontenta, wynagradzam to tantiemą. Inicjatywa rzeczywiście - o tyle cenna, co chaotyczna a treść nieco ze sobą sprzeczna. Wspomnienia autora też nie wystawiające najlepszego świadectwa, choć rozumiem ten punkt widzenia - też chciałem haszować hasze swego czasu.
Odpowiedz Permalink
Krzysztof von Thorn-Macak
gwoli formalności. MD5 jest nadal jednostronnym i z zasady bezpiecznym szyfrowaniem. Owszem, zgodzę się, że moc obliczeniowa wzrasta ale jedyne co można zrobić to porównać z istniejącymi wynikami zapisanymi w bazie. Czyli gdzieś puszczamy skrypt, który wszystkie możliwe słowniki szyfruje i zapisuje w bazie a potem tylko porównuje. Podana stronka jest właśnie taką porównywarką, zresztą ze słabą skutecznością. Wystarczy użyć małych i dużych liter, jakichś cyfr i znaków specjalnych aby hasło było w 99,999% bezpieczne.
Ja z kolei robię w ten sposób, że składam hasło, login i właśnie tzw. sól, której algorytm generowania znam tylko ja w łąńcuch który szyfruję MD5. I w tym momencie nawet odkrycie łańcucha znaków jaki został zaszyfrowany nic nie da bo to nadal nie jest tylko hasło...
Niemniej tantiemka się należy!
Odpowiedz Permalink
Yupeng Beijin-Zhao
Dam jeszcze raz :D. Nic nie rozumiem z tego, ale to wynika z braku znajomości podstaw ;).
Odpowiedz Permalink
Emanuel Śmigło
Na youtubie można znaleźć prezentacje domowych, sprzętowych rozwiązań opartych na programowalnych macierzach bramek, które bez problemu radzą sobie ze skrótami MD5. Sól tak naprawdę jest małą przeszkodą - w końcu po odkryciu ciągu wejściowego uzyskujemy ograniczony zestaw znaków, który brute force rozwali dość szybko.
Permalink
Piotr III Łukasz
A skąd gwarancja, że to ciąg wejściowy?
Odpowiedz Permalink
Emanuel Śmigło
Nie ma gwarancji, trzeba wiedzieć o użyciu soli.
Permalink
Piotr III Łukasz
Ano właśnie. A sól można aplikować na różne sposoby, dopełniać pseudo przypadkowymi danymi i używać różnej soli np. w zależności od tablic z haszowaniem (problem kolizji tutaj nie występuje).
Haszowanie MD5 jest całkowicie wystarczające, tylko trzeba go odpowiednio używać.
Odpowiedz Permalink

Musisz się zalogować, by móc dodawać komentarze.