Chaoskey - hardveres random number generator (RNG) mindenkinek

Címkék

Your browser does not support the video tag.

Mivel a kriptográfiára épülő biztonság erősen függ a robusztus entrópia-forrástól, mivel a mai számítógépek nagy része nem rendelkezik robusztus hardveres RNG-vel és mivel nincs is jelenleg a piacon olyan eszköz, amely megfelelne az elvárásaiknak, a veterán nyílt forrás hacker Keith Packard úgy döntött, hogy létrehoz egy USB-re csatlakoztatható, olcsó, Linux alatt azonnal használatra kész, hardveres és szoftveres szempontból teljesen nyílt eszközt, a Chaoskey-t.

Az 1.0-s verzió az első "production" szintű verzió a Chaoskey-ből. Az első 1000-es tétel valamikor augusztusban készülhet el belőle. A Chaoskey honlapja itt található.

Hozzászólások

Hü, ez nagyon jó! Nemsokára becsenget hozzá az NSA, és megkérdezi, mennyibe kerülne egy visszafejthetö algoritmus?

--
robyboy

Ha nem korlátozná az USB az adatátvitel sebességét, akkor lehetne ezt másra is használni, nemcsak kriptográfiára.

---
Science for fun...

Sztochasztikus folyamatok szmulációjánál gyakran van szükség nagy mennyiségű véletlenszámra. Az NVIDIA a CUDA-hoz például mellékel is ilyen könyvtárat, de mások is vannak. Ha ez a kütyü gyorsabban tudná előállítani őket, mint a szoftveres módszer, az nagyot dobna a futásidőn.

---
Science for fun...

Lehet nem is csak az USB sebessége korlátozna, hanem a kommunikációs idő a rendszer és a GPU között. Persze lehet trükközni, és elrejteni a számolási idő alá, de ez nem mindig kivitelezhető. Azonban GPU-ba építve remek lenne egy ilyen kütyü, amikor nincs szükség arra, hogy reprodukálható legyen az előállított véletlenszám-sorozat, én tudnám is egyből használni.

A csapda pont ebben az igényben rejlik!
Egy fizikai jelenség termikus zaját felhasználva véletlenszám előállítására teljesen tökéletes módszer.
De.
Mivel a leolvasás sebessége sávhatárolt (alias keskenyebb a sávszélesség, mint a jelenség által generált zaj spektruma), rögtön megváltozik az eloszlás. Így a true rng false lesz. ;)
Analóg áramköröknél meg szoktak adni zajt és annak a frekvenciafüggését ÉS 10Hz alatti zajt ÉS hosszú idejű stabilitást.
Ezekből az szűrhető le, hogy ideális zajforrást csak végtelen hosszú idő alatt lehet jól kiolvasni. Ha nem így van, akkor a matematikusok és fizikusok karöltve vizsgálhatják, hogy a természet által megalkotott ideális zajforrás az adott korlátok között mennyire fog hibázni.
Ajánlom elolvasásra az Intel IvyBridge 800MB/s rng véleményezését.
A topicban említett cucc sokkal kisebb sávszélességű amatőr eszköz. Tényleg arra való, hogy a plebs - olcsó cpu mellett is - true rng birtokosa legyen.

Ne sértegesd már a GPU-kat! ;)
Azért mert valaki betanított munkás (nem olyan okos mint Te), viszont nálad 30x gyosabban végzi az egyszerű kis munkáját, nem szabad butának hívni!
Viszont igazad van. Létezik olyan RNG, ahol az egyes biteket párhuzamosan állítják elő.

Egy érdekesség a véletlenszámokról:
A süket matematikusok kitalálták a Mote Carlo módszert. Az eljárás lényege:
- Vegyél egy adott eloszású véletlenszám sorozatot.
- (Itt az okosok matematikailag bizonyítják, hogy a sorozat ténnyleg a kívánt eloszlású.)
- Ha ki akarsz számolni valamit, akkor készítsd el rá a képletet.
- Válassz ki a véletlenszám sorozatból - tetszőleges helyről - néhány számot.
- Helyettesítsd be a képletbe.
- Kész az eredmény.

Ilyet a 49 (?) utasításos TI57 zsebszámológépen is próbáltam. A feladat (bocsi, nem emléxem a pontos számokra): Számoljuk ki e értékét 3 tizedes pontossággal! Ehhez 8 vagy 12 számot ki kell választani a táblázat teszőleges helyéről, majd behelyettesíteni. És kijön az eredmény!

