Linux: lukupooli eemaldamine /dev/random

Nagu teada, /dev/random, krĂŒptograafiliselt turvaline valejuhuslike numbrite generaator (CSPRNG), omab ĂŒhte ebameeldivat probleemi – lukustusi. KĂ€esolevas artiklis kĂ€sitletakse, kuidas seda probleemi lahendada.

Viimase paari kuu jooksul on juhuslike numbrite genereerimise vahendeid tuumas veidi ringi tehtud, kuid selle alla kuuluvaid probleeme lahendati laiemas ajavahemikus.Viimased muudatused tehti selleks, et vĂ€ltida sĂŒsteemikĂ”ne getrandom() pikaajalist lukustamist sĂŒsteemi kĂ€ivitamisel, kuid aluseks olev pĂ”hjus oli blokkeeriva juhusliku basseini kĂ€itumine. Hiljutine puhastus eemaldas selle basseini ja oodati, et see suundub pĂ”hituuma.

Andy Lutomirski avaldas detsembri lĂ”pus kolmanda versiooni patĆĄist. See toob kaasa "kaks peamist semantilist muutust Linuxi juhuslikes API-des".PatĆĄ lisab uue lipu GRND_INSECURE sĂŒsteemikĂ”ntele getrandom() (kuigi Lutomirski viitab sellele kui getentropy(), mis on glibc-s rakendatud getrandom() abil fikseeritud lippudega); see lipp sunnib kĂ”net alati tagastama nĂ”utud andmete arvu, kuid ilma garantiita, et need andmed on juhuslikud. Tuum pĂŒĂŒab lihtsalt anda parimaid juhuslikke andmeid, mis tal sel hetkel on. "TĂ”enĂ€oliselt on parim, mida teha saab, nimetada seda 'INSECURE' (ebaturvaliseks), et takistada selle API kasutamist asjade jaoks, mis vajavad turvalisust." PatĆĄid eemaldavad samuti blokkeeriva basseini. Praegu toetab tuum kahte juhuslike andmete basseini, millest ĂŒks vastab /dev/random ja teine /dev/urandom, nagu on kirjeldatud selle

2015. aasta. Blokkeeriv bassein on /dev/random jaoks; lugemine sellest seadmest blokeeritakse (millele viitab selle nimi), kuni sĂŒsteemist kogutakse "piisavalt" entropiat, et rahuldada taotlust. Edasised lugemised sellest failist blokeeritakse samuti, kui basseinis ei ole piisavalt entropiat. artiklis 2015. Blokeeriv bassein on bassein /dev/random; selle seadme lugemine on blokeeritud (mĂ”eldud on selle nimi) kuni sĂŒsteemist on kogutud "piisavalt" entropiat, et taotlust rahuldada. Edasised lugemised sellest failist on samuti blokeeritud, kui basseinis ei ole piisavalt entropiat.

Lukkuploki eemaldamine tĂ€hendab, et lugemine /dev/random kĂ€itub nagu getrandom() nulli vÀÀrtusega ja muudab GRND_RANDOM lipu noop'iks. PĂ€rast krĂŒptograafilise juhusnumbergeneraatori (CRNG) algatamist ei pĂ”hjusta lugemine /dev/random ja getrandom(
,0) kutse lukustumist ning tagastavad soovitud hulga juhuslikke andmeid.

Lutumirski ĂŒtleb: „Mina arvan, et Linuxi lukkuplokk on oma aja Ă€ra elanud. Linuxi CRNG genereerib vĂ€ljundeid, mis on piisavalt head nende kasutamiseks isegi vĂ”tmete genereerimisel. Lukustav plokk ei ole enam mingil praktilisel viisil tugevam ja selle sĂ€ilitamiseks on vaja palju kahtlase vÀÀrtusega infrastruktuuri.“

Muudatused on tehtud silmas pidades, et olemasolevad programmused ei saaks kahjustada, ja tegelikult on probleemide arv, nagu nÀiteks GnuPG vÔtmete genereerimise pika ootamisega, vÀhenemas.

„Need seerjad ei tohiks rikkuda ĂŒhtegi olemasolevat programmi. /dev/urandom jÀÀb muutumatuks. /dev/random on endiselt lukustatud kohe pĂ€rast sĂŒsteemi kĂ€ivitamist, kuid lukustamine toimub vĂ€hem kui varem. getentropy() olemasolevate lippudega tagastab tulemuse, mis on praktiliste eesmĂ€rkide jaoks sama sobiv kui varem.“

