W tym artykule
Czym jest generowanie liczb losowych?
Generowanie liczb losowych to proces tworzenia liczb, których nie można z góry przewidzieć. Komputery to maszyny deterministyczne — nie są w stanie produkować prawdziwej losowości bez zewnętrznego wejścia. Różne techniki zapewniają różną jakość losowości, co ma ogromne znaczenie w zastosowaniach bezpieczeństwa.
Prawdziwe generatory liczb losowych (TRNG) czerpią entropy z fizycznych zjawisk: ruchu myszy, czasu naciśnięcia klawiszy, czasu nadejścia pakietów sieciowych lub dedykowanych czujników sprzętowych. Pseudolosowe generatory liczb (PRNG) używają algorytmów matematycznych zasianych entropy, aby produkować sekwencje wyglądające na losowe.
Jak generowane są liczby losowe?
CheckTown używa kryptograficznie bezpiecznego generatora liczb losowych przeglądarki.
- Źródło entropy — używa window.crypto.getRandomValues(), które czerpie z entropy na poziomie systemu operacyjnego
- Mapowanie zakresu — mapuje surowe wartości losowe na określony przez Ciebie zakres min/max bez błędu systematycznego
- Generowanie wsadowe — generuj wiele liczb jednocześnie dla list, tablic lub potrzeb masowych
Wypróbuj za darmo — bez rejestracji
Generuj liczby losowe →Kiedy używać generatora liczb losowych?
Generowanie liczb losowych ma wiele zastosowań w programowaniu, testowaniu i statystyce.
- Testowanie — generuj losowe dane testowe do wypełniania fikstur lub seedowania baz danych testowych
- Próbkowanie — wybieraj losowe próbki ze zbiorów danych do analizy statystycznej lub przypisywania do testów A/B
- Gry i symulacje — generuj nieprzewidywalne dane wejściowe dla symulacji, gier lub loterii
Często zadawane pytania
Jaka jest różnica między Math.random() a crypto.getRandomValues()?
Math.random() używa szybkiego PRNG inicjowanego przy uruchomieniu. Nadaje się do symulacji i gier, ale nie do zastosowań bezpieczeństwa. crypto.getRandomValues() używa CSPRNG (kryptograficznie bezpiecznego PRNG) systemu operacyjnego, który nadaje się do generowania tokenów, kluczy i innych wartości wrażliwych z punktu widzenia bezpieczeństwa. Zawsze używaj crypto.getRandomValues() w celach bezpieczeństwa.
Czy mogę używać liczb losowych do kluczy kryptograficznych?
Tak, ale tylko jeśli zostały wygenerowane przy użyciu CSPRNG. Liczby losowe z Math.random() lub podobnych niekryptograficznych PRNG są przewidywalne, gdy znany jest seed i wystarczająca liczba próbek wynikowych. Klucze kryptograficzne, tokeny, sole i nonce'y muszą być generowane z kryptograficznie bezpieczną losowością.
Czym jest błąd modulo i jak wpływa na zakresy liczb losowych?
Błąd modulo pojawia się podczas mapowania wartości losowej na zakres za pomocą operatora %. Jeśli przestrzeń wartości losowych nie jest równomiernie podzielna przez rozmiar zakresu, niektóre wartości pojawiają się częściej niż inne. Na przykład mapowanie 0–255 na 0–9 za pomocą % 10 powoduje, że wartości 0–5 pojawiają się nieco częściej. CheckTown używa próbkowania z odrzucaniem, aby wyeliminować ten błąd.