Kérdés:
Érdemes bővíteni a / dev / random entrópiát a szoftverben?
gowenfawr
2015-08-13 20:18:48 UTC
view on stackexchange narkive permalink

Tehát a kérdésem az: hiányzik egy jogos (hardver) az entrópia forrása, ésszerű-e rutinszerűen növelni / dev / random valamilyen rng-tools ( feed from / dev / urandom) vagy haveged segítségével?

Veszélyesebb, ha a / dev / random sekély entrópiakészletétől függenek és / vagy azokra várnak a programok, vagy ha (vitathatatlanul) kevésbé robusztus véletlenszerűséget vezet be pusztán a softwa újra?

És amikor azt mondom, hogy "rutinszerűen", akkor azt értem, hogy "az összes szerverem, indításkor kezdődik, folyamatosan működik, csak azért, hogy biztonságban legyek."

Nem kérdezem, hogy A / dev / urandom kellően erős - a fenti idézetek szerint szinte mindenki egyetért abban, hogy ez rendben van (nos, nem mindenki , de mégis). Biztos akarok lenni abban, hogy egy démon, például rngd vagy haveged használata a véletlenszerűség visszaállításához a / dev / random helyre - még akkor is, ha a / dev / urandom-on alapulnak, mint az rngd lenne a legtöbb esetben - nem vezet be gyengeségeket. (Karbantartási és átláthatósági okokból nem kényelmesen kezelem a problémát a probléma elhárításával.)

(Bár ezt a kérdést a Biztonságos-e az rng-eszközök virtuális gépen való használata? -nek tekinthetjük, úgy tűnik, hogy ez a válasz a széles körben elterjedt, jó hírű hangok ellen szól, mondván: / dev / urandom is elégséges, ezért ez bizonyos értelemben arra törekszik, hogy tisztázzák, hol merülne fel a sebezhetőség (ha egyetértünk ezzel a válasszal), vagy valóban bevezetésre kerül-e (ha nem).)

(kapcsolódó olvasmány - Potter és Wood BlackHat „ Az entrópia használatának kezelése és megértése” című prezentációja arra késztette, hogy elgondolkodjak ezen)

Pontosan ez volt az oka annak, hogy a getrandom rendszerhívást bevezették https://lwn.net/Articles/605828/
Három válaszokat:
Thomas Pornin
2015-08-13 21:05:39 UTC
view on stackexchange narkive permalink

