Éppen a php rand() funkción töprengtem, és azon gondolkodtam, hogyan tudnám átdolgozni, és eljöttem teljesen elkábult.

Hogyan működnek a véletlenszám-generátorok?

Megjegyzések

  • Az álvéletlenszám-generátorok magot, egy előre definiált állandók és matematikai képletek táblázata. A valós véletlenszám-generátorok általában légköri zajt használnak. Könnyedén megszerezhet véletlenszerű számokat a / dev / random olvasásból.
  • Garantáltan véletlenszerű a légköri zaj?
  • A random.org nagyon jó vita a véletlenszerű számokról és azok ‘ újbóli létrehozásáról .
  • function rand() { return 4; /* determined by die roll - guaranteed to be random */ }
  • Valakinek ezt kell tennie: xkcd.com/221 😉

Válasz

A véletlenszám-generátorok (RNG-k) valóban álvéletlenszerű számokat generálnak, mivel valójában VALÓSAN véletlenszámot nem lehet létrehozni. Az igazán igazán véletlenszerű dolgok csak Istenem, mint a villám.

Ez a wikipédia-cikk segíthet a magyarázatban: http://en.wikipedia.org/wiki/Random_number_generators


Megértésem szerint az RNG-nek alapvetően két része van: a mag, majd az abból kiválasztott véletlenszám. Amikor az RNG-t kiveted, megadod egy kezdő po-val egyenértékű int. Ennek a kiindulópontnak akkor van egy csomó száma, amely “benne” van, és amelyek közül a program választ. A PHP-ben az srand () használatával “keverheted” a magokat, így szinte mindig más választ kapsz. Ezután a rand (min, max) segítségével bejuthat a magba, és kiválaszthat egy számot a min és a max között, beleértve.


FIGYELMEZTETÉS, LEHETSÉGES SAJT-ANALÓGIA ELŐTT!

Gondolj minden egyes „magra” mint jégládára, majd a véletlenszerű számokra mint jégkockákra. Tegyük fel, hogy 1000 jégládája van, és mindegyik ládájában 1000 jégkocka van. A megyei vásáron egy jégkamrát választanak, amelyet italokhoz használni kezdenek, és csak egy jégkockát használhatnak. Nekik azonban csak 1 köbcentiméternél nagyobb jégkockákra van szükségük. Tehát véletlenszerűen választanak egy ládát az 1000 láda között, majd véletlenszerűen kiválasztanak egy jégkockát a mellkas belsejében. Ha a kívánt méretre működik, akkor használják. Ha nem, akkor visszateszik a mellkasába a többiekkel. Ha egy kicsit szórakoztatóbbá akarják tenni, előzetesen mellkasot cserélnek a teljes feledékenység érdekében, ha akarod!

Ami a PHP működését illeti. valójában fizikailag választja ki a magot és a véletlen számot, ehhez nincs elég tudásom (valószínűleg erre gondoltatok a legjobban!). Nem próbálom megismételni a rand () függvényt; a legtöbb elkészített webalapú alkalmazás esetén a rand () elegendő minden véletlenszerű számhoz.

Nézze meg a lineáris kongruenciát is generátorok, ez lehet inkább az, amit keres, ha piszkos részleteket szeretne: http://en.wikipedia.org/wiki/Linear_congruential_generator

Remélem, hogy ez segít!

