Generator liczb losowych oparty na licznikach (CBRNG)

Generowanie liczb losowych opartych na licznikach ( CBRNG , znane również jako generator liczb pseudolosowych oparty na licznikach lub CBPRNG) jest rodzajem generatora liczb pseudolosowych , który jako stan wewnętrzny wykorzystuje tylko licznik całkowity.

Tło

Możemy myśleć o generatorze liczb pseudolosowych (PRNG) jako o funkcji, która przekształca serię bitów zwaną stanem w nowy stan i liczbę losową.

funkcję PRNG i stan początkowy wielokrotnie używać PRNG do generowania sekwencji stanów i liczb losowych.

W niektórych PRNG, takich jak Mersenne Twister , stan jest duży, ponad 2048 bajtów. W innych takich jak , i u są jednym i tym samym (więc stan jest mały, tylko 4, 8 lub 16 bajtów, w zależności od wielkości generowanych liczb). Ale w obu przypadkach, a nawet w większości tradycyjnych PRNG, stan ewoluuje w nieprzewidywalny sposób, więc jeśli chcesz obliczyć konkretny stan, dany stan początkowy, , musisz obliczyć , i tak dalej, uruchamiając PRNG razy.

Takie algorytmy są z natury sekwencyjne i nie nadają się do uruchamiania na maszynach równoległych, takich jak wielordzeniowe procesory i karty graficzne .

Natomiast generator liczb losowych oparty na licznikach (CBRNG) to PRNG, w którym stan „ewoluuje” w szczególnie prosty sposób: . W ten sposób możesz wygenerować każdy numer niezależnie, nie znając wyniku poprzedniego połączenia z PRNG.

Ta właściwość ułatwia uruchamianie CBRNG na wielu wątkach procesora lub GPU. , aby wygenerować możesz odrodzić poprosić ten obliczenie .

Implementacje

CBRNG oparte na szyfrach blokowych

szyfrów blokowych o zmniejszonej sile . Poniżej wyjaśniamy, jak to działa.

Używając kryptograficznego szyfru blokowego w trybie licznika , generujesz serię bloków losowych bitów. ja th blok jest obliczany przez zaszyfrowanie liczby przy użyciu klucza szyfrującego b .

do CBRNG, w którym obliczasz losową jako . . Rzeczywiście, każdy szyfr blokowy może być użyty jako CBRNG; sol !

Daje to silne, kryptograficznie bezpieczne źródło losowości . Ale kryptograficznie bezpieczne generatory liczb pseudolosowych są zwykle powolne w porównaniu z niezabezpieczonymi PRNG, aw praktyce wiele zastosowań liczb losowych nie wymaga takiego stopnia bezpieczeństwa.

W 2011 roku Łosoś i in. w DE Shaw Research wprowadził dwa CBRNG oparte na wersjach szyfrów blokowych o zmniejszonej sile.

  • ARS używa wersji szyfru blokowego AES o zmniejszonej sile . („ARS” to gra słów „AES”; „AES” oznacza „zaawansowany standard szyfrowania”, a „ARS” oznacza „zaawansowany system randomizacji”).

ARS jest używany w najnowszych wersjach Intel Math Kernel Library i uzyskuje dobrą wydajność dzięki wykorzystaniu instrukcji z zestawu instrukcji AES-NI , które w szczególności przyspieszają szyfrowanie AES.

Kod implementujący Threefry, ARS i Philox (patrz poniżej) jest dostępny u autorów.

CBRNG oparte na mnożeniu

Oprócz Threefry i ARS, Salmon i in. opisał trzeci PRNG oparty na licznikach, Philox, oparty na szerokich mnożnikach; np. pomnożenie dwóch liczb 32-bitowych i utworzenie liczby 64-bitowej lub pomnożenie dwóch liczb 64-bitowych i utworzenie liczby 128-bitowej.

Od 2020 roku Philox jest popularny w procesorach i procesorach graficznych. Na procesorach graficznych nVidia cuRAND i TensorFlow zapewniają implementacje Philox. Na procesorach MKL firmy Intel zapewnia implementację.