Linux: odstránenie fondu zámkov /dev/random

Je známe, že /dev/random, kryptograficky bezpečný generátor pseudonáhodných čísel (CSPRNG), má jeden nepríjemný problém: blokovanie. Tento článok vysvetľuje, ako to môžete vyriešiť.

V priebehu niekoľkých posledných mesiacov boli zariadenia na generovanie náhodných čísel v jadre mierne prepracované, ale problémy v tomto subsystéme boli vyriešené v priebehu širšieho časový rámec. Najviac posledné zmeny boli vytvorené, aby zabránili blokovaniu systémového volania getrandom() na dlhú dobu pri zavádzaní systému, ale hlavným dôvodom bolo blokujúce správanie náhodného fondu. Nedávna oprava by tento fond odstránila a očakávalo by sa, že bude smerovať k hlavnému jadru.

Andy Lutomirski zverejnil tretiu verziu opravy koncom decembra. On prispieva "dve hlavné sémantické zmeny náhodných linuxových API". Patch pridáva nový príznak GRND_INSECURE do systémového volania getrandom() (hoci Lutomirsky ho označuje ako getentropy(), ktorý je implementovaný v glibc pomocou getrandom() s pevnými príznakmi); tento príznak spôsobí, že volanie vždy vráti množstvo požadovaných údajov, ale bez záruky, že údaje sú náhodné. Jadro jednoducho urobí všetko, čo je v jeho silách, aby vyprodukovalo najlepšie náhodné dáta, aké v danom čase má. "Asi najlepšie je nazvať to "NEBEZPEČNÉ" (nezabezpečené), aby sa zabránilo použitiu tohto API na veci, ktoré vyžadujú zabezpečenie."

Záplaty tiež odstraňujú blokujúci fond. Jadro momentálne spravuje dva náhodné dátové fondy, jeden zodpovedá /dev/random a druhý /dev/urandom, ako je popísané v tomto článok 2015. Blok blokovania je fond pre /dev/random; čítania pre toto zariadenie budú blokovať (čo znamená jeho názov), kým sa zo systému nezíska „dostatok“ entropie na splnenie požiadavky. Ďalšie čítania z tohto súboru sú tiež zablokované, ak v oblasti nie je dostatok entropie.

Odstránenie fondu zámkov znamená, že čítanie z /dev/random sa správa ako getrandom() s príznakmi nastavenými na nulu (a zmení príznak GRND_RANDOM na slučku). Po inicializácii kryptografického generátora náhodných čísel (CRNG) sa čítanie z /dev/random a volania getrandom(...,0) nezablokujú a vrátia požadované množstvo náhodných údajov.

Lutomirsky hovorí: „Verím, že blok blokovania Linuxu je zastaraný. CRNG Linux generuje výstup, ktorý je dostatočne dobrý na to, aby sa dal použiť aj na generovanie kľúčov. Blokovací fond nie je silnejší v žiadnom materiálnom zmysle a na jeho podporu si vyžaduje množstvo infraštruktúry pochybnej hodnoty.“

Zmeny boli vykonané s cieľom zabezpečiť, že existujúce programy nebudú skutočne ovplyvnené a v skutočnosti by bolo menej problémov s dlhým čakaním na veci, ako je generovanie kľúča GnuPG.

„Tieto epizódy nesmú narušiť žiadne existujúce programy. /dev/urandom zostáva nezmenený. /dev/random stále blokuje ihneď po štarte, ale blokuje menej ako predtým. getentropy() s existujúcimi príznakmi vráti výsledok, ktorý je rovnako vhodný na praktické účely ako predtým."

Lutomirsky poznamenal, že je stále otvorenou otázkou, či by jadro malo poskytovať takzvané „skutočné náhodné čísla“, čo do určitej miery malo robiť blokovacie jadro. Vidí za tým jediný dôvod: „dodržiavanie vládnych noriem“. Lutomirsky navrhol, že ak by to jadro malo poskytnúť, malo by sa to urobiť cez úplne iné rozhranie alebo by sa to malo presunúť do používateľského priestoru, čo používateľovi umožní získať surové vzorky udalostí, ktoré by sa dali použiť na vytvorenie takéhoto fondu zámkov.

