Funkcje skrótu
Funkcja skrótu (tzw. hash function) to funkcja generująca hash o konkretnej ustalonej długości dla dowolnych danych wejściowych.
Dane wejściowe są wypełniane dodatkowymi bitami (do wielokrotności 512 bitów, ale w niektórych SHA-2 nawet do 1024)
Przykładowe działanie:
Cechy funkcji hashujących
- Deterministyczna - z tej samej wiadomości zawsze powstanie dokładnie ten sam hash
- Jednokierunkowa - hash nie może być w żaden sposób odtworzony do odtworzenia wiadomości
Niektóre hashe da się odwtorzyć
Istnieją bazy mapowań danych popularnych tekstów/słów na hashe. Dzięki nim możemy “odwrócić” hasha. Działa to jednak tylko w przypadku często używanych fraz, dlatego zaleca się tworzenie unikalnych i bezpiecznych haseł.
- Bezkolizyjna* - niemożliwe jest uzyskanie dwóch wiadomości z tym samym hashem
Nie jest to prawda
Szczerze nie wiem czemu tak jest napisane na prezentacji wykładowej, ale to właśnie z tego powodu, że funkcje hashujące są kolizyjne (świetnym przykładem jest MD5 Collision) stosuje się dodatkowe metody przeciwdziałania kolizjom:
- Przechodzenie na bezpieczniejsze algorytmy:
- Przestawienie się na używanie silniejszych algorytmów haszujących, takich jak SHA-256 lub SHA-3, które mają wyższą odporność na kolizje i inne typy ataków.
- „Salting”:
- Dodawanie losowego ciągu bajtów, znanego jako “sól” (salt), do danych przed ich haszowaniem, co zmienia wynikowy skrót i utrudnia szukanie kolizji oraz brute forcy.
- Strengthening („wzmocnienie”):
- Użycie techniki zwaną “key stretching”, która polega na wielokrotnym haszowaniu danych, zazwyczaj w połączeniu z solą, aby zwiększyć czas potrzebny do przeprowadzenia ataków.
- Wrażliwa - drobne zmiany w wiadomości skutkują dużymi zmianami w hashu
Przykład
- Wydajna - hash generujemy bardzo szybko dla dowolnej wiadomości