A rövid válasz az, hogy a / dev / random visszacsatolása a / dev / urandom kimenetével nem csökkenti a biztonságot. A dolgok világosabbá tétele érdekében (a megjegyzések azt mutatják, hogy nem voltam elég pontos), az a lényeg, hogy a / dev / random etetjük a / dev / urandom A ártalmatlan (bár nem növeli a biztonságot); ez is meglehetősen haszontalan (kivéve az olyan alkalmazások egyszerű támogatását, amelyek ragaszkodnak a / dev / random használatához és az alkalmatlan időben, minden ok nélkül történő blokkoláshoz.


A dolgok egyszerűsítése érdekében definiáljuk a / dev / random és a /dev/urandom:

  • működő modelljét. egy belső állapot p , amely k bájtokból áll (egyes egész számokhoz k).
  • További entrópia Az x t úgy injektálják, hogy a p -t helyettesítik a H re ( p , x ), ahol A H egyfajta hash függvény. Például az aktuális állapot összefűzve az új entrópiával, az eredmény kivonatolásra kerül, és a kivonatkimenet az új p.
  • A kimenet a p használatával jön létre a CSPRNG bemeneteként; az első k bájtok a p új értéke, az ezt követő bájtok pedig a futás kimenete.
  • / dev / random A abban különbözik a / dev / urandom -tól, hogy alkalmanként megtagadja a bájtok kiadását, amíg új entrópiát nem adnak be (vagy nem gyűjtenek a hardverből).

(A fenti egy koncepcionális modell, amely a jelenlegi vita szempontjából elég közel van a tényleges megvalósításhoz.)

Az egész biztonsága a p entrópiájától függ; durván szólva arról, hogy a támadók mennyi p t nem ismerik. A támadók tudják, hogy a p méret k , ezért megpróbálhatják durva erővel kitalálni a p t, amelynek költsége körülbelül 2 8 k -1 átlagosan. A CSPRNG kriptográfiailag biztonságos nak tekinthető, mivel a kimenet sok bájtjának elemzése nem ad információt más kimeneti bájtokról - különösen nem ad információt a p ről (sem a futás előtt vagy után).

Most feltételezzük, hogy az x t a támadó választja. Amíg a H biztonságos hash függvényként viselkedik, a H ( p , x ) ugyanazzal az entrópiával rendelkezik, mint p - a támadónak még mindig nincs információja a p ről a művelet után. Szigorúan véve "tércsökkentő" hatás lehet, kb. 2-es méretig 8 k / 2 , ha a támadónak megengedett a 2. "entrópia-adagolás" trükk elvégzése. 8 k / 2 alkalommal. Ha a k elég nagy (mondjuk 32, 256 bites belső állapot esetén), a fennmaradó hely mérete még mindig elég nagy a biztonsághoz, és ezt a helyzetet egyébként sem lehet elérni .

Mivel a CSPRNG nem ad információt a p ről, az adott CSPRNG kimenete nem lehet rosszabb a biztonság szempontjából, mint egy támadó által vezérelt x . Ez az a rész, amelyet akadémikus formában legbonyolultabb formalizálni (ennek megfelelő leírása néhány oldalba telik). Intuitív módon a CSPRNG, amikor a bemenet k bájtjait használja, és a kimenet k bájtjait veszi, véletlenszerű orákulumként viselkedik.

Ezért a / dev / random a / dev / urandom kimenetéből nem csökkenti a biztonságot.

Ez természetesen arra az elképzelésre támaszkodik, hogy az állapotfrissítési funkció (entrópia injekcióhoz) és a CSPRNG egyaránt "ideális" funkció. Ha nem, akkor Ön mindenképpen kárhoztatott (a / dev / random automatikus blokkolási viselkedése ebben az esetben nem mentene meg téged).

Az az érvelése, hogy a függvények keverése _ új entrópiát generál? Nem veszem meg. Amikor a "/ dev / urandom" betáplálja a "/ dev / random" fájlba, az entrópia becslő azt mondja, hogy "ooo, ez véletlenszerűen néz ki", és növeli az entrópia számlálóját, ami helytelen, mivel valójában nem vezetett be újat.
Ah, sajnálom, az az érvelésed, hogy a funkciók keverése nem _csökkenti_ az entrópiát. Bírság. Ebben az esetben mit nyersz ezzel?
Nem vagyok teljesen naprakész a Linux rng dolgokkal kapcsolatban, de ha túl sok entrópiát teszünk be, akkor néhány részt elvetünk. Tehát lehetséges, hogy a rendszer figyelmen kívül hagyja az "igazi" entrópiát, ha mindig pszeudorandom adatokat szolgáltat, és bár nem csökkenti az entrópiát (vagyis a t + 1 időpontban kevesebb az entrópia, mint a t időpontban), ez egy rendszerhez vezet amelynek sokkal kevesebb az entrópiája, mint egy jól működőnek. (vagyis a "megszakadt" rendszernek ugyanaz az entrópiája a t1 időpontban, mint a t időpontban, míg egy működő rendszernek ** több ** van)
@MikeOunsworth: nem az a kérdés, hogy a "/ dev / random" etetése a "/ dev / urandom" -val _jó_ ötlet; csak hogy káros-e. Mindaddig, amíg a / / dev / urandom` biztonságos, ez ártalmatlan (és haszontalan, kivéve, ha átláthatóan szeretné támogatni azokat az alkalmazásokat, amelyek ragaszkodnak a `/ dev / random` használatához, és nem megfelelő okokból elakadnak).
@ThomasPornin lol ok. Érdemes azonban megjegyezni, hogy az ilyen / dev / random`-os hátsó ajtózárás megsérti a FIPS 140-2-t minden olyan rendszeren futó szoftver esetében, amely véletlenszerűségére támaszkodik a `/ dev / random` -ra, ha ez érdekli Önt.
@ThomasPornin Köszönöm - eljutottál az ügy lényegéig, ami arra kíváncsi, hogy támogathatom-e azokat a hülye alkalmazásokat, amelyek a / dev / random-on halnak meg, anélkül, hogy gyengíteném a rendszerem biztonságát.
@ThomasPornin Sajnálom, hogy itt zavarlak, de van időd itt megvizsgálni az entrópia kérdésemet? https://security.stackexchange.com/questions/96370/a-simple-question-about-entropy-and-random-data A meglévő válasz kétesnek tűnik számomra. Hogyan lehet a 100-szor feldobott 6-oldalú szerszámnak 2,5806473 bites entrópiája?
@gowenfawr miért ellenzi az [mknod] -t (http://security.stackexchange.com/a/14399/3365) vagy [más módon változtat] (http://superuser.com/a/563866/134112) / dev / random elérni / dev / urandom?
Az @Josef története azt tanítja nekünk, hogy aki megváltoztatja az operációs rendszer alapvető konstrukcióit, annak hamarabb fizet (pl. A szinkronizálások nem védettek bizonyos kezelési speciális fájlok csendesen kezelésétől), vagy később (mit értesz az alapértelmezett telepítőnél, nincs speciálisan feltörve) nekem beállított eszközök?). Ha valami olyan alapvető dologgal kell bajlódnia, mint az eszközök, akkor jobb, ha azt külső módon hajtja végre, amelynek meghibásodási módja visszatér az alapértelmezett viselkedéshez.
@gowenfawr az udev szabályok ** hibamódja ** visszatér az alapértelmezett viselkedéshez. Ha az egyéni szabályt nem használják, akkor a "normál" / dev / random lesz a blokkolási problémákkal, de egyébként működik. Ha a szabályt alkalmazzák, akkor megvan a symlink. Csak az "/ dev / eerandom" (a valódi "/ dev / random") hiányzik az egyéni szabály nélkül, de valószínűleg nem akarja ezt használni.
Linux alatt a / dev / urandom jól ismert gyenge pontja akkor fordul elő, ha elegendő> Kezdeti Ez a Ez <).Anélkül, hogy tudnánk az rng-tools valójában működését, úgy tűnik, elég lenne egy olyan rng-szolgáltatás, amely megvárta, amíg egyszer elegendő entrópiát (mondjuk 256 bit) észleltek, és csak ezután kezdte el használni a / dev / urandom parancsot.
Mike Ounsworth
2015-08-13 21:03:22 UTC
view on stackexchange narkive permalink

