Познато је да /дев/рандом, криптографски сигуран генератор псеудослучајних бројева (ЦСПРНГ), има један досадан проблем: блокирање. Овај чланак објашњава како то можете решити.
Током протеклих неколико месеци, објекти за генерисање случајних бројева у кернелу су мало прерађени, али су проблеми у овом подсистему решени током ширег . Највише су направљени да спрече системски позив гетрандом() да се блокира на дуже време када се систем покрене, али основни разлог за то је било понашање блокирања насумичне групе. Недавна закрпа би уклонила овај базен и очекивало се да ће кренути ка главном језгру.
Енди Лутомирски је крајем децембра објавио трећу верзију закрпе. Он доприноси две главне семантичке промене у случајним API-јима Linux». Закрпа додаје нову ГРНД_ИНСЕЦУРЕ заставицу у системски позив гетрандом() (иако је Лутомирски назива гетентропи(), која је имплементирана у глибц користећи гетрандом() са фиксним заставицама); ова заставица узрокује да позив увек враћа тражену количину података, али без гаранције да су подаци насумични. Кернел ће једноставно дати све од себе да произведе најбоље насумичне податке које има у датом тренутку. „Вероватно је најбоље да то назовете 'НЕСИГУРНО' (несигурно) да спречите да се овај АПИ користи за ствари којима је потребна безбедност."
Закрпе такође уклањају блок за блокирање. Кернел тренутно одржава два насумична скупа података, један који одговара /дев/рандом, а други /дев/урандом, као што је описано у овом 2015. Скуп за блокирање је скуп за /дев/рандом; читања за тај уређај ће се блокирати (што значи његово име) све док се не прикупи "довољно" ентропије из система да би се задовољио захтев. Даља читања из ове датотеке су такође блокирана ако нема довољно ентропије у групи.
Уклањање скупа закључавања значи да се читање из /дев/рандом понаша као гетрандом() са заставицама постављеним на нулу (и претвара ГРНД_РАНДОМ заставицу у нооп). Када се криптографски генератор случајних бројева (ЦРНГ) иницијализује, читање из /дев/рандом и позиви гетрандом(...,0) неће блокирати и вратиће тражену количину насумичних података.
Лутомирски каже: „Мислим да блокирајући базен Linux надживео је своју корисност. Linux генерише излаз који је довољно добар да се чак користи за генерисање кључева. Блокирајући пул није јачи ни на који материјални начин, а његово одржавање захтева много инфраструктуре сумњиве вредности.
Промене су направљене са циљем да се осигура да постојећи програми неће стварно бити погођени, а заправо би било мање проблема са дугим чекањем на ствари попут ГнуПГ генерисања кључева.
„Ове епизоде не смеју да поремете ниједан постојећи програм. /дев/урандом остаје непромењен. /дев/рандом и даље блокира одмах након покретања, али блокира мање него раније. гетентропи() са постојећим заставицама ће вратити резултат који је подједнако погодан за практичне сврхе као и раније."
Лутомирски је приметио да је још увек отворено питање да ли језгро треба да обезбеди такозване „праве случајне бројеве“, што је језгро за блокирање у одређеној мери требало да уради. Он види само један разлог за то: „усаглашеност са државним стандардима“. Лутомирски је предложио да ако језгро то обезбеди, то треба да се уради преко потпуно другачијег интерфејса, или да се премести у кориснички простор, омогућавајући кориснику да преузме необрађене узорке догађаја који би могли да се користе за креирање таквог скупа закључавања.
Стефан Милер је предложио да његов сет за генератор случајних бројева Linux (LRNG) (тренутно у верзији 26) може бити начин да се обезбеде прави случајни бројеви за апликације које их захтевају. LRNG „у потпуности испуњава захтеве Препоруке за изворе ентропије који се користе за генерисање случајних битова SP800-90B“, што га чини решењем за проблем владиних стандарда.
Маттхев Гарретт се успротивио термину „прави насумични подаци“, напомињући да се узорковани уређаји у принципу могу моделирати довољно прецизно да буду предвидљиви: „ми овдје не узоркујемо квантне догађаје.
Милер је одговорио да тај термин потиче из немачког стандарда АИС 31 да би описао генератор случајних бројева који само производи резултат „по истој стопи као што основни извор буке производи ентропију“.
Ако оставимо на страну терминолошке разлике, поседовање скупа закључавања као што сугеришу ЛРНГ закрпе ће једноставно довести до различитих проблема, барем ако му се приступа без привилегија.
Као што је рекао Лутомирски: „Ово не решава проблем. Ако два различита корисника покрећу глупе програме као што је гнупг, они ће се само исцрпљивати. Видим да тренутно постоје два главна проблема са /дев/рандом: подложан је ДоС-у (тј. исцрпљењу ресурса, злонамерном утицају или нечем сличном), а пошто за његово коришћење нису потребне привилегије, такође је склон злоупотреби. Гнупг је погрешан, то је потпуни колапс. Ако додамо нови непривилеговани интерфејс који ће користити гнупг и слични програми, поново ћемо изгубити."
Муеллер је приметио да ће додавање гетрандом() сада омогућити ГнуПГ-у да користи овај интерфејс, пошто ће обезбедити неопходну гаранцију да је скуп иницијализован. На основу разговора са ГнуПГ програмером Вернером Коцхом, Муеллер верује да је гаранција једини разлог зашто ГнуПГ тренутно чита директно из /дев/рандом. Али ако постоји непривилеговани интерфејс који је подложан одбијању услуге (као што је /дев/рандом данас), Лутомирски тврди да ће га неке апликације злоупотребљавати.
Теодор Цо (Теодор Јуе Так Цо), програмер подсистема случајних бројева Linux, очигледно је променио мишљење о потреби за блокирајућим пулом. Рекао је да би његово уклањање ефикасно елиминисало идеју да Linux има прави генератор случајних бројева (TRNG): „ово није глупост, пошто је то управо оно што је *БСД увек радио.“
Такође је забринут да ће обезбеђивање TRNG механизма само послужити као мамац за програмере апликација и верује да ће у стварности, с обзиром на различите типове подржаног хардвера Linux, немогуће је гарантовати TRNG у језгру. Чак ни дозвољавање само root привилегија за управљање хардвером неће решити проблем: „Програмери апликација наводе да њихова апликација буде инсталирана као роот из безбедносних разлога, тако да је то једини начин да приступите „стварно добрим“ случајним бројевима.“
Муеллер је питао да ли је Цао одустао од имплементације блока за блокирање коју је сам дуго предлагао. Цао је одговорио да планира да преузме закрпе Лутомирског и активно се противи додавању интерфејса за блокирање назад у кернел.
„Језгро не може да гарантује да ли је извор буке правилно окарактерисан. Једина ствар коју ГПГ или ОпенССЛ програмер може добити је нејасан осећај да је ТРУЕРАНДОМ „бољи“, а пошто желе више сигурности, несумњиво ће покушати да га искористе. У неком тренутку ће бити блокиран, а када га неки други паметни корисник (можда специјалиста за дистрибуцију) убаци у инит скрипту и системи престану да раде, корисници ће морати само да се жале Линусу Торвалдсу."
Цао такође заговара да се криптографима и онима којима је ТРНГ заиста потребан начин да сакупе сопствену ентропију у корисничком простору како би их користили како желе. Он каже да прикупљање ентропије није процес који кернел може да изврши на свом различитом хардверу који подржава, нити само кернел може проценити количину ентропије коју обезбеђују различити извори.
„Језгро не би требало да меша различите изворе буке заједно, и свакако не би требало да покушава да тврди да зна колико битова ентропије добија када покушава да игра неку врсту „игре ентропије“ на нечувено једноставном ЦПУ-у архитектура за потрошачке кориснике. ИОТ/Уграђени случајеви у којима све није синхронизовано са једним главним осцилатором, где не постоји ЦПУ инструкција за преуређивање или преименовање регистра, итд.”
„Можете да разговарате о обезбеђивању алата који покушавају да изврше ове прорачуне, али такве ствари морају да се раде на хардверу сваког корисника, што једноставно није практично за већину корисника дистрибуције. Ако је ово намењено само криптографима, нека се то уради у њиховом корисничком простору. И немојмо да поједностављујемо ГПГ, ОпенССЛ итд. па да сви кажу „желимо „истински случајност“ и нећемо се задовољити мање“. Можемо разговарати о томе како обезбеђујемо интерфејсе криптографима тако да могу да добију информације које су им потребне приступом примарним изворима буке, одвојеним и именованим, и можда некако извор буке може да се аутентификује у библиотеци или апликацији корисничког простора."
Било је неких дискусија о томе како би такав интерфејс могао да изгледа, будући да на пример може постојати безбедносне импликације за неке догађаје. Цао је приметио да се кодови за скенирање тастатуре (тј. притискања тастера) мешају у скуп као део прикупљања ентропије: „Уношење овога у кориснички простор, чак и путем привилегованог системског позива, у најмању руку не би било мудро.“ Сасвим је могуће да други тајминги догађаја могу створити неку врсту цурења информација кроз бочне канале.
Дакле, чини се да је дугогодишњи проблем подсистема случајних бројева Linux је на путу ка решењу. Промене које је подсистем случајних бројева недавно претрпео ефикасно су довеле само до проблема са DoS-ом током његове употребе. Међутим, сада постоје ефикасни начини за добијање најбољих случајних бројева које језгро може да пружи. Ако је TRNG и даље пожељан за Linux, онда ће овај недостатак морати бити отклоњен у будућности, али највероватније се то неће урадити унутар самог језгра.
Неки огласи 🙂
Хвала вам што сте остали са нама. Да ли вам се свиђају наши чланци? Желите да видите још занимљивијег садржаја? Подржите нас тако што ћете наручити или препоручити пријатељима, , јединствени аналог сервера почетног нивоа, који смо ми измислили за вас: (доступно са РАИД1 и РАИД10, до 24 језгра и до 40 ГБ ДДР4).
Делл Р730кд 2 пута јефтинији у Екуиник Тиер ИВ дата центру у Амстердаму? Само овде у Холандији! Делл Р420 - 2к Е5-2430 2.2Гхз 6Ц 128ГБ ДДР3 2к960ГБ ССД 1Гбпс 100ТБ - од 99 долара! Читали о
Извор: ввв.хабр.цом
