Jeżeli ktoś jeszcze pamięta mój niedawny artykuł na temat solenia haseł, być może zainteresuje go (lub ją) dzisiejszy wpis. Będzie krótko i zwięźle, obiecuję.
Istnieje wiele różnych zastosowań dla funkcji skrótu (zwanej też funkcją haszującą - hashing function). Na przykład można wygenerować skrót (hasz) danych w pojedynczym rekordzie w bazie danych i wykorzystać go potem do wydajnego sprawdzania, czy dane uległy zmianie (pamiętając o potencjalnych kolizjach, ma się rozumieć). W takiej sytuacji oczywiście zależeć nam będzie na jak najkrótszym czasie haszowania danych - jeżeli chcemy wyliczyć hasze dla miliona rekordów, a czas wyliczenia pojedynczego hasza zajmie milisekundę, to cała operacja zajmie nam niecałe 20 minut. Przy miliardzie rekordów to już około dwóch tygodni. I tak dalej.
Jednak w przypadku haszowania haseł sytuacja wygląda dokładnie na odwrót: zależy nam na tym, żeby wygenerowanie skrótu było WOLNE. Nie ZA wolne, w końcu nie chcemy, żeby użytkownik siedział wgapiony w ekran przez pięć minut przy każdym logowaniu się do systemu, ale na tyle wolne, żeby atak metodą brute-force (czyli "zgadywania") był nieopłacalny czasowo.
Wszystko pięknie, ale jest tu jeszcze jeden haczyk: współczesne komputery często wyposażone są w wysokowydajne karty graficzne z setkami albo i tysiącami równoległych potoków przetwarzających. Jeżeli czas na wyliczenie jednego hasza wynosi tysiąc milisekund (czyli sekundę - bardzo długo), to zapuszczając algorytm brute-force na karcie z tysiącem potoków przetwarzających przyspieszamy proces łamania hasła tysiąckrotnie i takie zabezpieczenie niewiele zmienia.
Trzeba dodać drugi element, który spowoduje, że atak metodą brute-force będzie nieopłacalny: pamięć. Wyliczenie hasza musi zużywać dużo pamięci operacyjnej. Na tyle dużo, żeby nie dało się uruchomić równocześnie wielkiej ilości procesów haszujących, ale jednocześnie na tyle niedużo, żeby komputery z każdej półki mogły bez problemu wyliczyć pojedynczego hasza. Czyli na przykład sto megabajtów. Albo pół gigabajta. W takiej sytuacji "włamywaczowi" nie pomoże ani ogromna ilość potoków równoległych, ani dużo RAM-u. Algorytm haszujący bardzo szybko zużyje zasoby systemu włamywacza sprawiając, że szukanie haseł metodą brute-force stanie się nieopłacalne.
Do niedawna w dziedzinie takiego właśnie bezpiecznego haszowania haseł królowały algorytmy scrypt i bcrypt (zainteresowanych odsyłam do Google), jednak od niedawna na horyzoncie pojawił się nowy gracz, łączący w sobie wszystkie możliwe zalety oraz eliminujący wady dotychczasowych rozwiązań: Argon.
Niewykluczone, że w krótkim czasie Argon stanie się ogólnoświatowym standardem do haszowania haseł - na dzień dzisiejszy istnieją już implementacje we wszystkich popularnych językach programowania oraz na wszystkie popularne platformy systemowe.
Sądzę, że warto tę nazwę zapamiętać.
Ot, co.
Jeżeli chcesz do komentarza wstawić kod, użyj składni:
[code]
tutaj wstaw swój kod
[/code]
Jeżeli zrobisz literówkę lub zmienisz zdanie, możesz edytować komentarz po jego zatwierdzeniu.