Sajnos néhányan, akik a / dev / random -ot részesítik előnyben, FIPS és Common Criteria. [SZERKESZTÉS: Nem találok rá hivatkozást, de az alján talál egy nem hivatalos forrást.] Tehát, ha azt szeretné, hogy a szoftvere FIPS / CC tanúsítvánnyal rendelkezzen, akkor nem tudja használni / dev / urandom . Bizonyítania kell , hogy pontos becslést tart az entrópiájáról, és akkor blokkolnia kell , ha az entrópia kevés.

>

Rövid háttér:

Az összes determinisztikus véletlenszám-generátor csak olyan véletlenszerű, mint a magja. Az entrópia annak becslése, hogy mennyire véletlenszerű (vagy váratlan , vagy kiszámíthatatlan ). Az RNG entrópiájának növelése érdekében be kell keverni egy külső forrásból származó véletlenszerűséget. Ha kiszámíthatatlan adatforrásokhoz van hozzáférése (gyakran az emberi beviteli eszközök időzítése vagy termikus zaj), akkor mindenképpen töltse be a / dev / random fájlba, hogy növelje a magjának entrópiáját.

A Linux kernel automatikusan összekeveri a véletlenszerűség annyi forrását, ahány hozzáféréssel rendelkezik, a csomagok időzítése, a billentyűleütések időzítése, a folyamatütemező véletlenszerűsége, a mellékelt hardveres véletlenszám-generátorok fogyasztói alaplapokon). Tehát ez nagyszerű.

