Nagu teada, on /dev/random, krüptograafiliselt turvaline pseudojuhuslike arvude generaator (CSPRNG), ühe ebameeldiva probleemiga - takistustega. Selles artiklis käsitletakse, kuidas seda lahendada.
Viimase paari kuu jooksul on juhuslike arvude genereerimise vahendeid tuumas veidi ümber töötatud, kuid selle alamkäsu probleemide lahendamine on toimunud laiemates Viimased tehti selleks, et vältida süsteemikutsu getrandom() pikaldast blokeerimist süsteemi käivitamisel, kuid selle aluseks olid takistava juhusliku basseini käitumine. Hiljutine parandus eemaldas selle basseini ja oodati, et see suundub põhituuma.
Andy Lutomirski avaldas detsembri lõpus kolmanda versiooni parandusest. See toob endaga „kaks peamist semantilist muudatust Linuxi juhuslikes API-des“. Patach lisab uue GRND_INSECURE lipu süsteemikõnele getrandom() (kuigi Lutomiirski nimetab seda getentropy'ks, mis on glibc-s rakendatud getrandom() kaudu fikseeritud lippudega); see lipp sunnib kõnet alati tagastama soovitud andmete hulga, kuid ilma garantiita, et need andmed oleksid juhuslikud. Südamik püüab lihtsalt anda parimaid juhuslikke andmeid, mis tal antud hetkel on. „Tõenäoliselt on parim, mida teha, nimetada seda 'INSECURE' (mitteohutuks), et takistada selle API kasutamist asjade jaoks, mis vajavad turvalisust.“ (небезопасным), чтобы воспрепятствовать использованию этого API для вещей, которые нуждаются в безопасности».
Patchid eemaldavad ka blokeeritud puu. Praegu toetab südamik kahte juhuslike andmete puu, millest üks vastab /dev/random'ile ja teine /dev/urandom'ile, nagu on kirjeldatud selles 2015. aastal. Blokeeritud puu on puu /dev/random jaoks; selle seadme lugemine blokeeritakse (tähendab, et selle nimi) seni, kuni süsteemist on kogutud piisav entropia, et rahuldada päringut. Edasi lugemine sellest failist blokeeritakse samuti, kui puus pole piisavalt entropiat.
Lukustusploki eemaldamine tähendab, et lugemine /dev/random käitub nagu getrandom() nulli tähistega (ja muudab GRND_RANDOM märgi noop-iks). Pärast krüptograafilise juhuslikkuse generaatori (CRNG) algatamist ei blokeeri lugemine /dev/random ja getrandom(…,0) väljakutsed ning tagastab nõutava hulga juhuslikke andmeid.
Lutomirski ütleb: «Ma arvan, et Linuxi blokeeriv plokk on oma aja üle elanud. Linuxi CRNG genereerib väljundit, mis on piisavalt hea, et seda kasutada isegi võtmete genereerimiseks. Blokeeriv plokk ei ole mingil materiaalsel tasemel tugevam ja selle hoidmiseks on vajalik palju küsitava väärtusega infrastruktuuri.»
Muudatused on tehtud eesmärgiga, et olemasolevad programmid ei kannataks ja tegelikult muutub vähem probleemseks pika ooteaegade olukord, nagu GnuPG võtmete genereerimine.
„Need seeriad ei tohi rikkuda olemasolevaid programme. /dev/urandom jääb muutumatuks. /dev/random jääb endiselt kohe pärast laadimist blokeerituks, kuid vähem kui varem. getentropy() koos olemasolevate lipudega tagastab tulemuse, mis on praktiliste eesmärkide jaoks sama sobiv nagu varem.”
Lutomirski märkis, et siiani on avatud küsimus, kas kernel peaks pakkuma nn „päris juhuslikke numbreid”, nagu peaks blokeeriv kernel mingil määral tegema. Ta näeb selleks vaid ühte põhjust: „riiklike standardite järgimine”. Lutomirski pakkus, et kui kernel peab seda tagama, siis peaks see toimuma täiesti erineva liidese kaudu või tuleks see viia kasutajaruumi, pakkudes talle võimalust hankida tooreid sündmuste proovide, mida saab kasutada sellise blokeerimismahuti moodustamiseks.
Stephan Müller pakkus, et tema komplekt Linuxi juhuslike arvnähtude generaator (LRNG) (praegu on välja antud 26. versioon) võib olla viis tõeliselt juhuslike arvnähtude pakkumiseks rakendustele, mis seda vajavad. LRNG "vastab täielikult "Juhendite nõuetele energiaallikate jaoks, mida kasutatakse juhuslike bitide genereerimiseks" SP800-90B", mistõttu on see lahendus riiklikele standarditele.
Matthew Garrett kahtles mõiste "tõelised juhuslikud andmed" üle, märkides, et valitud seadmeid saab põhimõtteliselt simuleerida piisavalt täpselt, et muuta need ennustatavaks: "me ei korja siin kvantüritusi".
Müller vastas, et see termin tuleneb Saksamaa standardist AIS 31, mis kirjeldab juhuslikke arvnähtude generaatorit, mis ainult väljastab tulemuse "sama kiirusel, millega baasiline müraallikas tootab entropiat".
Lisaks terminoloogia erinevustele tõi LRNG patšides ette nähtud lukustamisbaseni olemasolu lihtsalt kaasa erinevaid probleeme, vähemalt kui see on kergesti ligipääsetav ilma privileege omamata.
Kuidas ütles Lutomirski: „See ei lahenda probleemi. Kui kaks erinevat kasutajat käivitavad rumalaid programme, nagu gnupg, lihtsalt tühjendavad nad üksteist. Näen, et hetkel on kaks peamist probleemi /dev/randomiga: see on aldis DoS-le (st ressursi ammendamine, halvad mõjud või midagi sarnast), ja kuna selle kasutamiseks ei ole mingeid privileege nõutud, on see samuti aldis kuritarvitustele. Gnupg on vale, see on täielik kokkuvarisemine. Kui lisame uue mittepriviligeeritud liidese, mida gnupg ja sarnased programmid kasutavad, siis kaotame me jälle.”
Müller märkis, et getrandom() lisamine võimaldab nüüd GnuPG-l seda liidest kasutada, kuna see tagab, et puhver on initsialiseeritud. Pärast arutelusid GnuPG arendaja Werner Kocho (Werner Koch) kanssa usub Müller, et see garantii on ainus põhjus, miks GnuPG praegu loeb otse /dev/random. Kuid kui on olemas privileegita liides, mis on aldis teenuse keelamisele (nagu praegu /dev/random), siis väidab Lutomirski, et seda kasutatakse valesti mõnede rakenduste poolt.
Teodor Tsao (Theodore Yue Tak Ts’o), Linuxi juhuslike numbrite alam-süsteemi arendaja, näib olevat muutnud oma arvamust blokeeriva puhvri vajaduse osas. Ta ütles, et selle puhvri eemaldamine võimaldab efektiivselt vabaneda ideest, et Linuxil on tõeline juhuslike numbrite generaator (TRNG): «see ei ole mõttetuks, kuna see on just see, mida *BSD on alati teinud."
Ta on mures, et TRNG mehhanismi pakkumine teenib lihtsalt rakenduste arendajate köitmiseks ja arvab, et arvestades Linuxi toetatavaid erinevaid riistvara tüüpe, on küllalt keeruline tagada TRNG tuumas. Probleemi ei lahenda isegi juurprivileegide alusel töötamine. «Rakenduste arendajad nõuavad, et nende rakendust tuleks turvalisuse huvides käitada kui juur, sest ainult nii on võimalik pääseda «tõeliselt headele» juhuslikele numbritele».
Müller küsis, kas Cao on loobunud blokeeriva koosluse rakendamisest, mida ta ise juba ammu soovitas. Cao vastas, et plaanib võtta Lutomirski patšid ja on aktiivselt vastu blokeeriva liidese lisamisele tagasi tuumasse.
Kern ei saa anda mingeid garantiisid selle kohta, kas mürasaajate kirjeldamine on olnud nõuetekohane. Ainus, mille GPG või OpenSSL arendaja võib saada, on hägune tunne, et TRUERANDOM on "parem", ja kuna nad soovivad suuremat turvalisust, üritavad nad seda kindlasti kasutada. Teatud hetkel hakatakse seda blokeerima, ja kui mõni muu tark kasutaja (võib-olla jaotuse funktsioneerimise spetsialist) lisab selle init-skripti, ei tööta süsteemid enam; kasutajatel jääb vaid Linus Torvaldsi kaebamine.
Cao toetab samuti krüptograafidele ja neile, kes tõeliselt vajavad TRNG-d, võimalust koguda omaenda entropiat kasutajaruumi, et kasutada seda omal ära. Ta ütleb, et entropia kogumine ei ole protsess, mida tuum saab teha kõikide toetatud riistvarade puhul, veelgi enam ei saa tuum ise hinnata, kui palju entropiat pakuvad erinevad allikad.
«Tuum ei tohiks segada erinevaid müra allikaid ning see ei tohiks proovida väita, kui palju bitivähet ta saab, püüdes mängida mingit "tõrvatud entropia mängu" lihtsas, uskumatult aluses CPU arhitektuuris IoT/embeddatud kasutusjuhtude jaoks, kui kõik on üksiku meistrigeneraatoriga desünkroniseeritud, pole mingit CPU käsku registri ümberpaigutamiseks või ümbernimetamiseks jne.»
„Saame rääkida tööriistade pakkumisest, mis püüavad neid arvutusi teha, kuid sellised asjad peaksid toimuma iga kasutaja seadmetes, mis on enamiku levituse kasutajate jaoks lihtsalt ebatõhus. Kui see on mõeldud ainult krüptograafidele, siis las see toimuda nende kasutajaruumi. Ja ärgem lihtsustagem GPG-d, OpenSSL-i jne, nii et kõik ütlevad: „me tahame „tõelist juhuslikkust“ ja ei lepi millegagi vähemaga“. V võime rääkida sellest, kuidas pakume krüptograafidele liideseid, et nad saaksid vajalikku teavet tänu juurdepääsule esmasele noise source'ile, mis on eraldatud ja nimetatud, ja võib-olla suudab noise source mõnel viisil end autentida raamatukogus või kasutajarakenduses.”
Toimus väike arutelu selle üle, milline selline kasutajaliides võiks välja näha, arvestades, et näiteks mõned sündmused võivad tõstatada turvalisuse küsimusi. Cao märkis, et klaviatuuriskaneerimise koodid (st klahvivajutused) segunevad kogumise osana entropiapooles: „Seda kasutajaruumi viia, isegi läbi privileege omava süsteemikutsungi, oleks vähemasti mitte ettevaatlik.” On täiesti võimalik, et muutlikud sündmused võivad luua mingit teavet kõrvalkanalite kaudu.
Seega tekib tunne, et pikaajaline Linuxi juhuslike arvude alamsüsteemi probleem on lahenduse teel. Hiljutised muutused juhuslike arvude alamsüsteemis on tegelikult ainult tekitanud DoS-probleeme selle kasutamise käigus. Nüüd on aga saadaval efektiivsed viisid parimate juhuslike numbrite saamiseks, mida tuumik võib pakkuda. Kui TRNG on Linuxi jaoks endiselt soovitav, tuleb see puudus tulevikus lahendada, kuid tõenäoliselt ei tehta seda tuum ise.
Veidi reklaami 🙂
Aitäh, et olete meiega. Kas teile meeldivad meie artiklid? Kas soovite näha rohkem huvitavaid materjale? Toetage meid, tehes tellimuse või soovitades meid tuttavatele. , ainulaadne sisenemise taseme serverite analoog, mille oleme teie jaoks välja mõelnud: (saadaval on RAID1 ja RAID10 variandid, kuni 24 südamikku ja kuni 40GB DDR4).
Kas Dell R730xd on kaks korda odavam Equinixi Tier IV andmete keskuses Amsterdamis? Ainult meie juures Hollandi turul! Dell R420 — 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — alates $99! Lugege, kuidas
Allikas: habr.com