Ezt a módszert 30-40 éve használták (szerintem most is), gyors, adott hibahatárú közelítő számitások elvégzéséhez.

És most jön az érdekesség! A neve azért Monte Carlo módszer, mert úgy vélték, hogy rulettel elő lehet állítani a szükséges véletlenszámokat. Aztán jött egy másik matematikus bácsi, aki addig firkálgatott egy papírra, míg be nem bizonyította: A rulett teljesen alkalmatalan a kívánt sorozat előállítására!

Így van ez minden RNG-vel. Adott a fizikai jelenség, amiről a matematikusok és fizikusok bebizonyították a megfelelőségét. Aztán jön a hardvertervező és nem tudja megvalósítáni az elméleti, csak a gyakorlati áramkört. A kapott végeredmény úgy hívják: kompromisszum. ;)

Nem világos. Az odáig stimmel, hogy egy keskeny sávú szűrővel szinuszos jelalakot csinálsz a zajból, de ha csak felülről korlátozod a spektrumot, az, ami a spektrumban alul marad, szerintem továbbra is véletlenszerű. Persze világos, hogy ha analóg módon korlátozod a sávszélességet, majd többszörös frekvenciával veszel mintát, akkor a korábbi mérési eredményekből egész jól lehet extrapolálni a következőre. Ugyanakkor itt az analóg jel széles sávú marad, csak amikor mintát veszel, az lesz ritkás. Ez számít valamit is?

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Ide rakom mégegyszer, hátha most sikerül elolvasni. ;)
keskenyebb a sávszélesség, mint a jelenség által generált zaj spektruma
Sem keskenysávú szűrőről, sem színuszról nem volt szó.
A termikus zajról tudjuk, hogy
- adott eloszlású (vannak bizonyos fajta eloszlások ->goto matematikakönyv)
- a spektruma kb. 0Hz..sok Hz (nem tudom mennyi a vége, de sok)
- fehérzaj átlagértéke==0
- tetszőleges sávszélesség esetén hasonlóan viselkedik
A feldolgozó áramkörről tudjuk, hogy
- véges sávszélességű, ami << zaj felső frekvenciája (==aluláteresztő szűrő ->goto műveleti erősítő)
- nagy a mintavételezési sebesség >> zaj alsó határfrekvenciája (miatta nem tudjuk használni az alsó határfrekvenciát) - Megfordítom ezt, hátha megérted. Mintavételezd ritkásan a lottószámokat. Aztán kiálts fel: Jé! Mindig a tizenhármast húzzák!

Igazad van, továbbra is véletlenszerű. Viszont van az a felsőfokú matematika, amit már én sem értek. De feltételezem, ha egy széles spektrumon adott eloszlású véletlenszámokra sáváteresztő szűrőt alkalmazok, akkor más lesz az eloszlásfüggvény. Jön a matematikus, és kiszámolja az új eloszlási függvény, majd megmondja jó vagy nem.
Tehát itt nem a mintavételezési törvényről van szó, mint írtad.
Ajánlom elolvasásra az Intel IvyBridge 800MB/s rng véleményezését. - Még az Intel sem járt sikerrel a jó rng megalkotásában!
De akár a topicnyitó áramkört is megnézhetnéd! ;)
Amit felejebb írtam, a Monte Carlo módszerekbe kukkancs bele!

A legalapvetőbb (ál)véletlenszám generátor egy "megfelelő polinommal" visszacstolt hosszú shift regiszter. Fehérzajt állít elő, de természetesen sokkal keskenyebb spektrumút, mint a termikus zaj. Erre is van módszer, hogy a polinom megfelelőségét igazold. Szóval - fejből -rittyentsd ide a fehérzaj eloszlásfüggvényét, vagy lásd be amit én: nem értek hozzá!
Van több olyan tanulmány/diplomamaunka a neten, ami leírja a fuggvényeket ás a mintavételezés hatását.

Ami gyakorlati ismeretem van:
- A termikus zajgenerátor komparátorral működik.
- Pl. az Enterprise 128 "Dave" chip - a hanggenerátor áramkör. Több változtatható hosszúságú és visszacsatolású shift regisztert tartalmaz. Természetesen az órajel is állítható. Ezekre még alul- és/vagy felülüláteresztő szűrőket kötve kész a spéci hanggenerátor. De az már nem lesz fehérzaj!
- A fehérzaj átlagértéke==0. Ezt használja ki a CDROM scrambling/descrambling algoritmusa. A hang átlagértéke is mindig 0. Ha meg valami marha egy csomó nullát rögzít adatként a CDROM-ra, akár a leolvasó erősítő munkapontja is elmászhat. Ezért a fenti módon előállított álvéletlenszám sorozattal xorolják az adatokat, és így rögzítik.

