Strona główna▸Artykuły▸

Paradoks urodzin: Dlaczego kolizje zdarzają się szybciej niż intuicja tego sugeruje

Rozwiązując kombinatorykę stojącą za problemem z dnia narodzin, dlaczego odpowiedź wydaje się błędna większości ludzi i dlaczego to samo obliczenie leży u podstaw ryzyka kolizji w haszach w bezpieczeństwie komputerowym.

mysimulator teamZaktualizowano — czerwiec 2026≈ 5 min czytania▶ Otwórz symulację

Ustawienie i dlaczego to wywołuje wrażenie

Klasyczna wersja problemu pyta: w pokoju z 23 losowo wybranych osobami, jaka jest prawdopodobieństwo, że co najmniej dwie z nich mają wspólny dzień urodzenia (ignorując lata przestępne i traktując wszystkie 365 dni jako równie prawdopodobne)? Większość ludzi szacuje to intuicyjnie gdzieś między 5% a 15% – 23 na 365 wydaje się niewielkie. Rzeczywista odpowiedź wynosi nieco ponad 50%. Przy 70 osobach w pokoju prawdopodobieństwo rośnie powyżej 99,9%.” Przestrzeń pomiędzy intuicją a prawidłową odpowiedzią jest wystarczająco duża, aby ten problem był uznawany za „paradoks”, pomimo braku sprzeczności logicznych – to paradoks intuicji, a nie matematyki.

Dlaczego intuicja jest niedoszacowująca: chodzi o pary, a nie o ludzi

Instynktowną pomyłką jest myślenie o problemie z perspektywy jednej osoby – „jakie są szanse, że ktoś obchodzi moje urodziny” – co w rzeczywistości jest niewielkie (około 6% w grupie 23, ponieważ jest tylko 22 inne osoby, z którymi można się porównać). Jednakże, rzeczywiste pytanie dotyczy każdej pary spośród całej grupy osób, które mają wspólne urodziny, a liczba możliwych par rośnie znacznie szybciej niż liczba osób. Przy n osobach liczba różnych par wynosi n(n−1)/2. Przy n = 23 jest to 253 oddzielnych par, każda stanowi niezależną okazję na przypadek.”)

Rzeczywiste obliczenie

Jest łatwiej obliczyć prawdopodobieństwo, że nikt nie obchodzi urodzin i odjąć od 1, niż próbować bezpośrednio uwzględnić każdy możliwy sposób, w jaki może wystąpić współzbieżność. Dodawaj ludzi do pokoju jeden po drugim: pierwszy człowiek może mieć dowolną datę urodzenia (prawdopodobieństwo 1). Drugi musi uniknąć daty urodzin pierwszego człowieka: prawdopodobieństwo 364/365. Trzeci musi unikać obu poprzednich dat urodzin: prawdopodobieństwo 363/365. Kontynuując ten wzorzec dla n osób i mnożąc wszystkie poszczególne prawdopodobieństwa, otrzymujemy prawdopodobieństwo, że wszystkie daty w pokoju są różne:

P(wszystkie różne) = (365/365) × (364/365) × (363/365) × ... × ((365−n+1)/365)

Prawdopodobieństwo wystąpienia co najmniej jednej wspólnej daty urodzin to 1 pomniejszone o ten iloczyn. Podstawiając n = 23, otrzymujemy w przybliżeniu 0,493 dla "wszystkich różnych", a komplementarne — co najmniej jedna zgodność — wynosi około 0,507, nieco ponad połowę. Funkcja przekracza 50% dokładnie przy 23 osobach i gwałtownie rośnie od tamtej pory, dlatego skok z "zaskakującego" na "prawie pewnego" zachodzi w stosunkowo wąskim zakresie rozmiarów grup, zamiast powolnego wzrostu.

Ogólny wzorzec: kolizje między znacznie większą liczbą 'pól' niż osób

Problem z urodzinami jest w rzeczywistości specjalnym przypadkiem bardziej ogólnego pytania: jeśli losujesz n elementów losowo (z powtórzeniami) z puli N możliwych wartości, ile losowań potrzeba zanim powtórzenie stanie się prawdopodobne? W przypadku problemu z urodzinami N = 365. Przydatna reguła empiryczna, wyprowadzona z przybliżenia powyższego iloczynu, mówi, że liczba losowań potrzebna do szansy 50% na kolizję wynosi w przybliżeniu 1,18 × √N — pierwiastek kwadratowy z wielkości puli, a nie jej ułamek. Dla N = 365, √365 ≈ 19,1 i 1,18 × 19,1 ≈ 22,5, co w miarę dokładnie odpowiada dokładnej odpowiedzi na poziomie 23. Ten skalowanie pierwiastkiem kwadratowym to element, który generalizuje znacznie dalej niż urodziny.

Dlaczego to ma znaczenie dla funkcji skrótu

