Lista över slumptalsgeneratorer
Slumptalsgeneratorer är viktiga i många typer av tekniska tillämpningar, inklusive fysik , teknik eller matematiska datorstudier (t.ex. Monte Carlo -simuleringar), kryptografi och spel (på spelservrar ).
Den här listan innehåller många vanliga typer, oavsett kvalitet eller tillämplighet för ett givet användningsfall.
Pseudoslumptalsgeneratorer (PRNG)
När du använder en pseudoslumptalsgenerator , tänk på John von Neumanns påstående "Alla som överväger aritmetiska metoder för att producera slumpmässiga siffror är, naturligtvis, i ett tillstånd av synd."
Följande algoritmer är pseudoslumptalsgeneratorer.
Generator | Datum | Första förespråkarna | Referenser | Anteckningar |
---|---|---|---|---|
Mellankvadratmetod | 1946 | J. von Neumann | I sin ursprungliga form är den av dålig kvalitet och endast av historiskt intresse. | |
Lehmer generator | 1951 | DH Lehmer | En av de allra tidigaste och mest inflytelserika designerna. | |
Linjär kongruentialgenerator (LCG) | 1958 | VI Thomson; A. Rotenberg | En generalisering av Lehmer-generatorn och historiskt sett den mest inflytelserika och studerade generatorn. | |
Lagged Fibonacci-generator (LFG) | 1958 | GJ Mitchell och DP Moore | ||
Linjär-feedback-skiftregister (LFSR) | 1965 | RC Tausworthe | En enormt inflytelserik design. Kallas även Tausworthe-generatorer. | |
Wichmann–Hill generator | 1982 | BA Wichmann och DI Hill | En kombination av tre små LCG:er, lämpade för 16-bitars CPU:er . Används flitigt i många program, t.ex. används det i Excel 2003 och senare versioner för Excel-funktionen RAND och det var standardgeneratorn i språket Python upp till version 2.2. | |
Regel 30 | 1983 | S. Wolfram | Baserat på cellulära automater. | |
Inversiv kongruentialgenerator (ICG) | 1986 | J. Eichenauer och J. Lehn | ||
Blum Blum Shub | 1986 | M. Blum, L. Blum och M. Shub | Blum-Blum-Shub är en PRNG-algoritm som anses vara kryptografiskt säker. Dess bas är baserad på primtal. | |
Park-Miller generator | 1988 | SK Park och KW Miller | En specifik implementering av en Lehmer-generator, flitigt använd eftersom den ingår i C++ som funktionen minstd_rand0 från C++11 och framåt. |
|
ACORN generator | (upptäckt 1984) 1989 | RS Wikramaratna | Generatorn för tilläggskongruentiella R andomnummer . _ _ _ Enkel att implementera, snabb, men inte allmänt känd. Med lämpliga initieringar, klarar alla aktuella empiriska testsviter och har formellt visat sig konvergera. Lätt att förlänga för godtycklig periodlängd och förbättrad statistisk prestanda över högre dimensioner och med högre precision. |
|
MIXMAX generator | 1991 | GK Savvidy och NG Ter-Arutyunyan-Savvidy | Det är en medlem av klassen av linjär kongruential matrisgenerator, en generalisering av LCG. Grunden bakom MIXMAX-familjen av generatorer bygger på resultat från ergodisk teori och klassisk mekanik. | |
Add-with-carry (AWC) | 1991 | G. Marsaglia och A. Zaman | En modifiering av Lagged-Fibonacci-generatorer. | |
Subtrahera-med-låna (SWB) | 1991 | G. Marsaglia och A. Zaman | En modifiering av Lagged-Fibonacci-generatorer. En SWB-generator är grunden för RANLUX-generatorn, flitigt använd för t.ex. partikelfysiksimuleringar. | |
Maximalt periodiska ömsesidiga | 1992 | RAJ Matthews | En metod med rötter i talteorin, men aldrig använd i praktiska tillämpningar. | |
KYSS | 1993 | G. Marsaglia | Prototypiskt exempel på en kombinationsgenerator. | |
Multiplicera-med-bära (MWC) | 1994 | G. Marsaglia; C. Koç | ||
Complementary-multiply-with-carry (CMWC) | 1997 | R. Couture och P. L'Ecuyer | ||
Mersenne Twister (MT) | 1998 | M. Matsumoto och T. Nishimura | Nära besläktad med LFSRs. I sin MT19937-implementering är förmodligen den mest använda moderna PRNG. Standardgenerator i R och Python-språket från och med version 2.3. | |
Xorshift | 2003 | G. Marsaglia | Det är en mycket snabb undertyp av LFSR-generatorer. Marsaglia föreslog också som en förbättring xorwow-generatorn, där utsignalen från en xorshift-generator läggs till med en Weyl-sekvens . xorwow-generatorn är standardgeneratorn i CURAND-biblioteket i nVidia CUDA- applikationsprogrammeringsgränssnittet för grafikbehandlingsenheter. | |
Väl jämnt fördelad långperiodisk linjär (WELL) | 2006 | F. Panneton, P. L'Ecuyer och M. Matsumoto | En LFSR nära besläktad med Mersenne Twister, som syftar till att åtgärda några av dess brister. | |
En liten icke-kryptografisk PRNG (JSF) | 2007 | Bob Jenkins | ||
Advanced Randomization System (ARS) | 2011 | J. Salmon, M. Moraes, R. Dror och D. Shaw | En förenklad version av AES-blockchifferet , vilket leder till mycket snabb prestanda på system som stöder AES-NI . | |
Threefry | 2011 | J. Salmon, M. Moraes, R. Dror och D. Shaw | En förenklad version av Threefish-blockchifferet, lämplig för GPU-implementeringar. | |
Philox | 2011 | J. Salmon, M. Moraes, R. Dror och D. Shaw | En förenkling och modifiering av blockchifferet Threefish med tillägg av en S-box . | |
WELLDOC | 2013 | L. Balkova, M. Bucci, A. de Luca, J. Hladky, S. Puzynina | Aperiodiska pseudoslumptalsgeneratorer baserade på teknik för oändliga ord. | |
SplitMix | 2014 | GL Steele, D. Lea och CH Flood | Baserat på den slutliga blandningsfunktionen i MurmurHash3. Ingår i Java Development Kit 8 och högre. | |
Permuted Congruential Generator (PCG) | 2014 | JAG O'Neill | En modifiering av LCG. | |
Random Cycle Bit Generator (RCB) | 2016 | R. Cookman | RCB beskrivs som en bitmönstergenerator gjord för att övervinna några av bristerna med Mersenne Twister och korta perioder/bitlängdsbegränsningar hos shift/modulo-generatorer. | |
Middle-Square Weyl Sequence RNG (se även middle-square-metoden ) | 2017 | B. Widynski | En variant på John von Neumanns ursprungliga mellankvadratmetod , denna generator kan vara den snabbaste RNG som klarar alla statistiska tester. | |
Xoroshiro128+ | 2018 | D. Blackman, S. Vigna | En modifiering av Marsaglias Xorshift-generatorer, en av de snabbaste generatorerna på moderna 64-bitars processorer. Relaterade generatorer inkluderar xoroshiro128**, xoshiro256+ och xoshiro256**. | |
64-bitars MELG (MELG-64) | 2018 | S. Harase, T. Kimoto | En implementering av 64-bitars maximalt likafördelade F 2 -linjära generatorer med Mersenne prime period. | |
Rutor RNG | 2020 | B. Widynski | En motbaserad version av Middle-Square Weyl Sequence RNG . Liknar Philox i design men betydligt snabbare. |
Kryptografiska algoritmer
Chifferalgoritmer och kryptografiska hash kan användas som pseudoslumptalsgeneratorer av mycket hög kvalitet. Men i allmänhet är de betydligt långsammare (vanligtvis med en faktor 2-10) än snabba, icke-kryptografiska slumptalsgeneratorer.
Dessa inkluderar:
- Stream chiffer . Populära val är Salsa20 eller ChaCha (ofta med antalet omgångar reducerat till 8 för hastighet), ISAAC , HC-128 och RC4 .
- Blockera chiffer i räknarläge . Vanliga val är AES (som är mycket snabb på system som stöder det i hårdvara ), TwoFish , Serpent och Camellia .
- Kryptografiska hashfunktioner
Ett fåtal kryptografiskt säkra pseudoslumptalsgeneratorer förlitar sig inte på chifferalgoritmer utan försöker matematiskt koppla svårigheten att särskilja sin utdata från en "sann" slumpmässig ström till ett beräkningssvårt problem. Dessa tillvägagångssätt är teoretiskt viktiga men är för långsamma för att vara praktiska i de flesta tillämpningar. De inkluderar:
- Blum-Micali-algoritm (1984)
- Blum Blum Shub (1986)
- Naor–Reingold pseudoslumpfunktion (1997)
Slumptalsgeneratorer som använder extern entropi
Dessa tillvägagångssätt kombinerar en pseudoslumptalsgenerator (ofta i form av ett block- eller strömchiffer) med en extern källa till slumpmässighet (t.ex. musrörelser, fördröjning mellan tangentbordstryck etc.).
-
/dev/random
– Unix-liknande system - CryptGenRandom – Microsoft Windows
- Fortuna
- RDRAND- instruktioner (kallas Intel Secure Key av Intel ), tillgängliga i Intel x86-processorer sedan 2012. De använder AES-generatorn som är inbyggd i CPU:n och ser om den med jämna mellanrum.
- True Random Number Generator som använder Corona Discharge.
- Rölleka
Se även
- Tärningsgods
- Diehard-tester – statistisk testsvit för slumptalsgeneratorer
- Ojämn generering av slumpmässiga variationer
- Slumptalsgenerator för hårdvara
- Slumptalsgeneratorattack
- Slumpmässighet
- TestU01 – statistisk testsvit för slumptalsgeneratorer
externa länkar
- SP800-90-serien om generering av slumptal , NIST
- Generering av slumptal i GNU Scientific Library Reference Manual
- Rutiner för generering av slumptal i NAGs numeriska bibliotek
- Chris Lomonts översikt över PRNGs, inklusive en bra implementering av WELL512-algoritmen
- Källkod för att läsa data från en TrueRNG V2 hårdvara TRNG