Dave'n vastaus jatkuu melko hienosti, mutta selventää hieman enemmän toisesta vaihtoehdosta:
todellinen laitteiston satunnaislukugeneraattori käyttää fyysistä entropialähdettä. Tällainen entropialähde voi olla kosminen säteily, sähkömelu, käänteisjännitetyn diodin (tai BJT-transistorin) avanlanche-vaikutus, chua-piiri jne. Mitä vähemmän deterministinen entropialähde, sitä parempi on satunnaisen lähdön laatu. Ihanteellinen entropialähde olisi käyttää kvanttifysiikan vaikutusta tai jotain, jota ei voida mallintaa deterministisillä yhtälöillä.
Toinen tärkeä tekijä satunnaislukugeneraattoreiden kanssa on, että entropialähde voi tuottaa vain rajoitetun määrän entropiaa ajan yksikköä kohti. Hyvä esimerkki on chua-piiri: vaikka se on melko satunnainen, sillä on erittäin huono nopeus eikä sitä voida käyttää tosielämän sovelluksiin.
Monissa prosessoreissa / mikro-ohjaimissa, joissa on sisäänrakennetut RNG: t, kello Drift 2-4: een, jotka on tarkoituksellisesti väärin synkronoitu, käytetään. Sitten he käyttävät sekä analogisia että digitaalisia suodattimia satunnaistamaan kuvion entistä enemmän ja siirtämään tuloksen rekisteriin. Tällaisen suodatuksen suorittaminen vaatii muutaman jakson, mikä selittää tietyn kellon vaadittavien jaksojen vähimmäismäärän, ennen kuin uudempi arvo on käytettävissä.
Kellon ajautuminen ei ole aivan kvanttiefekti, joten se voidaan mallintaa, mutta se on tarpeeksi satunnainen, koska se riippuu monista parametreista, kuten lämpötilasta, piiprosessista, toimintataajuudesta, sähköisestä kohinasta, taustasäteilystä jne.
Sovelluksissa, joissa laitteiston RNG: llä ei ole riittävää suoritustehoa (kuten erittäin vaativissa salaussovelluksissa), on melko yleistä käyttää laitteiston RNG: tä siemenenä näennäissatunnaislukugeneraattorille, kuten rand () -funktiolle. sdtlib. Tällainen sovellus tarjoaa kuitenkin yleensä paremman randin () toteutuksen, joka on erityisesti suunniteltu toimimaan siemenestä, joka voidaan usein hylätä true satunnaisarvoilla. Uudemmissa Intel-prosessoreissa, joissa on integroidut laitteisto-RNG: t, näennäissatunnaisalgoritmiosa on integroitu suoraan piiin, joten se suoritetaan laitteistolla, mikä tuottaa erittäin korkean satunnaisen läpimenon.
Jos mieltä olet randista () itse menetelmä, se on vain metemaattinen lauseke, joka on suunniteltu tuottamaan riittävän suuri määrä entropiaa. Riittävän suuri riippuen sovelluksesta: salausavainten sukupolvien satunnaisuuden on oltava korkealaatuisempaa kuin suosikkimusiikkisoittimesi yksinkertaisen satunnaistoiston edellyttämä satunnaisuus. On selvää, että mitä korkeampi satunnaislähdön laatu, sitä korkeammat satunnaisluvun laskennalliset kustannukset ovat.
Satunnaislukuun sisältyvät toiminnot ovat melko samanlaisia kuin MD5-hashin laskemisessa. tiedosto: he yrittävät käyttää eräänlaista bittivyöryvaikutusta niin, että siemenarvon yhden bitin muutos muuttaa koko generointikuvion. Sivuhuomautuksena en suosittele MD5: n käyttöä näennäissatunnaislukugeneraattorina; se oli vain esimerkki. Se olisi sekä tehotonta että ei niin satunnaista, mutta asia on siinä: jos syötät saman tiedoston MD5-algoritmiin, saat aina saman deterministisen lähdön, melkein samalla tavalla kuin saisit aina saman tuloksen rand () -funktio, jos syötät saman siemenen, ellet toteutus riippu mielivaltaisista elementeistä, kuten nykyisestä ajasta.