Az egyetlen eset, amiről tudomásom van arról, hogy a / dev / random gyenge-e, a fej nélküli virtuális gépeknél van, ahol a kiszámíthatatlanság miatt szó szerint nincs mit húzni. .


Rendben, térjünk rá a tényleges kérdésre:

Biztos szeretnék lenni abban, hogy egy démon, például rngd vagy haveged a véletlenszerűség visszaállításához a / dev / random -ba - még akkor is, ha a / dev / urandom -ra épülnek, mint például a rngd a legtöbb esetben - nem mutat gyengeségeket.

A kérdésem a következő: honnan veszik véletlenszerűségüket a rngd , a haveged és a / dev / urandom között? Tényleg új véletlenszerűség jön a gépen kívülről, vagy csak a / dev / random újrakeveredése?

Nem tudok beszélni rngd vagy haveged -kal, de tudom, hogy Linux rendszeren a / dev / urandom RNG a / dev / random paranccsal (lásd: ezt a fantasztikus dumálást, amelyből az alábbiakban kölcsönvettem egy képet), és a FreeBSD-n / dev / urandom szó szerint egy mutató vissza a / dev / random -ra, tehát minden valószínűség szerint csak a / dev / random -t táplálja vissza önmagának.

Nem vagyok elég szakértő ahhoz, hogy tudjam, hogy ez gyengeségeket okoz-e vagy sem, de természetesen nem tesz jót.

enter image description here


A "no / dev / urandom" egyetlen említése, amelyet a FIPS dokumentumokban találok, egy 2014-es tervezet volt, amelyet soha nem hoztak nyilvánosság elé. Tartalmazta a lábjegyzetet:

2. megjegyzés: Feltételezzük, hogy a / dev / urandom generátor nem nyújt entrópiát, hacsak nem kifejezetten úgy van kialakítva, hogy mindenkor minimum 112 bites rendelkezésre álló entrópiát biztosítson.

Ezután felsorolja, hogyan garantálhatja ezt az entrópiát. Ez sokkal kevésbé merev, mint amennyire elhittem. Remek, ma megtanultam!