Olvastam egy jóval később keletkezett műben, hogy nem jó az eloszlása. Én nem vagyok matematikus, csak aki bizonyította. ;) A bizonyításból csak annyi maradt meg, hogy előfordulhat 120db 0 érték egymás után. Ez alkalmatlanná teszi arra a módszerre, miszerint a számsor tetszőleges szakaszát felhasználhatod a számításokra.
Ha belegondolsz, mennyit fejlődött az atombomba óta a fizika, tán a matematikára is igaz lehet.

"A legalapvetőbb (ál)véletlenszám generátor egy "megfelelő polinommal" visszacstolt hosszú shift regiszter."

Sokmindenre jó, de nem igazán véletlen. Az LFSR bejárja a teljes értékkészletet, vagy legalábbis annak egy kisebb-nagyobb részét úgy, hogy közben minden érték pontosan 1-szer szerepel. Tehát adott X0 érték után mindig X1 lesz a következő érték, soha nem X2, vagy X3. Kicsit jobb véletlenséget úgy lehet csinálni, hogy modulo osztjuk a kijövő értékeket, csak ekkor nyilván kisebb lesz a használható értékkészlet, illetve a nem 2 hatványú osztásoknál torzul az eloszlás is.

Periódikus, de hosszú regiszternél hosszú az ismétlódési ciklus is. Nem ez a lényeg, hanem az eloszlás, ami a fehérzaj eloszlásához hasonlít. A "jobb véletlenség" eléggé undefinit.
A gyakorlatban a "seed" úgy néz ki, hogy a regisztert presetelik egy adott (scrambling, hardverkulcs) vagy véletlen (álvéletlenszám generálás) értékre.

Fehér zajnak nincs "fehérzaj" eloszlása. A fehér zaj egy stochasztikus folyamat, végtelen sok, valamilyen eloszlású valószínűségi változónak a sorozata.
Még az sem kell, hogy az egymást követkő valószínűségi változóknak ugyanaz legyen az eloszlása.
Ahhoz, hogy egy folyamat fehér zaj folyamat legyen, csak annyi kell, hogy bármely két valószínűségi változó korrelációja 0 legyen.
VAn ennél kicsit szigorúbb fehér zaj definíció, ahhoz az kell, hogy a valószínűségi változók függetlenek is legyenek.

Az, hogy egy PRNG milyen eloszlást generál, lényegtelen, a lényeg, hogy ismert eloszlást generáljon. Persze a legjobb az egyenletes eloszlás, abból megfelelő véletlen mintavételezéssel lehet bármit csinálni, Poissont, normált stb.

"A "jobb véletlenség" eléggé undefinit."
Igen, önmagában nem jól definiált fogalom ez. Meg kell adni azon statisztikai teszteket, amelyen át kell mennie egy (P)RNG-nek, hogy felhasználható legyen egy adott módszerhez. Ha egy PRNG is megfelel ezen teszteknek, akkor tökéletesen használható valódi véletlen generátor helyett.

Ez mind igaz, bár nem fért ide a sok kilóméter matekkönyv.
Úgy vélem, beláttad, hogy ha sikerül egy izéről bizonyítani egy adott feladathoz a megfelelőségét, akkor az az izé alkalmas az adott feladathoz. ;) Ez már egy Asimov-i magaság! Ha a robotról nem tudjuk megmondani, hogy ember-e akkor... ;)

Nem győztél meg. A shift regiszterből kipottyanó dolognak hiába jó az eloszlása, ha nem véletlenszerű, hanem determinisztikus. Nekünk éppen az a feladatunk, hogy az eddigi számokból a következőt ne lehessen megjósolni, s úgy vélem, a záróirányban előfeszített p-n átmenet a letörés környékén éppen ezt fogja produkálni. Hiába ismered a korábbi számokat, abból a következőt nem tudod megmondani. Ezzel szemben a visszacstolt shiftregiszternél igen, hiszen az előállítása determinisztikusan történik.