Stephan Müller navrhol, že jeho set náplasti pre Linux Random Number Generator (LRNG) (aktuálne vydaná verzia 26) by mohol byť spôsob, ako poskytnúť skutočné náhodné čísla pre aplikácie, ktoré to potrebujú. LRNG je „plne v súlade so smernicami SP800-90B o zdrojoch entropie používaných na generovanie náhodných bitov“, čo z neho robí riešenie problému vládnych noriem.
Matthew Garrett namietal proti výrazu „skutočné náhodné údaje“ a poznamenal, že vzorkované zariadenia by sa v princípe dali modelovať dostatočne presne na to, aby boli predvídateľné: „nevzorkujeme tu kvantové udalosti“.

Müller odpovedal, že tento výraz pochádza z nemeckého štandardu AIS 31 na opis generátora náhodných čísel, ktorý produkuje iba výsledok „rovnakou rýchlosťou, akou základný zdroj hluku produkuje entropiu“.

Odhliadnuc od rozdielov v terminológii, mať fond zámkov, ako to navrhujú záplaty LRNG, jednoducho povedie k rôznym problémom, aspoň ak sa k nemu pristupuje bez privilégií.

Ako povedal Lutomirsky: "To problém nerieši. Ak dvaja rôzni používatelia spustia hlúpe programy ako gnupg, budú sa navzájom vyčerpávať. Vidím, že v súčasnosti existujú dva hlavné problémy s /dev/random: je náchylný na DoS (t.j. vyčerpanie zdrojov, škodlivý vplyv alebo niečo podobné), a keďže na jeho používanie nie sú potrebné žiadne privilégiá, je tiež náchylný na zneužitie. Gnupg sa mýli, je to úplný kolaps. Ak pridáme nové neprivilegované rozhranie, ktoré bude používať gnupg a podobné programy, opäť prehráme.“

Mueller poznamenal, že pridanie getrandom() teraz umožní GnuPG používať toto rozhranie, pretože poskytne potrebnú záruku, že fond bol inicializovaný. Na základe diskusií s vývojárom GnuPG Wernerom Kochom Mueller verí, že záruka je jediným dôvodom, prečo GnuPG v súčasnosti číta priamo z /dev/random. Ak však existuje neprivilegované rozhranie, ktoré je náchylné na odmietnutie služby (ako je dnes /dev/random), Lutomirsky tvrdí, že ho niektoré aplikácie zneužijú.

Zdá sa, že Theodore Yue Tak Ts'o, vývojár subsystému náhodných čísel v Linuxe, zmenil názor na potrebu blokovacieho fondu. Povedal, že odstránením tohto fondu by sme sa efektívne zbavili myšlienky, že Linux má skutočný generátor náhodných čísel (TRNG): "Toto nie je nezmysel, pretože presne to *BSD vždy robil."

Tiež sa obáva, že poskytnutie mechanizmu TRNG bude jednoducho slúžiť ako návnada pre vývojárov aplikácií a je presvedčený, že vzhľadom na rôzne typy hardvéru podporovaného Linuxom nie je možné zaručiť TRNG v jadre. Problém nevyrieši ani schopnosť pracovať so zariadením iba s oprávneniami root: "Vývojári aplikácií špecifikujú, že ich aplikácia má byť nainštalovaná ako root z bezpečnostných dôvodov, takže toto je jediný spôsob, ako môžete získať prístup k "naozaj dobrým" náhodným číslam."

Mueller sa opýtal, či Cao opustil implementáciu blokovacieho fondu, ktorú sám dlho navrhoval. Cao odpovedal, že plánuje prevziať záplaty Lutomirského a aktívne sa stavia proti pridávaniu blokovacieho rozhrania späť do jadra.

„Jadro nemôže poskytnúť žiadne záruky, či bol zdroj hluku správne charakterizovaný. Jediné, čo môže vývojár GPG alebo OpenSSL získať, je nejasný pocit, že TRUERANDOM je „lepší“, a keďže chcú väčšiu bezpečnosť, nepochybne sa ho pokúsia použiť. V určitom okamihu bude zablokovaný a keď ho nejaký iný inteligentný používateľ (možno špecialista na distribúciu) vloží do init skriptu a systémy prestanú fungovať, používatelia sa budú musieť sťažovať iba samotnému Linusovi Torvaldsovi.“

