#️⃣ Funkcje skrótu — efekt lawinowy i kolizje
Sprawdź, co czyni skrót kryptograficzny mocnym: zmień jeden bit wejścia i patrz, jak zmienia się ~połowa bitów wyjścia (efekt lawinowy), a paradoks urodzin sprawia, że kolizje są bardziej prawdopodobne, niż podpowiada intuicja.
O tej symulacji
Ta symulacja demonstruje dwie podstawowe właściwości skrótu kryptograficznego, wykorzystując małą, szybką funkcję FNV-1a (niekryptograficzny algorytm mieszający nazwany na cześć Fowlera, Nolla i Vo) zakończoną krokiem xorshift, generującą 32-bitowy skrót (odcisk palca wejścia o stałej długości). W trybie Lawina Twój tekst jest haszowany na żywo i rysowany jako siatka bitów; odwrócenie jednego bitu wejścia przelicza hasz i podświetla każdy bit wyjścia, który się zmienił — efekt lawinowy. W trybie Urodziny losowe próbki są haszowane w b-bitową przestrzeń B = 2b koszy i sprawdzane pod kątem kolizji, wykreślając obserwowaną częstość kolizji względem teoretycznej granicy urodzinowej 1 − e−n²/2B.
🔬 Co pokazuje
32-bitowy hasz przedstawiony jako siatka 4×8 komórek 0/1 w trybie Lawina, z dowolnym bitem, który zmienił się między wejściem A i wejściem B, wyróżnionym na czerwono; oraz dla trybu Urodziny — bieżący wykres prawdopodobieństwa kolizji względem liczby pobranych próbek, porównujący bursztynową krzywą teoretyczną z zielonym punktem obserwowanym.
🎮 Jak korzystać
Przełączaj się między widokami Lawina i Urodziny za pomocą dwóch przycisków trybu. W trybie Lawina wpisz dowolny tekst w pole wejściowe i naciśnij „Odwróć jeden bit", aby zmutować jeden losowy znak o pojedynczy bit, lub „Reset", aby wrócić do „hello world". W trybie Urodziny przeciągnij suwak „Bity hasza b" (4–16), aby zmienić rozmiar przestrzeni koszy, i „Pobrane próbki" (1–120), aby zmienić, ile wartości jest haszowanych na próbę, a następnie naciśnij „Uruchom 1 próbę" lub „Uruchom 200 prób", aby zgromadzić obserwowaną częstość kolizji.
💡 Czy wiesz, że?
Granica urodzinowa jest powodem, dla którego prawdziwe funkcje skrótu potrzebują z grubsza podwójnej długości bitowej zamierzonego poziomu bezpieczeństwa: SHA-256 generuje 256-bitowy skrót, ale ponieważ kolizje stają się prawdopodobne już po około √B próbach, jego rzeczywista odporność na kolizje jest bliższa 128 bitom — ten sam efekt pierwiastka kwadratowego, który suwak tej symulacji pozwala zobaczyć bezpośrednio.
Najczęściej zadawane pytania
Jaki algorytm oblicza hasz w tej symulacji?
Wykorzystuje FNV-1a, szybki niekryptograficzny hasz: zaczyna od stałej wartości bazowej, następnie dla każdego znaku wejściowego wykonuje XOR bieżącej wartości ze kodem znaku i mnoży przez stałą liczbę pierwszą (0x01000193). Wynik przechodzi następnie przez krok kończący xorshift (trzy operacje XOR-shift), aby dokładniej rozłożyć bity, dając 32-bitowy wynik. To nie jest SHA-256, ale nadal wykazuje takie samo zachowanie lawinowe i kolizyjne, wokół którego projektuje się prawdziwe skróty kryptograficzne.
Dlaczego odwrócenie jednego bitu zmienia tak wiele bitów wyjścia?
Ze względu na sposób, w jaki łańcuch mnożenia i XOR w FNV-1a miesza każdy bajt wejściowy przez każdy późniejszy krok, oraz ponieważ kończący krok xorshift rozprowadza dowolną różnicę jednego bitu po całym 32-bitowym słowie, zmiana jednego bitu wejściowego kaskadowo powoduje, że średnio około połowa z 32 bitów wyjściowych się zmienia. Ta właściwość to efekt lawinowy, dokładnie to, co pokazują podświetlone na czerwono komórki w trybie Lawina.
Co kontrolują suwaki „Bity hasza" i „Pobrane próbki" w trybie Urodziny?
„Bity hasza b" ustawiają szerokość przestrzeni hasza: przy b bitach istnieje B = 2b możliwych koszy wyjściowych (od 16 koszy przy b=4 do 65 536 przy b=16). „Pobrane próbki" ustawiają, ile losowych wartości jest haszowanych w tę przestrzeń w jednej próbie, zanim symulacja sprawdzi, czy dwie z nich trafiły do tego samego kosza. Oba suwaki resetują bieżące statystyki próby, więc obserwowana częstość zawsze odzwierciedla aktualne ustawienia.
Dlaczego obserwowana częstość kolizji nie odpowiada dokładnie przewidywanej krzywej?
Bursztynowa krzywa wykreśla granicę urodzinową w postaci zamkniętej 1 − e−n²/2B, przybliżenie dokładne tylko w granicy wielu prób. Zielony punkt to prawdziwa empiryczna średnia z dowolnej liczby prób, które faktycznie uruchomiono (pokazana jako „Liczba przeprowadzonych prób" w panelu statystyk); przy zaledwie kilku próbach przypadek sprawia, że obserwowany ułamek może wyraźnie leżeć powyżej lub poniżej linii teoretycznej. Naciśnięcie „Uruchom 200 prób" wielokrotnie zmniejsza tę różnicę.
Czy funkcja skrótu tej symulacji jest wystarczająco bezpieczna do prawdziwej kryptografii?
Nie — FNV-1a wraz z krokiem kończącym xorshift jest szybka i wykazuje właściwe zachowanie statystyczne do celów dydaktycznych, ale brakuje jej kryptograficznego projektu (ustalonych rund, harmonogramów kluczy, udowodnionych granic dyfuzji), które sprawiają, że funkcje takie jak SHA-256 są odporne na celowy atak. Prawdziwe systemy muszą używać zweryfikowanego skrótu kryptograficznego; ta symulacja zapożycza jedynie te same dwie właściwości — efekt lawinowy i granicę urodzinową — aby uczynić je widocznymi i interaktywnymi.