Azzal meg nem igazán tudom, mit szerettél volna mondani, hogy a zaj átlaga nulla. Gondolom, DC középértékre, azaz lényegében adott idő alatt, idő szerint integrálva - osztva az idővel, de ez most itt lényegtelen - gondolod ez. Jó, és? Amúgy ezt a vázolt áramkör végén lévő kicsatoló kondenzátor megoldja.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Tényleg nem győztelek meg. Bár nem is kakartalak meggyőzni semmiről. :)
Nem is állítottam, hogy a visszacsatolt shiftregiszter ideális véletlenszám generátor. Mindössze néhány példát írtam a gyakorlati felhasználásra, amikor - bár determinisztikus - de rövid szakaszon "véletlennek tűnő" sorozat is elegendő. Ha jól rémlik, a Texas TTL receptekben még szkópon is mutatják ezt az egyszerű fehérzaj generálási módszert.
Jó dolog a kondenzátor! Sajnos a 0,0,0,0,0,... vagy az 1,1,1,1,1,... sorozatra meg se nyekken. Ennek a kiküszöbölésére írtam egy a gyakorlatban használatos módszert. (Van élet a /dev/crypto után is! ;))

Tényleg ennyire zavarosan írok?

Végy egy zajgenerátort, például záróirányban letörésig előfeszített emitter-bázis diódát, amelyet egyben az erősítője fog megvédeni. Csatold ki a zajt egy kondenzátor segítségével annak érdekében, hogy a jelnek ne legyen DC komponense. Aztán egy A/D konverterrel vegyél mintát belőle időnként, s az így kapott számmal cselekedj belátásod szerint.

Komparátorról, 1 bit/sample-ről én nem beszéltem, s nem is érzékelem ennek szükségességét.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Néha. ;)

Természetesen mindenben igazad van!
De.
Sajnos a zajforráson alapuló rng nem úgy működik, ahogy elképzeled. Ezért aztán igen nehezen tudsz arról vitatkozni, amiről lövésed sincs.
Alant az elvi megvalósítás, de néha korrekciós tagokat is raknak rá.

Ez az ADC megoldás meg akkora okosság, hogy a helyedben azonnal szabadalmaztatnám! Gondolj bele! Elég lenne akár csak az Intel mérnökeinek a torkán lenyomni. Az így kapott suskán jó pár sört lehetne vásárolni!

Mondd már, miért nem nézel utána legalább az alapoknak? Persze itt a kondenzátornál bonyolultabb konstellációkra gondoltam. ;) Akkor megtudnád, hogy minden véletlenszerű folyamaton alapuló TRNG 1 bites, no meg azt is, hogy miért. (Természetesen a több egybites párhuzamos kapcsolását nem tekintjük több bitesnek!) Ha egy kicsit utánanézel egy ADC paramétereinek, biztosan találsz 15-20 indokot, hogy miért lenne rossz megoldás ilyesmit belekeverni ebbe az áramkörbe. (Bár létezik ADC-n alapuló RNG is.)
Mivel úgy sem fogsz utánanézni tessék: az Intel IvyBridge TRNG kapcsolási rajza. A hülyék nem beraktak egy 64 bites prociba egy 1 bites RNG-t ADC nélkül! :) Pedig ennek a működése is a zajon alapul, csak nem komparátorral szedik le, hanem monostabillal.

Kissé elbeszélünk egymás mellett. Én elmondom, hogy látom, miről van szó, de az én elképzelésem egészen más. Ezt követően, mintegy érvként iderakod azt a megvalósítást, amiről te beszéltél eddig, s amelyről én mondtam, hogy nem erről beszélek. Mindezt úgy, mintha minimum természeti törvény lenne, mint a gravitáció, hogy csak így lehet, így szabad véletelenszám generátort építeni, s közben permanensen személyeskedsz, s biztosítasz affelől, hogy hülye vagyok. Ez utóbbi ugyan akár még igaz is lehet, ám nem gondolom, hogy ennek megállapítására te lennél a kompetens személy.

A komparátorral az a bajom, hogy el tudom képzelni, hogy sokáig féltáp alatt vagy féltáp felett zajong a szerkezet, illetve a mintavételből adódóan ugyan nincs így, de egymás után épp ilyen mintákba nyúl az ember, így lesz egy halom nullája vagy egyese egymás után.

Ezzel szemben az A/D konverter eltérést ad a kimenetében már akkor is, ha a zajforrásban kvantálásnyi változás van, továbbá úgy gondolom, annak a valószínűsége roppant csekély, hogy a mintavételből adódóan éppen ugyanazon feszültségtartományban legyen a zaj egymás után sokszor. Viszont, ha így is lenne, akkor sem egy tiszta nulla vagy tiszta egyes sorozat lesz az eredménye.