Cao tiež presadzuje, aby kryptografom a tým, ktorí skutočne potrebujú TRNG, poskytol spôsob, ako zozbierať svoju vlastnú entropiu v užívateľskom priestore, aby ju mohli použiť podľa vlastného uváženia. Hovorí, že zhromažďovanie entropie nie je proces, ktorý môže jadro vykonávať na všetkom rôznom hardvéri, ktorý podporuje, ani samotné jadro nedokáže odhadnúť množstvo entropie poskytovanej rôznymi zdrojmi.

„Jadro by nemalo miešať dohromady rôzne zdroje hluku a určite by sa nemalo pokúšať tvrdiť, že vie, koľko bitov entropie získava, keď sa pokúša hrať nejakú „hru s cukavou entropiou“ na neuveriteľne jednoduchom CPU. architektúra pre spotrebiteľských používateľov. IOT/Embedded prípady, v ktorých nie je všetko synchronizované s jediným hlavným oscilátorom, kde neexistuje žiadna inštrukcia CPU na zmenu poradia alebo premenovanie registra atď.“

„Môžete hovoriť o poskytovaní nástrojov, ktoré sa pokúšajú robiť tieto výpočty, ale takéto veci sa musia robiť na hardvéri každého používateľa, čo jednoducho nie je praktické pre väčšinu používateľov distribúcie. Ak je to určené len pre kryptografov, tak nech sa to deje v ich užívateľskom priestore. A nezjednodušujme GPG, OpenSSL atď., aby si každý povedal „chceme „skutočnú náhodnosť“ a neuspokojíme sa s menej.“ Môžeme hovoriť o tom, ako poskytujeme rozhrania pre kryptografov, aby mohli získať informácie, ktoré potrebujú, prístupom k primárnym zdrojom hluku, oddeleným a pomenovaným, a možno sa nejakým spôsobom môže zdroj hluku autentifikovať v knižnici alebo aplikácii používateľského priestoru."

Diskutovalo sa o tom, ako by takéto rozhranie mohlo vyzerať, pretože napríklad niektoré udalosti môžu mať bezpečnostné dôsledky. Cao poznamenal, že kódy skenovania klávesnice (t. j. stlačenia klávesov) sú zmiešané do skupiny ako súčasť zhromažďovania entropie: "Priniesť to do užívateľského priestoru, dokonca aj prostredníctvom privilegovaného systémového volania, by bolo prinajmenšom nerozumné." Je celkom možné, že iné načasovanie udalostí môže spôsobiť určitý druh úniku informácií bočnými kanálmi.

Zdá sa teda, že dlhodobý problém so subsystémom náhodných čísel Linuxu je na ceste k riešeniu. Zmeny, ktorými subsystém náhodných čísel nedávno prešiel, v skutočnosti viedli iba k problémom s DoS pri jeho používaní. Teraz existujú efektívne spôsoby, ako získať najlepšie náhodné čísla, aké môže jadro poskytnúť. Ak je TRNG na Linuxe stále žiaduce, potom bude potrebné túto chybu v budúcnosti vyriešiť, ale s najväčšou pravdepodobnosťou sa tak nestane v samotnom jadre.

Nejaké inzeráty 🙂

Ďakujeme, že ste zostali s nami. Páčia sa vám naše články? Chcete vidieť viac zaujímavého obsahu? Podporte nás zadaním objednávky alebo odporučením priateľom, cloud VPS pre vývojárov od 4.99 USD, jedinečný analóg serverov základnej úrovne, ktorý sme pre vás vymysleli: Celá pravda o VPS (KVM) E5-2697 v3 (6 jadier) 10GB DDR4 480GB SSD 1Gbps od 19 USD alebo ako zdieľať server? (k dispozícii s RAID1 a RAID10, až 24 jadier a až 40 GB DDR4).

Dell R730xd 2 krát lacnejší v dátovom centre Equinix Tier IV v Amsterdame? Len tu 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6 GHz 14C 64 GB DDR4 4 x 960 GB SSD 1 Gbps 100 TV od 199 USD v Holandsku! Dell R420 – 2x E5-2430 2.2 GHz 6C 128 GB DDR3 2 x 960 GB SSD 1 Gb/s 100 TB – od 99 USD! Čítať o Ako vybudovať infraštruktúru spol. triedy s využitím serverov Dell R730xd E5-2650 v4 v hodnote 9000 XNUMX eur za cent?

Zdroj: hab.com

Pridať komentár