Nie, nie jest możliwe odwrócenie funkcji skrótu, takiej jak MD5: biorąc pod uwagę wyjściową wartość skrótu, nie można znaleźć komunikatu wejściowego, chyba że znana jest wystarczająca ilość informacji o komunikacie wejściowym.
Deszyfrowanie nie jest funkcją zdefiniowaną dla funkcji skrótu; szyfrowanie i deszyfrowanie są funkcjami szyfru, takiego jak AES w trybie CBC; funkcje skrótu nie szyfrują ani nie odszyfrowują . Funkcje skrótu są używane do przetworzenia komunikatu wejściowego. Jak sama nazwa wskazuje, algorytm odwrotny nie jest z założenia możliwy .
MD5 został zaprojektowany jako kryptograficznie bezpieczna, jednokierunkowa funkcja skrótu. Generowanie kolizji dla MD5 jest teraz łatwe - nawet jeśli duża część komunikatu wejściowego jest wcześniej ustalona. Tak więc MD5 jest oficjalnie uszkodzony i MD5 nie powinien już być uznawany za kryptograficznie bezpieczny skrót. Jednak nadal nie można znaleźć komunikatu wejściowego, który prowadzi do wartości skrótu: znajdź X, gdy znany jest tylko H (X) (a X nie ma wstępnie obliczonej struktury z co najmniej jednym 128-bajtowym blokiem wstępnie obliczonych danych) . Nie są znane ataki pre-image na MD5.
Zasadniczo możliwe jest również odgadywanie haseł przy użyciu brutalnej siły lub (rozszerzonych) ataków słownikowych, porównywanie baz danych lub próba znalezienia skrótów haseł w tak zwanych tablicach tęczy. Jeśli znaleziono dopasowanie, to jest obliczeniowo pewne, że znaleziono dane wejściowe. Funkcje skrótu są również zabezpieczone przed atakami kolizyjnymi: znalezienie X'
tego jest H(X') = H(X)
dane H(X)
. Jeśli więc X
zostanie znalezione, to jest obliczeniowo pewne, że rzeczywiście był to komunikat wejściowy. W przeciwnym razie przeprowadziłbyś mimo wszystko atak kolizyjny. Tęczowe tabele mogą być użyte do przyspieszenia ataków, a istnieją wyspecjalizowane zasoby internetowe, które pomogą Ci znaleźć hasło z określonym hashem.
Oczywiście można ponownie użyć wartości skrótu,H(X)
aby zweryfikować hasła wygenerowane w innych systemach. Jedyne, co musi zrobić system odbiorczy, to zapisać wynik funkcji deterministycznej, F
która przyjmuje H(X)
jako dane wejściowe. Kiedy X
podano do ówczesnego systemu H(X)
, a zatem F
może zostać przeliczone, a wyniki mogą być porównywane. Innymi słowy, odszyfrowanie wartości skrótu nie jest wymagane tylko w celu sprawdzenia , czy hasło jest prawidłowe, a nadal możesz przechowywać skrót jako inną wartość.
Zamiast MD5 ważne jest użycie skrótu hasła lub PBKDF (funkcja wyprowadzania klucza na podstawie hasła). Taka funkcja określa, jak używać soli razem z hashem. W ten sposób identyczne skróty nie będą generowane dla identycznych haseł (od innych użytkowników lub w innych bazach danych). Z tego powodu skróty haseł również nie pozwalają na używanie tablic tęczowych, o ile sól jest wystarczająco duża i odpowiednio losowa.
Skróty hasła zawierają również czynnik roboczy (czasem konfigurowany za pomocą licznika iteracji ), który może znacznie spowolnić ataki, które próbują znaleźć hasło na podstawie wartości soli i wartości skrótu. Jest to ważne, ponieważ baza danych z solami i wartościami skrótu może zostać skradziona. Wreszcie hash hasła może być również trudny do zapamiętywania, dlatego do obliczenia skrótu wymagana jest znaczna ilość pamięci. Uniemożliwia to użycie specjalnego sprzętu (GPU, ASIC, FPGA itp.), Aby umożliwić osobie atakującej przyspieszenie wyszukiwania. Inne dane wejściowe lub opcje konfiguracji, takie jak pieprz lub stopień równoległości, mogą być również dostępne dla skrótu hasła.
Nadal jednak pozwoli każdemu zweryfikować podane hasło, H(X)
nawet jeśli H(X)
jest to skrót hasłem. Hashy haseł są nadal deterministyczne, więc jeśli ktoś zna wszystkie dane wejściowe, a sam algorytm hash X
może być użyty do obliczenia H(X)
i - ponownie - wyniki mogą być porównane.
Powszechnie używane skróty haseł są bcrypt , scrypt i PBKDF2 . Istnieje również Argon2 w różnych formach, który jest zwycięzcą stosunkowo niedawnego konkursu mieszania haseł. Tutaj na CrackStation znajduje się dobry post na blogu dotyczący prawidłowego zabezpieczenia hasłem.
Możliwe jest, że przeciwnicy nie będą mogli wykonać obliczenia skrótu, sprawdzając, czy hasło jest prawidłowe. W tym celu można zastosować pieprz jako dane wejściowe do skrótu hasła. Alternatywnie wartość skrótu można oczywiście zaszyfrować przy użyciu szyfru, takiego jak AES i trybu działania, takiego jak CBC lub GCM. Wymaga to jednak przechowywania tajnego klucza / klucza niezależnie i z wyższymi wymaganiami dostępu niż hash hasła.