Hajtogatod azt, ami nem jó megoldás szerintem sem, s nem akarod megérteni, hogy nem arról beszélek, szakadj el attól a koncepciótól, amit a rajzon küldtél. Az én változatomban van egy zajforrás, van egy órajel, ez utóbbi lépteti ki a biteket, minden nyolcadik órajelre pedig mintát vesz egy teszem azt, 8 bites A/D konverter, az eredményt latch-eli egy shift regiszterbe, ahonnan pedig lépnek kifelé a bitek. Az valóban okozhat gondot, hogy a bitekben egyfajta helyiérték reprezentálódik, nem azonos súlyúak, bár szerintem fehér zajnál ez nem gond, ugyanakkor, ha mégis, akkor valamilyen kombinációs hálózattal szerintem össze lehetne ezt kavarni szimmetrikusan, mégpedig az A/D konverter kimenete és a shift regiszter párhuzamos bemenet között.

Abban az értelemben tényleg hülye vagyok hozzá, hogy semmiféle matematikai, statisztikai megközelítés nincs abban, amit írtam, de kiindulásnak szerintem jó lehet az elképzelés.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

A lehülyézésről annyit, hogy ilyet nem tennék. Apám elveit vallom, aki több mint 60 évig tanított (is). Ő azt állította, hogy elégtelen osztályzat nincs, mert azzal azt állítaná, hogy az illető hülye. Ez pedig ellenkezne az emberi jogokkal! (Hol volt még akkor az ombudsmann!) Természetesen elvei szerint cselekedett. Vizsgáztatáskor nem adott egyest, hanem megígérte, hogy kettes esetén megadja a hármast. Általában négyes-ötös szintet értek el az ilyen "humánusan kidobott" tanulók.
Elmeállapotodat megítélni nem tudom, mert nem én vagyok a cihiáter. :)
Azt viszont, hogy átgondolás nélkül dobálódzol néhány dologgal azt pontosan meg tudom ítélni. Pont azért, mert elég régen vagyok a szakmában, és engem néhányan pont azért utálnak, mert a nagyon egyszerű és nagyon precíz dolgokat szeretem.
A véletlenszám generálás magasszintű matematikáját én sem látom át! Ennek ellenére néhány áramkörnek a tulajdonságait eléggé ismerem ahhoz, hogy meg tudjam ítélni a használhatóságukat egyes szituációkban.
Lássuk mit tudunk!
Alaptétel: véletlenszám nincs, csak véletlen számok sorozata.
Esetünkben egy "tökéletes" véletlen forrást használunk. Az ám, de úgy kellene felhasználni, hogy minél több véletlen számot nyerjünk ki egy időegység alatt, miközben a forrás tökéletességét nem rontjuk el.
A topicnyitó áramkörben azzal hencegnek, hogy egységnyi erősítés mellett 200MHz sávszélességű erősítőt használnak. Erre azért van szüség, mert az utána kötött komparátort nagy biztonsággal túl kell vezérelni. Így ezzel a szerkezettel <60Mb/s véletlen bináris sorozatot lehet előállítani, ha elég gyors a komparátor.
Ha kötünk utána egy ADC-t mi történik? Legyen 8 bites és 60Mb/s sebességű. Ha egy SA típusú átalakítót használsz (a PIC-ben is ilyen van), akkor minimum 9 órajel az átalakítás + a mintavétel néhány órajel + plusz a kiolvasás és inicializálás. Így az 60/8 bit ideje alatt kell lezongorázni a kb. 20 órajelet. Tehát az ADC órajele 150MHz. Sajnos az ADC átalakítás alapelve, hogy az apertúrát a lehető legalacsonyabb szinten kell tartani, akkor alakítod át a bemenetet a legpontosabban. Megfordítva a nézőpontot: Ha túl sokáig veszed a mintát, akkor a mintavétel integrálja és/vagy bizonytalanná teszi a tökéletesnek tartott forrás jelét. Emellet az ilyen típusú ADC számos egyéb hibával rendelkezik, ami befolyásolja az imént még véletlenszerű jelet, ami deteminisztikus hibát visz a rendszerbe. Azaz rontja a minőségét! (A max PIC18-ba épített ADC ennél 150x lassabb.)
A párhuzamos ADC már sokkal jobb, de 8 komparátor kell hozzá. Az előbb még jó jelbe egy csomó statikus hibán visz bele: az ellenállásháló pontatlansága és az egyes komparátotok eltérése. Ha mondjuk Gauss eloszlású a fehérzaj, akkor egy "csámpás" görbe lesz a végeredmény a hibák miatt.
A szigma-delta átalakító ennél sokkal jobb, csak egy komparátort tartalmaz. Működése kicsit lassabb, mint az elméleti alap órajelünk, mert egy kicsit integrálni is kell. Viszont megint adtunk egy pofont a szarnak, hiszen 8 órajel alatt előállítottunk 8 bitet. :) Tehát enélkül 8x1, ezzel meg 1x8 bitet sikerült előállítani. És akkor is ott van még a mintavétel ideje.
A fentiekből látszik, hogy az ADC alkalmazása lassítja és feleslegesen bonyolítja az áramkört, további - részben determinisztikus - hibákat visz a rendszerbe, ezzel rontva a fehérzaj forrás minőségét.
Nem utolsó sorban az ilyen sebességű ADC már roppant drága!
Tehát ez egy szigorú gravitációs törvény: a világ értelmesebb fele nem használ erre a feladatra ADC-t. Még akkor sem ha olcsó lenne, mert csak ront az eredményen, miközben előnye nincs.