Funkcja skrótu kryptograficzny mapuje dane wejściowe o dowolnej wielkości na wyjście o stałej długości – np. 256 bitów, generując 2²⁵⁶ możliwych wartości wyjściowych. Na pierwszy rzut oka można by przypuszczać, że znalezienie dwóch różnych danych wejściowych, które dają ten sam wynik skrótu (tzw. „kolizja”) zajmie kolejność 2²⁵⁶ prób, ponieważ istnieje tak wiele możliwych wyjść. Skalowanie pierwiastka z problemu urodzinowego mówi jednak inaczej: ponieważ kolizja wymaga jedynie dwóch spośród twoich prób do dopasowania się wzajemnie – a nie konkretnego celu – oczekiwana liczba prób potrzebnych do jej osiągnięcia jest bliższa pierwiastkowi z przestrzeni wyjściowej, czyli około 2¹²⁸ dla hasha o długości 256 bitów. Jest to znane jako atak urodzinowy i właśnie dlatego kryptografowie podwajają długość wyjścia funkcji skrótu w stosunku do pożądanej poziomu bezpieczeństwa przed kolizjami: hash „bezpieczny przed kolizjami” o 128 bitach potrzebuje wyjścia o długości 256 bitów, a nie 128 bitów, dokładnie z powodu wspomnianego efektu pierwiastka.”]} – “To samo dotyczy tego, że projektowanie funkcji skrótu zwraca szczególną uwagę na długość wyjścia, gdy istotne jest odporność na kolizje (a nie tylko odporność na odwracanie) – w przypadku podpisów cyfrowych, organów kartyfikacji i systemów kontroli wersji opartych na haszach, aby unikać wykorzystania granicy urodzinowej atakujący potrzebują znacznie mniej prób niż sugeruje sama wielkość wyjścia.”} – “Ponadto, wydłużenie długości wyjścia funkcji skrótu ma kluczowe znaczenie dla zapewnienia odporności na kolizje w systemach, gdzie istotna jest unikalność danych, takich jak podpisy cyfrowe, certyfikaty i systemy kontroli wersji opierające się na haszach.”} – “Dlatego też, projektując funkcję skrótu, należy uwzględnić wpływ efektu pierwiastka z problemu urodzinowego, aby zapewnić jej odporność na ataki kolizyjne, szczególnie w aplikacjach, gdzie unikalność danych jest krytyczna.”} – “W szczególności, wydłużenie długości wyjścia funkcji skrótu pozwala na minimalizację ryzyka wystąpienia kolizji, co jest niezbędne dla zapewnienia integralności i autentyczności danych w systemach cyfrowych.”} – “Zatem, przy projektowaniu funkcji skrótu należy uwzględnić wpływ efektu pierwiastka z problemu urodzinowego, aby zapewnić jej odporność na ataki kolizyjne, szczególnie w aplikacjach, gdzie unikalność danych jest krytyczna.”} – “Ważne jest również, aby pamiętać, że wydłużenie długości wyjścia funkcji skrótu może zwiększyć jej złożoność obliczeniową, dlatego należy znaleźć równowagę między bezpieczeństwem a wydajnością.”} –

Często zadawane pytania

Dlaczego paradoks dnia urodzin wydaje się tak sprzeczny?

Intrywacja skupia się zwykle na jednym konkretnym człowieku pasującym do innego, co jest faktycznie mało prawdopodobnym zdarzeniem. Jednakże, rzeczywiste pytanie dotyczy każdej pary spośród wszystkich osób w grupie, a liczba możliwych par w grupie liczącej n osób rośnie kwadratowo, czyli jako n(n−1)/2, podczas gdy intuicja śledzi liniowy wzrost wielkości grupy. To rozbieżność między tymi dwoma wzorami jest głównym źródłem zaskoczenia.

Jaka jest dokładna formuła prawdopodobieństwa wspólnej daty urodzin?

Prawdopodobieństwo, że wszyscy w grupie liczącej n osób mają różne daty urodzin (z 365 możliwych dni) to iloczyn (365/365) × (364/365) × (363/365) × ... aż do (365−n+1)/365. Prawdopodobieństwo wystąpienia co najmniej jednej wspólnej daty urodzin to 1 pomniejszone o ten iloczyn. Przy n = 23, przekracza ono 50%.

Jaka jest zasada przybliżona pierwiastka kwadratowego i skąd się ona wzięła?

Dla puli N równie prawdopodobnych wartości, liczba losowań potrzebna do uzyskania 50-procentowej szansy na to, że dwie losowania będą pasować, wynosi około 1.18 × √N. Wychodzi z przybliżenia dokładnego iloczynu problemu z dnia urodzin szeregiem wykładniczym i rozwiązywania go dla punktu, w którym prawdopodobieństwo braku kolizji spada do połowy. Ogarnia to problem kolizji w ogóle, a nie tylko daty urodzin.

Dlaczego hash 256-bitowy oferuje jedynie bezpieczeństwo 128-bitowe przeciwko kolizjom?

Znalezienie kolizji nie wymaga dopasowania do konkretnego celu hasza – wystarczy, że dwie próby spośród wielu się ze sobą zgadzają, co odpowiada ustawieniu problemu z dnia urodzin z N = 2^256 możliwych wartości haszy. Skalowanie pierwiastkiem kwadratowym oznacza, że oczekiwana liczba prób do znalezienia kolizji wynosi około 2^128, a nie 2^256. Kryptografowie uwzględniają to, wymagając podwójnej długości wyjściowej w stosunku do pożądanego poziomu odporności na kolizje.

Wypróbuj na żywo

Wszystko powyżej działa bezpośrednio w Twojej przeglądarce — otwórz the simulation i zmieniaj parametry podczas działania. Nic nie jest instalowane ani przesyłane na serwer, cały model działa w jednej karcie.

▶ Otwórz symulację the simulation

Co znalazłeś?

Dodaj kroki odtworzenia (opcjonalnie)