Lutumirski mĂ€rkis, et endiselt jÀÀb lahtiseks kĂŒsimus, kas kernel peaks pakkuma nn „tĂ”elisi juhuslikke numbreid“, mida teatud mÀÀral pidi pakkuma lukustav kernel. Ta nĂ€eb sellega seoses vaid ĂŒhte pĂ”hjust: „riiklike standardite jĂ€rgimine“. Lutumirski esitas hĂŒpoteesi, et kui kernel peab seda tagama, peaks see olema tehtud tĂ€iesti erineva liidese kaudu vĂ”i peaks see olema viidud kasutajaruumi, andes sellele vĂ”imaluse hankida toore sĂŒndmuste proovide andmeid, mida saab kasutada sellise lukkuploki loomiseks.

Stephan MĂŒller vĂ€itis, et tema komplekt parandustena Linuxi juhuslike numbrite generaator (LRNG) (praegu on vĂ€lja antud 26. versioon) vĂ”ib olla viis tĂ”estuslike juhuslike arvude esitlemiseks rakendustele, mis seda vajavad. LRNG "vastab tĂ€ielikult nĂ”uetele „Ettepanekud entropiaallikate kohta, mida kasutatakse juhuslike bittide genereerimiseks“ SP800-90B", mis teeb sellest lahenduse riiklikele standarditele.
Matthew Garrett esitas vastuvĂ€ite termini „tĂ”elised juhuslikud andmed” suhtes, mĂ€rkides, et valitud seadmeid on pĂ”himĂ”tteliselt vĂ”imalik piisavalt tĂ€pselt mudeldada, et muudab need ettearvatavaks: „me ei vali siin kvantĂŒritusi.”

MĂŒller vastas, et see termin pĂ€rineb Saksamaa standardist AIS 31, et kirjeldada juhuslike numbrite generaatorit, mis toob tulemuse „sama kiirus kui aluseks olev mĂŒraallikas genereerib entropiat.”

Lisaks terminoloogia erinevustele toob blokeerimise olemasolu, nagu seda pakuvad LRNG-i plaastrid, lihtsalt kaasa mitmesuguseid probleeme, eriti kui see on saadaval privileegideta.

Nagu ĂŒtles Lutomirski: „See ei lahenda probleemi. Kui kaks erinevat kasutajat kĂ€ivitavad rumalaid programme, nagu gnupg, siis nad lihtsalt vĂ€listavad ĂŒksteist. Ma nĂ€en, et praegusel hetkel on kaks peamist probleemi \/dev\/random: see on altid DoS-ile (st ressursside Ă€rakasutamisele, pahatahtlikule mĂ”jule vĂ”i millelegi sarnasele), ja kuna selle kasutamiseks ei ole vaja privileege, on see ka kuritarvitamisele kalduv. Gnupg on vale, see on tĂ€ielik kokkuvarisemine. Kui me lisame uue privileegideta liidese, mida gnupg ja sarnased programmid kasutavad, kaotame me jĂ€lle.”

MĂŒller mĂ€rkis, et getrandom() lisamine vĂ”imaldab GnuPG-l nĂŒĂŒd seda liidest kasutada, kuna see tagab vajaliku garantii, et bassein on initsialiseeritud. PĂ€rast arutelu GnuPG arendaja Werner Kocha kanssa usub MĂŒller, et garantii on ainus pĂ”hjus, miks GnuPG hetkel loeb otse \/dev\/random. Kuid kui on olemas privileegideta liides, mis on teenuse keelamise all (nagu praegu \/dev\/random), siis Lutomirski sĂ”nul kasutatakse seda ebatĂ€pselt mĂ”nede rakenduste poolt.

Theodor Tsao (Theodore Yue Tak Ts’o), a developer of the Linux random number subsystem, seemingly changed his mind about the necessity of a blocking pool. He stated that removing this pool would effectively eliminate the misconception that Linux has a true random number generator (TRNG): “this is not nonsense, as this is exactly what *BSD has always done.”

He is also concerned that providing a TRNG mechanism will merely serve as bait for application developers and believes that, given the various types of hardware supported by Linux, it is impossible to guarantee TRNG in the kernel. The issue will not be resolved even by the possibility of working with hardware based solely on root privileges: “Application developers indicate that for their application to be secure, it must be installed as root, because only then can you access 'really good' random numbers.”

Mueller asked if Tsao has abandoned the implementation of the blocking pool that he himself proposed long ago. Tsao replied that he plans to adopt Lutomirski's patches and is actively opposed to reintroducing the blocking interface back into the kernel.

“The kernel cannot provide any guarantees regarding whether the noise source has been characterized properly. The only thing that a GPG or OpenSSL developer can get is a vague sense that TRUERANDOM is 'better', and since they want greater security, they will undoubtedly try to use it. At some point, it will be blocked, and when some other clever user (perhaps a distribution release engineer) includes it in the init script and the systems stop working, users will only be left to complain to Linus Torvalds himself.”

Tsao also advocates for providing cryptographers and those who truly need TRNG with a way to collect their own entropy in user space to use it at their discretion. He states that collecting entropy is not a process that can be performed by the kernel across all the hardware it supports; moreover, the kernel itself cannot evaluate the amount of entropy provided by different sources.