Tehát mégegyszer: Ha valamit nem tudsz, az nem bűn, seki nem fog lehülyézni érte!
De hidd el, roppant idegesítő, ha úgy szólsz hozzá valamihez, hogy nem is vagy hajlandó utánanézni!
Pl. szakadj el attól a koncepciótól, amit a rajzon küldtél
Ez nem egy "koncepció". Ezt a fajta áramkört mindig így csináljak, csak nem tudtad.

Aha. Tehát te eldöntöd, hogy csak ilyen felépítésű áramkört lehet építeni, mert így szokták. Más nem jöhet szóba, mert tiltja a vallásod. Szép ez, csak akkor mi van, ha valaki - akár én - mégis megépíti azt, amiről beszélek? Akkor hirtelen kiderül, hogy nem lehetetlen?

Miután a zajgenerátor minden időpillanatban véletlen pillanatértékű feszültséget állít elő, így az is véletlen lesz, ha lassan veszek belőle mintát. Miért is kellenének olyan sávszélességek, amelyről beszélsz? Amúgy szerintem a 8 bites flash konverterhez 255 db komparátor, meg egy prioritás enkóder kell. Szerintem 8 komparátorból - illetve 7-ből - 3 bites értéket lehet előállítani. A szigma-delta konverter hosszú időn át integrál, nagyon lassú, mert 2n órajel alatt konvertál n bitre.

A szerkezet árát ne keverd ide, mert ahova kell, ott megoldják. Atomóra is kell, aztán létezik is, pedig nem egy olcsó zsebóráról beszélünk. De mondhatnám a 2 Gsample/s mintavételű oszcilloszkópokat, amelyek már annyira nem drágák, hogy egy kisvállalkozás is megengedhet magának akár 2 darabot is. Ugyanakkor egyelőre te hajtogatod, hogy gyorsnak kell lenni, pedig dehogy. Minek?

Ezt a fajta áramkört mindig így csináljak, csak nem tudtad.

Értem. 640 kiB mindenre elég lesz, valamint izzólámpával csinálunk fényt, ezt is mindig így szokták. Jó. Különben kit érdekel, hogy ki mit szokott? Most épp arról beszélünk, hogy a szokásos rossz megoldást váltsuk ki egy attól eltérő jobb megoldással. Jelenleg nem analizálunk egy meglévő rossz megoldást, hanem szintetizálunk egy lehetséges jobb megoldást.

Ami a successive approximációs ADC-t illeti, én nem mondtam, hogy a konvertálás órajele ugyanaz legyen, mint a shift regiszterből kiléptető órajel. Simán lehet az ADC órajel frekvenciája a shift regiszter léptető órajel frekvenciájának 10/8-szorosa. A Bibliában nem olvastam, hogy ez tilos lenne.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Nem, nem én döntöttem el. A nálam sokkal jobban hozzáértők tették.
De ne aggódj! Kismillió egyéb megoldás létezik. A szabadalmak jó részét megtalálod.

