TestU01 er en statistisk empirisk testpakke implementeret i ANSI C , der giver et sæt hjælpeprogrammer til test af tilfældige talgeneratorer . Den seneste version af biblioteket blev introduceret i 2007 af Pierre L'Ecuyer og Richard Simard fra University of Montreal [1] .
Pakken indeholder flere typer PRNG'er , herunder nogle foreslået i litteraturen og nogle meget brugt i software . Det giver generelle implementeringer af klassiske statistiske test for tilfældige talgeneratorer, såvel som dem, der er foreslået i litteraturen og nogle originale. Disse tests kan anvendes på generatorer, der allerede er i biblioteket, brugerdefinerede generatorer og tilfældige talstrømme. Specielle tests tester alle sekvenser af ensartet fordelte tilfældige tal i eller bitsekvenser. Grundlæggende værktøjer til at konstruere punktvektorer genereret af generatorer er også til stede [1] .
TestU01 blev først implementeret i 1985 i Pascal og indeholdt test foreslået af Donald Knuth i anden udgave af andet bind af The Art of Programming [2] . Fire år senere blev det genimplementeret i Modula-2- sproget som en pakke med et modulært design . Derefter blev nogle af de mest brugte PRNG'er tilføjet sammen med nye tests. Mellem 1990 og 2001 blev pakken med jævne mellemrum opdateret med nye generatorer og test, og brugermanualen blev opdateret rettidigt (på fransk). moduler, der indeholder værktøjer til at teste familier af generatorer, blev først introduceret i 1997. I 2002 redesignede Pierre L'Ecuyer og Richard Simard biblioteket, implementerede det i C og oversatte manualen til engelsk.
PRNG'er er hovedsageligt designet til godt at simulere en sekvens af uafhængige tilfældige variabler , normalt i et reelt interval eller i et binært sæt . I det første tilfælde siger hypotesen 0 A , at tallene 0 , 1 , 2 , 3 ... er uafhængige størrelser fra en ensartet fordeling i intervallet [3] . I den anden siger 0 B , at der er en sekvens af uafhængige tilfældige bit, som hver antager værdien eller med lige stor sandsynlighed [3] .
0 A svarer til at sige, at for enhver heltal ervektor ( 0 , ...,) ensartet fordelt i endimensionel terning. For algoritmiske PRNG'er er udsagnet falsk, fordi vektorerne i dem tager deres værdier fra et endeligt antalalledimensionellevektorer, som generatoren er i stand til at producere [3] .
For en sekvens af bit kan hypotesen 0 B heller ikke formelt kaldes sand i det tilfælde, hvor længden af sekvensen overstiger antallet af bits af generatortilstande, fordi antallet af mulige sekvenser, der produceres, ikke kan overstige [3] . Generatorens opgave er at sikre, at sekvenserne i felten af alle mulige sekvenser i .
Et andet kvalitetskriterium for PRNG bruges i kryptologi og spillemaskiner. Her er der udover alt det ovenstående særligt opmærksom på uforudsigeligheden af efterfølgende numre [3] .
TestU01 tilbyder fire grupper af moduler til at arbejde med generatorer:
Når en bestemt test anvendes på outputtet af en størrelsesgenerator , forbliver testens p - værdi normalt rimelig, indtil størrelsen af dataene når en vis værdi . Derefter divergerer p - værdien til eller med en eksponentiel hastighed. Modulet giver forskeren mulighed for at udforske forholdet mellem en specifik test og strukturen af et sæt punkter opnået ved hjælp af en specifik familie af generatorer. Denne teknik kan bruges til at bestemme størrelsen af de data, der skal testes, afhængigt af længden af generatorens periode, før generatoren begynder at systematisk fejle testene.
TestU01 tilbyder flere testbatterier såsom SmallCrush (bestående af 10 test), Crush (96 test) og BigCrush (106 test). På en Pentium 4 -baseret computer med et Linux -operativsystem , for en simpel generator, tager batterilevetiden for SmallCrush-tests flere minutter, Crush - omkring en time, BigCrush - omkring et dusin timer [3] .
En af de meget brugte PRNG-testpakker er DIEHARD [4] , som indeholder en lang række statistiske test, men har en række ulemper og begrænsninger. For det første er rækkefølgen af tests såvel som deres parametre (såsom prøvestørrelse osv.) fastsat, hvilket har en dårlig effekt på testhastigheden [3] . For det andet kræver DIEHARD 32-bit heltal skrevet i binært som input , mens mange generatorer producerer tal mindre end 32 bit [3] . Sammenlignet med TestU01 er DIEHARD-pakken mindre fleksibel i disse aspekter [3] .
En anden offentlig testpakke er SPRNG [5] biblioteket , som inkluderer de klassiske tests beskrevet i The Art of Programming [2] . National Institute of Standards and Technology har også udviklet sit eget sæt af 15 tests til test af generatorer, der bruges i kryptografi [6] .
Alphabit- batteriet blev skabt til at teste hardwaregeneratorer til tilfældige tal . Udfører ni på hinanden følgende test, før hver omskrivning af inputdataene.
Kanin er et batteri, der fokuserer mere på at teste binære data , men nogle tests består med faste parametre, uanset hvor stort inputtet er. Derfor fører data større end 64 megabyte til en fejl i en af testene og fører til overløb af RAM . [7]
SmallCrush , et lille og hurtigt batteri af test, læser generatoren som en fil, der indeholder flydere i . Filgrænsen er lige under 51320000 tilfældige tal. Filen vil blive overskrevet i begyndelsen af hver test. Nogle test kræver, at generatoren returnerer mindst 30 bits opløsning, ellers er det meget sandsynligt, at generatoren fejler dem. Bruges normalt til at kontrollere gennemførligheden af at teste på mere stringente batterier [7] .
Crush - Et batteri af strenge statistiske tests. Indeholder både de klassiske Knuth-tests og mange andre. Nogle af disse tests forudsætter, at generatoren returnerer mindst 30 bits opløsning, ellers vil testene mislykkes. En af testene kræver 31 bit data. Batteriet bruger cirka 2 35 tilfældige tal [7] .
BigCrush er et batteri af de mest stringente statistiske tests. Som med andre batterier kræver nogle tests mindst 30 bit input, ellers mislykkes testene. Også en af testene kræver 31 bit data. Batteriet bruger næsten 238 tilfældige tal. Da BigCrush først dukkede op, havde selv PRNG'er, der blev betragtet som gode, svært ved at komme forbi det [7] .
Her er nogle eksempler på SmallCrush batteritests [1] .
Fødselsdag Spasings | En test baseret på fødselsdagsparadokset . Der vælges tilfældige punkter på et stort interval, hvorimellem afstandene skal være asymptotisk Poisson-fordelte . |
hul | En test, der bruges til at bestemme intervallet mellem gentagelser af samme ciffer. |
CouponCollector | Lad en sekvens af længden n og dimensionere m. Vi studerer sekvenser af en vis længde, der indeholder et m-bit tal. |
MatrixRank | Testen vælger et bestemt antal bits fra et bestemt antal tilfældige tal for at danne en matrix over {0,1}. Derefter bestemmes matrixens rang. |