Megjegyzések

  • Hogyan lennének véletlenszerűek a god cselekedetei a legkevésbé sem? Ráadásul a villám sem véletlenszerűen véletlenszerű, a különböző körülmények által meghatározott utat követi. Emellett a számot előállító tolmács lényegében lényegtelen.
  • I ‘ m jogi értelemben vett Isten cselekedeteit használom: hu.wikipedia.org/wiki/Act_of_God Véletlenszerűnek számítanak, mivel nyilvánvaló emberi kontrollon kívül esnek.
  • Tehát lényegében semmi sem véletlenszerű. Ehhez azonban minden látszólag véletlenszerű esemény befolyásolására van szükség, ami ‘ nem működik, ha az idők legelején eléred …. Úgy tűnik, I ‘ Néhány filozófiaórát fogok venni = D
  • @ Korvin, amennyire tudjuk, olyan kvantumjelenségek, mint a radioaktív bomlás, vagy egy gerjesztett atom által kibocsátott foton valóban véletlenszerűek . A matematikusok és a filozófusok azonban azt állítják, mit jelent az, hogy valóban véletlenszerűek vagyunk. És bár a hétköznapi emberek azt gondolják, hogy az érme dobása meglehetősen véletlenszerű, az agilis színpadi mágusok ( news.stanford.edu/pr/2004/diaconis-69.html ) rendszeresen tudnak szerezzen 10 fejet 10 lapon.
  • @Charles – Egy érme dobása nem ‘ még bináris fejeket / farkakat sem, ez ‘ nek valójában feje / farka / éle, így egy nagyon jó színpadi mágus elérheti, hogy se fej, se farok ne jöjjön le. * 8 ‘)

Válasz

Ők általában nem igazán véletlenszerű, hanem ál-véletlenszerűnek hívják őket, mert véletlenszerűnek tűnő számszekvenciát generálnak. Ez néhány érdekes matematikai képlettel történik. Az egyik leggyakoribb a lineáris kongruenciális Generátor .

Az ál-véletlenszerű számoknak van egy hasznos tulajdonsága, amelyet az igaz véletlenszerű számok nem tesznek: ha ugyanazt a magot használod induláskor, akkor azonos sorrendet kapsz vissza. Ez nagyon hasznos lehet a teszteléshez.

Megjegyzések

  • Ha ‘ jól értem a második állítást: random(5332) mindig egyenlő lesz a következővel: random(5332)?
  • @Korvin, nem, nem úgy értem, ha a következőt hívja: srand(5332) akkor a következő szám, amelyet rand ad vissza, mindig ugyanaz lesz.
  • ” véletlenszerűen jelenik meg ” – > statisztikai tulajdonságai megegyeznek a valóban véletlenszerű számokkal.
  • +1 az LGC Wikipedia linknél, ennek kiváló animáció arról, hogy az egyszerű PRNG-knek miért vannak komoly korlátai a többdimenziós Monte-carlo szimulációk során.

Válasz

Vagyok kérsz álvéletlen vagy véletlenszerűt? Mások álvéletlenszerűségről válaszoltak, hadd beszéljek a Randomról.

Voltak (vannak?) Tényleges hardver alapú véletlenszám-generátorok. Ezek egy chipen alapultak, amelyen egy kis rádió mérte a mélyűr sugárzásának fehér zaját, vagy egy kis radioaktív minta, és a bomlása közötti időszakokat mértük. A problémát a sávszélesség okozta – az általuk előállított entrópia mennyisége nem volt túl magas, így ál-véletlenszerű algoritmusok magjaihoz használták. Banki rendszerekben, nagy biztonságban és hasonlókban használták őket.

OTOH, ha találkozik bármely beágyazott rendszer fejlesztővel, akkor ezek nevetni fognak. A mikrovezérlő programozásának általános célja, hogy bármely 16 bites analóg-digitális átalakító alacsony 4 bitjének olvasása lebegő (nem csatlakoztatott) tűvel tökéletesen jó véletlenszerű zaj, több mint elegendő sávszélesség mellett (minél rövidebb a szavazási periódus, annál “zajosabb” a kiolvasás), és könnyebb, mint a tényleges RNG rutin megírása. És ha figyelembe vesszük, hogy az ADC-k általában megtalálhatók a mikrovezérlők szilíciumában, ezeket általában megvalósítják és gyakran 8 csatorna, amelyből talán 5 szükséges az alkalmazásához, gyakorlatilag ingyenes.

És még ha nincs is ADC-je, néhány digitális GPIO-csatlakozóhoz csatlakoztatott elem nagyon jó Beágyazottban a zaj ev van-jelen (és állandóan küzdött), és így valódi véletlenszerűség megszerzése nagyon egyszerű.

Válasz

