Generátor pseudonáhodných čísel ( PRNG , anglicky pseudorandom number generator , PRNG ) je algoritmus , který generuje posloupnost čísel , jejichž prvky jsou na sobě téměř nezávislé a řídí se daným rozdělením (obvykle diskrétní uniforma ).
Moderní informatika široce využívá pseudonáhodná čísla v různých aplikacích, od Monte Carla a simulace až po kryptografii . Kvalita získaných výsledků přitom přímo závisí na kvalitě použitých PRNG. Tuto okolnost zdůrazňuje známý aforismus matematika ORNL Roberta Caviu: " Generování náhodných čísel je příliš důležité na to, aby bylo ponecháno náhodě ."
Zdroje skutečných náhodných čísel se hledají extrémně obtížně. Takovými zdroji mohou být fyzikální šumy [1] , jako jsou detektory událostí ionizujícího záření , šum výstřelu v rezistoru nebo kosmické záření [2] . Taková zařízení se však v aplikacích pro zabezpečení sítí používají jen zřídka. Potíže způsobují i brutální útoky na taková zařízení.
Fyzické zdroje náhodných čísel mají řadu nevýhod:
Náhodná čísla získaná z fyzického zdroje lze zároveň použít jako generující prvek (anglicky seed) pro softwarové PRNG. Takové kombinované generátory se používají v kryptografii, loteriích, hracích automatech. [3]
John von Neumann považoval za nepřijatelné používat fyzické generátory náhodných čísel ve výpočetní technice, protože pokud by bylo nutné výpočty kontrolovat, opakování předchozích akcí by vyžadovalo reprodukci náhodného čísla, zatímco generování nového náhodného čísla je nepřijatelné. Předběžný záznam a ukládání generovaných náhodných čísel by znamenalo možnost jejich čtení. Mechanismus čtení dat byl jedním z nejslabších článků počítačů 40. let. John von Neumann dal následující metodu středních čtverců [4] pro získání desetimístných pseudonáhodných čísel:
Desetimístné číslo se odmocní, pak se ze středu odmocniny čísla vezme desetimístné číslo, které se znovu odmocní a tak dále.Například pro 4místná čísla počínaje 1234 dostaneme , kde vezmeme prostřední 4 číslice (v případě potřeby přidáme na začátek nulu). Poté výsledné číslo odmocníme a tak dále. Nevýhodou této metody je omezená množina PSCH kvůli skutečnosti, že sekvence zacyklí - .
V roce 1951 D. G. Lemer navrhl lineární kongruentní metodu , [5] jejíž podstatou je specifikovat posloupnost celých čísel pomocí rekurzivního vzorce kde jsou celá čísla a splňují následující podmínky: . Nevýhodou této metody je závislost na , od , stejně jako skutečnost, že PFC smyčky.
Většina deterministických PRNG odpovídá struktuře navržené P. Lecuerem 1994:v roce]1 [ . Obvykle a stav generátoru je dán rekurzivním vzorcem pro . výstupní hodnota generátoru ; je posloupnost pseudonáhodných čísel. Protože je konečný, musí existovat nějaké konečné a takové, že . To znamená, že podmínky a budou splněny pro všechny , protože funkce a jsou deterministické. Ukazuje se tedy, že sekvence je periodická. Období PRNG se nazývá minimální kladné . [3]
Nejběžnější jsou lineární kongruenciální metoda , Fibonacciho metoda se zpožděními , posuvný registr s lineární zpětnou vazbou , posuvný registr se zobecněnou zpětnou vazbou .
Z moderních PRNG se také rozšířil „Mersennův vír “ navržený v roce 1997 Matsumotem a Nishimurou . Jeho předností je kolosální perioda (2 19937 −1), rovnoměrné rozdělení v 623 dimenzích (lineární kongruenciální metoda dává víceméně rovnoměrné rozdělení maximálně v 5 dimenzích), rychlé generování náhodných čísel (2-3x rychlejší než standardní PRNG pomocí metody lineární kongruence). Existují však algoritmy, které rozpoznají sekvenci generovanou Mersennovým vírem jako nenáhodnou.
Generátor pseudonáhodných čísel je součástí mnoha moderních procesorů , například RdRand je součástí instrukční sady IA-32. [6]
Variantou PRNG jsou GPSB (PRBG) - generátory pseudonáhodných bitů a také různé proudové šifry .
Následuje seznam generátorů, které historicky vynikly na poli generování pseudonáhodných čísel, ať už kvůli svému historickému významu, nebo protože byly inovativním modelem pro své doby. Navíc, přestože se jedná o PRNG, některé z nich mohou být použitelné v oblasti kryptografie.
Algoritmus | Autoři | Odkazy | Popis | |
---|---|---|---|---|
střední náměstí | John von Neumman | 1946 | [7] | PRNG, který je považován za nekvalitní, ale má velký historický význam jako jeden z prvních algoritmů. |
Lehmerův generátor / Lineární kongruenciální metoda | D. H. Lehmer | 1951 | [osm] | Je také známá jako metoda multiplikativních lineárních kongruencí a byla velmi vlivná v této oblasti výzkumu. Je také známá jako lineární kongruenciální metoda, jejíž základ se postupem času zdokonaloval. |
Lag Fibonacciho generátor | GJ Mitchell; D. P. Moore | 1958 | [9] | Velmi vlivný algoritmus ve studiu procesů generování náhodných čísel, který inspiroval další pozdější velké autory jako G. Marsaglia, tvůrce testu kvality náhodných čísel nazvaného „Diehard“. |
Posuvný registr s lineární zpětnou vazbou (LFSR) / Tausworthův oscilátor | R. C. Tausworth | 1965 | [deset] | Generátor, jehož design ovlivnil mnoho dalších následných PRNG. Proto je velmi historicky důležitý. Také známý jako Tausworthův generátor. |
Generátor Wichmann & Hill | B.A. Wichmann; D.I. Hill | 1982 | [jedenáct] | Kombinace tří malých LCG vhodných pro 16bitové procesory. Široce používán v mnoha programech, například byl používán v Excelu 2003 a některých pozdějších verzích pro funkci NÁHČÍSLO v Excelu a byl výchozím generátorem v Pythonu až do verze 2.2. |
Pravidlo 30 | Wolfram, Stephen | 1983 | [12] | Generátor založený na celulárních automatech. |
Blum-Blum-Shub generátor | Bloom, Manuel ; L. Blum; M. Shub | 1986 | [13] | Je považován za jeden z nejbezpečnějších generátorů z kryptografického hlediska, především díky začlenění výzkumu a konceptů převzatých z teorie čísel do jeho vzorce. Za tento Blumův algoritmus byl Manuel oceněn v roce 1995 cenou Alana Turinga. |
generátor park-miller | SK Park; KW Miller | 1988 | [čtrnáct] | Konkrétní implementace generátoru Lehmer, široce používaný, protože je součástí C++ jako funkce minstd_rand0 od C++11. |
ŽALUD | RS Wikramaratna | 1989 | [patnáct] | Jeho název pochází z anglické zkratky ACORN, což znamená ″Additive Congruent Random Number″. |
MIXMAX | GK Savvidy; NG Ter-Arutyunyan-Savvidy | 1991 | [16] | Jedná se o generátor patřící do třídy maticových kongruentních lineárních generátorů, zobecnění metody lineárních kongruencí. Logika generátorů rodiny MIXMAX je založena na výsledcích ergodické teorie a klasické mechaniky. |
Add-with-carry | G. Marsaglia | 1991 | [17] | Úprava Fibonacciho generátorů se zpožděním. |
Odečíst-s-půjčit | G. Marsaglia; A. Zaman | 1991 | [17] | Algoritmus odvozený z Fibonacciho generátorů se zpožděním. |
ISAAC | RJ Jenkins Jr. | 1993 | [osmnáct] | Cryptographically Secure Cryptographic Data Generator (CSPRNG) vyvinutý Robertem J. Jenkinsem. |
Mersenne Twister, MT | M. Matsumoto; T. Nishimura | 1996 | [19] | Toto je pravděpodobně nejznámější generátor na tomto seznamu, hlavně proto, že se jedná o algoritmus implementovaný ve funkci RAND programovacích jazyků Python a R, kromě jeho silného zastoupení v elektronických hrách, jako je Pro Evolution Soccer (PES). |
Xorshift | G. Marsaglia | 2003 | [dvacet] | Jedná se o velmi rychlý podtyp generátorů LFSR. Marsaglia také navrhl jako vylepšení generátor xorwow, ve kterém je výstup generátoru xorshift sečten s Weylovou sekvencí. Generátor xorwow je výchozím generátorem v knihovně nVidia CUDA API CURAND pro GPU. |
Algoritmus Fortuna | Schneier, Bruce ; Nils Ferguson | 2003 | [21] | Algoritmus je považován za kryptograficky bezpečný. CSPRNG, dobře známý tím, že je zabudován do systémů a produktů Apple. |
Dobře ekvidistribuovaná dlouhodobá lineární (WELL) | F. Panneton; P. L'Ecuyer; M. Matsumoto | 2006 | [22] | Algoritmus známý jako doplněk k Mersenne Twister (MT), který se záměrně snaží skrýt své slabiny. |
Advanced Randomization System (ARS) | J. Salmon; M. Moraes; R. Dror; D. Shaw | 2011 | [23] | Zjednodušená verze blokové šifry AES, která poskytuje velmi vysoký výkon na systému s podporou AES-NI. |
Threefry | J. Salmon, M. Moraes, R. Dror a D. Shaw | 2011 | [23] | Zjednodušená verze blokové šifry Threefish vhodná pro implementaci GPU. |
Philox (Philox) | J. Salmon, M. Moraes, R. Dror a D. Shaw | 2011 | [23] | Zjednodušení a úprava blokové šifry Threefish s přidáním S-boxu. |
Permutovaný kongruenciální generátor (PCG) | M.E. O'Neill | 2014 | [24] | Model získaný pomocí lineární kongruenciální metody. |
Generátor bitů náhodných cyklů (RCB) | R. Cookman | 2016 | [25] | RCB je popsán jako generátor bitových vzorů navržený k překonání některých nedostatků Mersenne Twist (MT) a omezení krátké periody/bitové délky u generátorů posunu/modulu. |
Middle Square Weyl Sequence RNG | B. Widynski | 2017 | [26] | Variace na původní metodu středních čtverců Johna von Neumanna. |
Xoroshiro128+ | D. Blackman; S. Vigna | 2018 | [27] | Úprava generátoru Xorshift G. Marsaglia, jednoho z nejrychlejších generátorů na moderních 64bitových procesorech. Související generátory jsou xoroshiro128**, xoshiro256+ a xoshiro256***. |
64bitový MELG (MELG-64) | S. Harase; T. Kimoto | 2018 | [28] | Implementace 64bitových lineárních F2 generátorů s primární periodou Mersenne. |
Čtverce RNG | B. Widynski | 2020 | [29] | Verze Middle Square Weyl Sequence RNG založená na pultech. Designově podobný Philoxu, ale mnohem rychlejší. |
itamaraca (Ita) | D.H. Pereira | 2021 | [třicet] | Známý jako první algoritmus PRNG založený na funkci absolutní hodnoty. Itamaracá je také jednoduchý a rychlý model, který generuje aperiodické sekvence náhodných čísel. |
Alternativním řešením je vytvořit sadu velkého počtu náhodných čísel a publikovat ji v nějakém slovníku , který se nazývá " jednorázový blok ". I takové sady však poskytují velmi omezený zdroj čísel ve srovnání s počtem požadovaným aplikacemi pro zabezpečení sítě. I když tyto sady poskytují statistickou náhodnost, nejsou dostatečně bezpečné, protože útočník by mohl získat kopii slovníku.
Žádný deterministický algoritmus nemůže generovat zcela náhodná čísla, může pouze aproximovat některé jejich vlastnosti. Jak řekl John von Neumann : " Každý, kdo má slabost pro aritmetické metody získávání náhodných čísel, je bezpochyby hříšník ."
Jakékoli PRNG s omezenými zdroji se dříve nebo později zasekne – začne opakovat stejnou sekvenci čísel. Délka PRNG cyklů závisí na samotném generátoru a je asi , kde je velikost vnitřního stavu v bitech, ačkoli lineární kongruentní a LFSR generátory mají maximální cykly řádu [31] . Pokud vygenerovaná sekvence PRNG konverguje k příliš krátkým cyklům, pak se takový PRNG stává předvídatelným a nevhodným pro praktické aplikace.
Většina jednoduchých aritmetických generátorů, i když je rychlá, trpí mnoha vážnými nedostatky:
Zejména algoritmus RANDU , který se používá na sálových počítačích po desetiletí , se ukázal jako velmi špatný [32] [33] , což vyvolává pochybnosti o spolehlivosti výsledků mnoha studií používajících tento algoritmus.
Spolu s potřebou generovat snadno reprodukovatelné sekvence náhodných čísel existuje také potřeba generovat zcela nepředvídatelná nebo jednoduše zcela náhodná čísla. Takové generátory se nazývají generátory náhodných čísel (RNG - anglicky random number generator, RNG ). Protože se takové generátory nejčastěji používají ke generování jedinečných symetrických a asymetrických klíčů pro šifrování, jsou nejčastěji sestaveny z kombinace kryptograficky silného PRNG a externího zdroje entropie (a tato kombinace je nyní běžně chápána jako RNG).
Téměř všichni hlavní výrobci mikročipů dodávají hardwarové RNG s různými zdroji entropie a používají různé metody, aby je očistili od nevyhnutelné předvídatelnosti. V současné době však rychlost sběru náhodných čísel všemi existujícími mikročipy (několik tisíc bitů za sekundu) neodpovídá rychlosti moderních procesorů.
V moderním výzkumu se objevují pokusy využít měření fyzikálních vlastností objektů (například teploty ) nebo dokonce kvantových fluktuací vakua jako zdroje entropie pro RNG. [34]
V osobních počítačích používají autoři softwaru RNG mnohem rychlejší zdroje entropie, jako je šum zvukové karty nebo počítadlo hodin procesoru . Sběr entropie byl nejzranitelnějším bodem RNG. Tento problém stále není plně vyřešen v mnoha zařízeních (jako jsou čipové karty ), která zůstávají tímto způsobem zranitelná. [35] Mnoho RNG používá tradiční osvědčené, i když pomalé, metody sběru entropie, jako je měření odezvy uživatele ( pohyb myši atd.), jako v PGP a Yarrow [36] , nebo interakce mezi vlákny , jako je , v Java SecureRandom.
Pokud je jako zdroj entropie použit aktuální čas, pak pro získání celého čísla od 0 do N stačí vypočítat zbytek dělení aktuálního času v milisekundách číslem N +1. Nevýhodou tohoto RNG je, že produkuje stejné číslo po dobu jedné milisekundy.
Zdroj entropie | PRNG | Výhody | Nedostatky | |
---|---|---|---|---|
/dev/random na UNIX / Linux | Čítač hodin procesoru se však shromažďuje pouze během hardwarových přerušení | LFSR s výstupním hashováním přes SHA-1 | Dostupné na všech Unixech, spolehlivý zdroj entropie | Velmi dlouho se „zahřívá“, může se „zaseknout“ na dlouhou dobu nebo funguje jako PRNG ( / dev / urandom ) |
Řebříček od Bruce Schneiera [36] | Tradiční metody | Malý vnitřní stav AES -256 a SHA-1 | Flexibilní design odolný vůči kryptoměnám | Pomalý |
Microsoft CryptoAPI | Aktuální čas, velikost pevného disku, volná paměť, číslo procesu a název NETBIOS počítače | MD5 hash vnitřního stavu, velikost 128 bitů | Vestavěný ve Windows, nezasekává se | Silně závisí na použitém poskytovateli kryptografie (CSP). |
Java SecureRandom | Komunikace mezi vlákny | SHA-1 – interní stavová hash (1024 bitů) | Skvělý vnitřní stav | Sběr pomalé entropie |
RdRand od intel [37] | Hlukové proudy | Konstrukce PFS založená na „náhodném“ bitovém čtení hodnot z proudů [37] | Velmi rychlé, nezasekává se | Původní zástavba, vlastnosti jsou dány pouze dle souhlasu developerů. |
Jedním z kritérií, že PRNG je kryptograficky silný, je neschopnost rozlišit výstupní hodnoty PRNG od nezávislé náhodné sekvence rovnoměrně rozložené v intervalu. Nechť existuje rodina PRNG , kde mohutnost množiny je rovna . Jak bylo uvedeno výše, je konečná množina stavů, je rozdělení pravděpodobnosti ve stavovém prostoru používané k výběru počátečního stavu (anglicky seed), je přechodová funkce, je prostor výstupních hodnot, . Obvykle a stav generátoru je dán rekurzivním vzorcem pro . výstupní hodnota generátoru ; je posloupnost pseudonáhodných čísel. Předpokládejme, že přechodové a výstupní funkce lze vypočítat v polynomiálním čase, mocniny . Nechť je třída statistických testů , které se v polynomiálním čase snaží odlišit výstupní hodnoty PRNG od nezávislé náhodné sekvence rovnoměrně rozložené v intervalu . Rodina PRNG se nazývá dobrá z hlediska polynomiálního času , pokud existuje taková, že žádný z testů nemůže rozlišit výstupní hodnoty PRNG od nezávislé náhodné sekvence rovnoměrně rozložené v intervalu s pravděpodobností . [3]
Kryptografické aplikace používají ke generování náhodných čísel deterministické algoritmy, a proto generují posloupnost čísel, která teoreticky nemohou být statisticky náhodná. Zároveň, pokud zvolíte dobrý algoritmus, výsledná číselná posloupnost – pseudonáhodná čísla – projde většinou testů na náhodnost. Jednou z charakteristik takové sekvence je dlouhá doba opakování. [3]
Příklady dobře známých kryptograficky silných PRNG jsou RC4 [31] , ISAAC [38] , SEAL [39] , SNOW [40] , velmi pomalý teoretický Blum-Blum-Shub algoritmus [31] a také čítače s kryptografickým hashem funkce nebo kryptograficky zabezpečené blokové šifry místo výstupní funkce [31] .
Mezi kryptograficky silné šifry také patří generátory s více posuvnými registry , generátory s nelineární transformací a generátory většinového šifrování A5/x . [31]
Generátor náhodných čísel je zašifrován pomocí různých tajných klíčů získaných v každé fázi. Čítač s dlouhou periodou se používá jako vstup do šifrovacího zařízení. Při použití 56bitového klíče DES lze použít čítač s tečkou .
Pseudonáhodná sekvence získaná tímto schématem má celou periodu: každá výstupní hodnota , , … je založena na jiné hodnotě čítače, proto . Protože klíč je tajný, žádný tajný klíč nezávisí na znalosti jednoho nebo více předchozích tajných klíčů. Pro zvýšení šifrovací síly algoritmu je nutné v každém kroku zašifrovat náhodné číslo pomocí RNG - . [41]
PRNG ze standardu ANSI X9.17 se používá v mnoha aplikacích finančního zabezpečení a PGP . Srdcem tohoto PRNG je trojité DES . Generátor ANSI X9.17 se skládá z následujících částí:
Vstupní náhodné hodnoty jsou a . je výstupní hodnota. Výpočet bez znalosti není možný v rozumném čase, a tedy další pseudonáhodná hodnota , protože k získání jsou provedeny tři další šifrovací operace. [42]
Kromě zastaralých, dobře známých generátorů LFSR, které byly široce používány jako hardwarové PRNG ve 20. století, je o moderních hardwarových PRNG známo jen velmi málo, protože většina z nich je vyvinuta pro vojenské účely nebo je patentována a udržována v tajnosti . Hardwarové generátory RLOS Toyocrypt a LILI-128 byly hacknuty pomocí algebraických útoků [43] [44] .
V současné době je známo použití hardwarových PRNG implementovaných na bázi nízkovýkonového šumu v elektrických obvodech. [45]
Generátor náhodných čísel pro loterie je hardwarově-softwarový komplex používaný v loteriích, ve kterých je nutné uhodnout kombinaci určitého počtu čísel. Každé z možných čísel má stejnou pravděpodobnost výskytu.
Pokusy o vytvoření generátoru náhodných čísel se datují do roku 3500 před naším letopočtem. E. a jsou spojeny se staroegyptskou stolní hrou Senet . V Senetu hrají dva hráči na dvě strany. Tahy se určují pomocí 4 plochých tyčinek, které lze považovat za generátor náhodných čísel té doby. Hoďte všechny čtyři klacky najednou. Bodování je následující: 1 hůl spadla bílou stranou nahoru – 1 bod a další hod; 2 - 2 body; 3 - 3 body, 4 - 4 a hod navíc. Jedna ze stran hole je černá a pokud všechny čtyři hole spadnou černou stranou nahoru, je to maximální výsledek - 5 bodů a dodatečný hod.
Známý generátor náhodných čísel ERNIE se již řadu let používá k určování výherních čísel britské loterie.
Hlavní požadavky na software a vybavení používané k provádění loterií v Ruské federaci jsou stanoveny federálním zákonem č. 138-FZ ze dne 11. listopadu 2003 „o loteriích“:
V ruských státních loteriích (Gosloto 5 z 36, Gosloto 6 ze 36, Gosloto 6 ze 45, Gosloto 7 ze 49, Gosloto 4 z 20, "Sportloto" 6 ze 49 "") [47] sebe- nakládací loterijní bubny se používají k určení vítězů . Losování je vysíláno živě. [48]
V ruských státních loteriích ("Rapido", "Keno-Sportloto", "Top-3", "12/24", "Vše za sto") se k určení výherců používá generátor náhodných čísel - hardware a software systém certifikovaný ANO "MIC" a splňující doporučení FSUE VNIIMS . Zařízení generuje nepřetržitý proud náhodného šumu, který se převádí na čísla. V daném okamžiku jsou ze streamu staženy aktuální hodnoty, které jsou výherní loterijní kombinací. [49]
V roce 2015 byl bývalý bezpečnostní ředitel US Multi-State Lottery Association poté, co vyhrál 16,5 milionu dolarů, který měl přístup k softwaru používanému při losování loterií, obviněn z používání speciálních algoritmů k určení vítězné loterijní kombinace na několik dní v roce. [padesáti]