Bocsika, azt a 255 komparátort tényleg kissé lefokoztam. (Úgy érzem az a lelki válság okozhatta, hogy több mint egy heti hibakeresés után megtaláltam azt a kissé ravasz módon megfogalmazott nyolccal történő osztást, amivel majdnem megalkottam a tökéletes TRNG-t! :( ) De így legalább még rosszabb a helyzet.

Miután a zajgenerátor minden időpillanatban véletlen pillanatértékű feszültséget állít elő, így az is véletlen lesz, ha lassan veszek belőle mintát.
Nem, az "elegendően nagy" mintavételi idő pontosan nullát fog eredményezni - elméletben. Ha gondolatban fokozatosan csökkented, akkor ez a hiba is csökken. Az ideális a nulla mintavételi idő lenne. Tehát hibája van, ezért nem tudja követni a jelet. A lassú mintavétel miatt meg lecsökken a sebessége.

Azért beszélek ilyen sebességekről, mert feljebb tettem egy olyan kijelentést, hogy a topicnyitó áramkör a szegény embereknek való olcsó RNG, aminek az elméleti sebessége <60Mb/s, a gyakorlatban 256kb/s. Az Intel generátora meg 800MB/s, ami 25000x gyorsabb. Azért csak van valami oka, hogy nem a lottóhúzásokat használják fel, de azt csak a JóIntel tudja! :)) Talán csak annyi, hogy a nagysebességű kommunikációz nem elegendő a 256kb/s.

A példákat - tán nem tűnt fel - a topicnyitó áramkör zajgenerátorából kijövő maximális frekvencia feldolgozásához igazítottam. Ehhez az értékhez becsültem meg a szükséges ADC sebességet.
A sigma-delta tényleg nagyon lassú, ha az órajelek számát nézed. Csak elutasítod az egyszerű áramköröket, ezért elfelejted, hogy legalább egy-két nagyságrenddel magasabb lehet az az órajel. Tudod, egy komparátor=gyors RNG, egy komparátor=nagy felbontású ADC. ;)

Tán nem tűnt fel - a topicnyitó áramkör egy olcsó áramkör. Jómagam is a piacra dolgozok, ezért ha létezik egynél több megoldás, akkor az olcsóbbikat kell választani! Itt találsz néhány ár/teljesítmény adatot, bár nem túl pontosak: Comparison of hardware random number generators

Azt is megértem, ha szerinted a hőbölgés és vagdalkozás viszi előre a világot. Szerintem meg nem.

Azt viszont egyáltalán nem értem, miért rossz az a megoldás ami egyszerű, olcsó és működik.

Igazából a szál elején te jelezted, hogy ez ugyan olcsó, de a minősége olyan is, nem biztos, hogy titkosításhoz elég jó. Erre hozakodtam elő azzal, hogy csináljuk drágábban, de legyen jobb.

Van egy félreértés köztünk. Amikor azt mondom, lassan vegyünk mintát - való igaz, elég szerencsétlenül fogalmaztam -, akkor arra gondoltam, hogy ritkán. Ettől még a mintavételi időnek valóban nagyon rövidnek kell lennie, ebben egyetértek veled. Szóval a mintavevő és tartó áramkörnek kell nagyon gyorsnak lennie, utána az ADC már szerényebb sebességgel is konvertálhat.

Nem hőbörögtem vagy vagdalkoztam sehol, türelmesen, hosszan leírtam, mire gondolok. Pusztán nem értettem mindenben egyet veled.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

No, jó, akkor baráti bitet nyújtok. ;)

Azt mondom, nem érdemes megcsinálni. Van ilyen, itt a fiókomban: PIC24FJ128GB204
Van benne komplett crytpo engine:
- védett kulcstárak
- PRNG, TRNG
- AES, DES miegymás
- 10bit 500ks/s vagy 12bit 200ks/s ADC
- komparátorok
Lehet programozni is. ;)

"Nekünk éppen az a feladatunk, hogy az eddigi számokból a következőt ne lehessen megjósolni"

Amit eddig olvastam, az alapján pontosan ez az egyik baja az Intel-féle megoldásnak (bár az mintha nem LFSR-t használna, hanem valami más álvéletlen generátort). Azaz az entrópia forrásból (ES-ból) nyert adatot beadja seed-nek egy PRNG-be. Ha a seed nem változik túl gyakran, akkor a PRNG által generált sorozat visszafejthető.
Viszont arról nem írnak sehol, hogy az ES által generált számsor mennyire kitalálható. A működési elve az, hogy szembe kötnek két invertert, amik ilyenkor beállnak ún. metastabil állapotba fél táp közelébe. Hogy a mintavételkor a metastabil állapotból 0 lesz, vagy 1 az pedig elvileg a termikus zajon múlik, ami (állítólag) elég jó fehér zaj. Láttam már szkópon rövid ideig tartó metastabil állapotot, és nekem az volt az érzésem, hogy a termikus zajon kívül az elektromágneses zajon is múlik, hogy ez az állapot meddig marad fönt. Azaz könnyen lehet, hogy az Intel procin belül a környezet elektromágneses zaja, azaz az éppen végrehajtott kód is befolyásolja az ES eloszlását.