„Ydin ei saa sekoittaa erilaisia hĂ€iriölĂ€hteitĂ€ keskenÀÀn, eikĂ€ sen tietenkÀÀn pitĂ€isi vĂ€ittÀÀ tietĂ€vĂ€nsĂ€, kuinka paljon entropiabittejĂ€ se saa, kun se yrittÀÀ pelata jotain 'kikattelevan entropian peliĂ€' yksinkertaisella CPU-arkkitehtuurilla IoT/Embedded-kĂ€yttötapaukseen, kun kaikki on synkronoituna yhdestĂ€ pÀÀgeneraattorista, eikĂ€ ole mitÀÀn CPU-ohjekoodia rekisterin uudelleenjĂ€rjestĂ€miseen tai uudelleennimeĂ€miseen jne.“.

„Voidaan puhua työkalujen tarjoamisesta, jotka yrittĂ€vĂ€t tehdĂ€ nĂ€mĂ€ laskelmat, mutta tĂ€llaisia asioita tulisi suorittaa jokaisen kĂ€yttĂ€jĂ€n laitteistolla, mikĂ€ on suurimmalle osalle jakeluversioiden kĂ€yttĂ€jistĂ€ kĂ€ytĂ€nnössĂ€ mahdotonta. Jos se on tarkoitettu vain kryptograafeille, niin se tehdÀÀn heidĂ€n kĂ€yttĂ€jĂ€tilassaan. Ja Ă€lkÀÀmme yksinkertaistako GPG:tĂ€, OpenSSL:tĂ€ jne., jotta kaikki sanovat: 'haluamme 'todellista satunnaisuutta' emmekĂ€ hyvĂ€ksy vĂ€hempÀÀ'. Voidaan keskustella siitĂ€, kuinka tarjoamme rajapintoja kryptograafeille, jotta he voivat saada tarvittavat tiedot pÀÀsyllĂ€ ensisijaisiin hĂ€iriölĂ€hteisiin, jotka ovat eristettyjĂ€ ja nimettyjĂ€, ja ehkĂ€ jollain tavalla hĂ€iriölĂ€hde voi todentaa itsensĂ€ kirjastossa tai sovelluksessa kĂ€yttĂ€jĂ€tilassa.“.

KĂ€ytiin pieni keskustelu siitĂ€, miltĂ€ tĂ€llainen rajapinta voisi nĂ€yttÀÀ, sillĂ€ esimerkiksi joidenkin tapahtumien voi olla turvallisuuteen vaikuttavia seurauksia. Cao huomautti, ettĂ€ nĂ€ppĂ€inpainallusten (eli nĂ€ppĂ€inten painallusten) skannauskoodit sekoittuvat altaaseen osana entropian keruuta: „TĂ€mĂ€n siirtĂ€minen kĂ€yttĂ€jĂ€tilaan, jopa privilegioidun jĂ€rjestelmĂ€kutsun kautta, olisi vĂ€hintÀÀnkin vahingollista“. On tĂ€ysin mahdollista, ettĂ€ muut tapahtuma-aikahaastattelut voivat luoda jotakin tietovuotoa sivukanavilla.

Seega tekib tunne, et Linuxi juhuslike arvude alamprogrammi pikaajaline probleem on lahenduse teel. Hiljutised muudatused juhuslike arvude alamprogrammis on tegelikult kaasa toonud ainult DoS probleeme selle kasutamisel. NĂŒĂŒd on aga vĂ€lja töötatud tĂ”husad viisid, kuidas saada parimaid juhuslikke arve, mida tuum suudab pakkuda. Kui TRNG on Linuxis endiselt soovitav, siis tuleb see puudus tulevikus kĂ”rvaldada, kuid tĂ”enĂ€oliselt ei toimu see tuuma sees.

Veidi reklaami 🙂

AitÀh, et olete meiega. Kas teile meeldivad meie artiklid? Kas soovite nÀha rohkem huvitavat sisu? Toetage meid, tellides teenuse vÔi soovitades meid tuttavatele. Pilve VPS arendajatele alates $4.99, ainulaadne entry-level serverite analoog, mille oleme teie jaoks vÀlja mÔelnud: Kogu tÔde VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps alates $19 vÔi kuidas jagada serverit Ôigesti? (saadaval RAID1 ja RAID10 variandid, kuni 24 tuuma ja kuni 40GB DDR4).

Dell R730xd on Equinixi Tier IV andmekeskuses Amsterdamis kaks korda odavam? Ainult meie juures 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TB alates $199 Hollandis! Dell R420 — 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — alates $99! Lugege sellest Kuidas luua ettevĂ”tte tasemel infrastruktuuri, kasutades Dell R730xd E5-2650 v4 servereid, mille hind on 9000 eurot, taskukohase hinna eest?

Allikas: habr.com

Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid - ProHoster