fyi: A "havaged" a [HAVEGE] (https://www.irisa.fr/caps/projects/hipsor/) algoritmuson szerepel, és a belső processzorállapotokat használja véletlenszerű forrásként. Egészen jól működik, de a virtualizált környezetekben problémák merülhetnek fel.
Josef says Reinstate Monica
2015-08-13 21:15:01 UTC
view on stackexchange narkive permalink

Ne tegyen halat a disznóhús-adatoknak a / dev / random stb. betáplálásával. Ha szeretné, lecserélheti a / dev / random szimbólumot a / dev / urandom linkre

Használhat haveged -t vagy hasonlót, de semmilyen külső bemenet nélkül ne használjon semmit. (Vigyázzon, főleg a havaged esetén is, ha virtualizált hardvert futtat)

/ dev / random meglehetősen robusztus a rossz entrópiával rendelkező bemenet ellen, de ha túl sok hülyeséget táplál, ki tudja mi történik?

/ dev / urandom jól ismert és tesztelt. Ha linkeled a / dev / random-ot, akkor valószínűleg nem lesznek problémáid. Ha rossz dolgokat művel, problémái lehetnek!

Továbbá: Miért szeretne felelősséget vállalni: "Az első biztonságos kapcsolat szerverünkhöz az újraindítás után majdnem egy másodpercet vesz igénybe !!!" / "Generálás sok tanúsítvány lassú "vagy" Az a dolog, amit a véletlenszerű dolgainkkal tettél, teljesen elromlott! Minden kulcsunk elromlott, az összes adatainkat ellopták! MIT TETT? "

Döntsön okosan!

"de ha túl sok hülyeséget táplál, ki tudja, mi történik?" semmi.Olyan keverési funkciót használ, amely nem csökkenti az entrópiát (amint az @ThomasPornin's válasz magyarázta).A `/ dev / zero`-ból folyamatosan írhatna, és nem történik semmi rossz.
@forest a jelenlegi implementációval, hibák nélkül.Persze, ez a szándékolt viselkedés.De a / dev / random implementációja Linux alatt már néhányszor megváltozott.A megadott forgatókönyv szintén nem általános forgatókönyv.Ha sok szemetet ad a / dev / random fájlba, akkor (most vagy később) előfordulhat, hogy egy hiba csökkenti a biztonságot.Nincs előnye, ha ezt megteszi, ezért nem szabad. Egyes eszközökön problémák merültek fel a kiszámítható kulcsokkal a rendszerindítás után.Az urandom visszacsatolása "megmutathatja", hogy van-e elegendő entrópia, de például kiszolgáltatottá tenné.
@forest is látja a [megjegyzésem a másik válaszhoz] (https://security.stackexchange.com/questions/96741/is-it-worth-augmenting-dev-random-entropy-in-software/96750?noredirect=1#megjegyzés166507_96747).Még akkor is, ha semmi rossz nem történhet, a definíciója szerint előfordulhat, hogy megakadályozza valami jó (az "igazi" véletlenszerűség-forrásokból hozzáadott több entrópia) bekövetkezését! Tegyük fel, hogy egy rendszer x bit entrópiával rendelkezik a t időpontban, és normális esetbena műveletnek 2 * x bitje lenne a t + δ időpontban: Ha módosításával a rendszernek csak (2 * x) * ε (ε << 1) entrópiája van t + δ-nél, akkor problémának nevezem.
Nem valószínű, hogy egy ilyen hiba akkor jelenik meg, mint más módon.Ezenkívül nem akadályozza meg a "valódi" véletlenszerűség hozzáadását.A trükkök újraküldése a 2.x napok óta nem volt kérdés.Nagyon hosszú ideje az entrópiás eseményeket feltétel nélkül hozzáadják.A legrosszabb esetben a "/ dev / random" viselkedését blokkolatlanná változtatná, ami nem különbözne a "/ dev / urandom" közvetlen használatától.Amíg eleinte jó véletlenszerűséggel vetik be, addig remekül fog működni.
Ami a véletlenszerűség-illesztőprogram gyakran változik, az utolsó nagyobb változás a 4.8-ban történt.Ismerem az illesztőprogram mind a 4.8 előtti, mind az újabb verzióit, és elmondhatom, hogy a viselkedés nem változott úgy, hogy a "rossz" véletlenszerűség táplálása egyáltalán veszélyes lenne.Valójában ez nem különbözik attól, hogy egyszerűen használja az `RNDADDENTROPY` ioctl véletlenszerűen.Szó szerint csak annyit fog tenni, hogy a blokkoló készlet rossz időben feloldja a blokkolást (és pazarolja a CPU-ciklusokat, mivel az SHA-1 keverési műveletet valamilyen isten elhagyta ok miatt nem optimalizálták).


Ezt a kérdést és választ automatikusan lefordították angol nyelvről.Az eredeti tartalom elérhető a stackexchange oldalon, amelyet köszönünk az cc by-sa 3.0 licencért, amely alatt terjesztik.
Loading...