A metastabil állapotban már csak azért sem bízom, mert semmi sem tökéletesen szimmetrikus, márpedig az aszimmetria csalni fog valamelyik irányba. Olyan lesz, mint a mindenkori magyarországi közbeszerzések. Valamerre lejteni fog a pálya...

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

OFF

Apropó Stephen Hawking és asszimetria. Föltűnt már másnak is, hogy az ősrobbanás elmélet egy klasszikus teremtéstörténet? Kezdetben teremtette Isten a szingularitást. A hőmérséklet és a nyomás végtelen volt, Isten lelke lebegett a szimmetria felett. Isten szólt: legyenek quarkok és gluonok. Isten elválasztá a kvarkokat a gluonoktól, és látta, hogy ez így jó. Eltelt egy gluon korszak. Isten újra szólt: legyen anyag és antianyag, és legyen asszimetria! Úgy is lett, ebből jött lére a világegyetemünk.

"Ajánlom elolvasásra az Intel IvyBridge 800MB/s rng véleményezését."

Tudnál linket adni? Google-lel csak olyan oldalakat találtam, amik kijelentették, hogy az Intel HW RNG nem jó (semmi indoklás), vagy olyanokat, amik azzal foglalkoztak, hogy azonos csipen futó process kitalálhatja más process-ek által kapott véletlen számokat.

Szomorúan hallom, hogy ezek szerint az Entropy Key már nem kapható...

"Jegyezze fel a vádhoz - utasította Metcalf őrnagy a tizedest, aki tudott gyorsírni. - Tiszteletlenül beszélt a feljebbvalójával, amikor nem pofázott közbe."

na meg egy kugyu ami logjon ki a gep hatuljan, es letorjon ha nem vigyaz valaki...

hacsak nem csinalnak az alaplapra kotheto valtozatot...

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

(off: ha jól csalódom, a korszerű CPU-knak van random-generáló utasítása (és hardware-e), a gond csak az, hogy bízunk-e annyira a CPU gyártójában, hogy használjuk is... (azt már tudjuk, hogy az Intel CPU-n belül van egy másik, kisebb CPU, de csak puszta jószándékból; már csak az a kérdés, hogy vannak-e ott további kisebb CPU-k, esetleg már nem csupa jószándékból))

10 eve fejlesztettunk casino jatekgepet, ahol nem picit volt fontos, hogy tenyleg veletlen szam legyen, es hogy ne lehessen kivulrol megzavarni. az elso verzionk volt hasonlo mint ez a kapcsolas, ezzel az a baj hogy egy nagyobb amplitudoju negyszogjellel (a kozelben, antennaval/tekerccsel leadva) el lehet nyomni (bias) a zajt. ezt a nyerogepeknel 15 eve meg egy sima mobiltelefonnal (amit megcsorgettek) is el tudtak erni...
ezek a kapcsolasok ugyanis a kornyezeti zajt erositik, amit viszont nagyon konnyu befolyasolni...
mi ezt ugy vedtuk ki, hogy par mm-re egymastol 2 fuggetlen zajforrast helyeztunk el, es ezek kulonbseget vette figyelembe az algoritmus, igy a mindkettore egyforman hato kulso zavarok nem tudtak befolyasolni.

a masik pedig hogy ez onmagaban sose lesz elegge veletlen (statisztikailag egyenletes), ez csak arra jo hogy seedeljen valamilyen pseudo random generatort.

Nagy felezési idejű radioaktív izotóp + számláló és az egész egy ólom dobozban.
Ha az izotóp béta sugárzó és a csövet úgy méretezed, hogy a gammára ne nagyon legyen érzékeny (a gammával át lehetne menni az ólmon) akkor a külső befolyás elnyomva és a kvantumfizika biztosítja a véletlenszerűséget. A radioaktivitás csökkenését a felezési idő ismeretében lehet kompenzálni.
Hátránya, hogy nem pendrive méret :-)