Sokféleképpen lehet hogy megpróbálja “véletlenszerű” számsorozatot utánozni. Első lépésként el kell olvasnia a lineáris kongruenciális generátorokat , az biztos. Így működnek a legtöbb alapvető véletlenszám-generátor, és arra tippelnék, hogy a PHP rand () függvénye hogyan működik.

A következő érdekes kérdés, hogy elgondolkodhatunk, hogy hogyan kezeli magát? ? IP-cím? Stb.

Megjegyzések

  • A vetőmag az, ami megzavar, tudok ‘ ne gondolj bármi olyanra, ami valamilyen minta nélkül képes beágyazni a függvényt, és ha nem is, akkor mi okozza elsősorban a véletlenszerű mag létrehozását!
  • Úgy gondolom, hogy az időbélyeg gyakran szerepel akkor használatos kezdeti magként, ha egyiket sem adják meg más forrásból. A régi BASIC-ban a RANDOMIZE TIMER gyakori kifejezés volt, és ” jó elegendő ” a legtöbb (nem kriptográfiai) célhoz. A man 3 srand szerint a GNU C könyvtár egy fix magja 1-ig, amíg a PRNG-t újra nem vetik.

Válasz

Először is, gyakorlatilag az összes rand() függvények nem nyújtanak valódi véletlenszerűséget, inkább úgynevezett ál-véletlenszerű számokat adnak meg.

Tehát hogyan működnek az ál-véletlenszerű számgenerátorok? Alapvetően ugyanúgy, ahogy a titkosítás is működik: Van egy funkciója (hash), amely bizonyos összetevőket vesz be, és valamilyen kimenetet olyan összetett módon állít elő, hogy a kimenetből lehetetlen kitalálni a bemenetet, vagy fordítva. Minden cypher felhasználható meglehetősen jó ál-véletlen generátor létrehozására. Bár a titkosításhoz elvileg bármilyen ál-véletlen generátort is használhatna, a legtöbb ál-véletlenszerű szám-generátort elsősorban a sebesség, nem pedig a kriptográfiai biztonság érdekében fejlesztették ki, tehát nem okoz fejfájást a hackereknek.

Egy ál-véletlen generátor esetében a kivonatolási funkciót a generátor valamilyen rejtett belső állapotára alkalmazzák, és annak kimenetét arra használják, hogy a) módosítsák ezt a belső állapotot, és b) a rand() függvény kimenetének kiszámításához. A rand() következő meghívása a megváltozott belső állapotot használja, és így más eredményt fog eredményezni. Minél jobb a hash függvény, annál kevésbé könnyedén megkülönböztethetők az eredmények a valódi véletlenszámoktól.


Ami azt illeti, manapság a számítógépek valódi véletlenszerű számokhoz férnek hozzá: Ezek a külső eszközök által létrehozott megszakítások időzítéséből fakadnak. A Linux ezeket az apró bizonytalansági értékeket arra használja, hogy folyamatosan felkavarja az “entrópiakészletet”, amely csak néhány kilobájt belső állapot. Az ezen entrópiakészleten alapuló kriptográfiai kivonatok a /dev/random és /dev/urandom eszközökön keresztül állnak rendelkezésre. Tehát az igazán jó véletlenszerű számokhoz való hozzáférés olyan egyszerű, mint megnyitni e két eszköz egyikét, és olvasni belőlük néhány bájtot.

Válasz

A véletlenszerű számok a folyamat által generált számok, amelyek kimenete kiszámíthatatlan. vagyis nem tudjuk megmondani, mi lesz a következő kimenet. Vegyünk néhány egyszerű példát a kocka eredményére. Az kiszámíthatatlan, hogy mi kerül kimenetre, ha dobunk egy kockát.

Kétféle véletlenszerű szám létezik. Igaz véletlen számok 2. Ál véletlenszerű számok.

A véletlenszerű számok generálása

Megjegyzések

  • Az idézet formázásával jelölje ki a a válasz a tiéd, és amelyek az általad idézett forrásból származnak. Ha minden válasza egy külső forrásból származó másolás / beillesztés, akkor ‘ itt nem jó válasz.
  • ez nem semmi lényegeset nem kínál az előző 6 válaszban kifejtett és kifejtett pontok felett

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük