Познато је да /дев/рандом, криптографски сигуран генератор псеудослучајних бројева (ЦСПРНГ), има један досадан проблем: блокирање. Овај чланак објашњава како то можете решити.
Током протеклих неколико месеци, објекти за генерисање случајних бројева у кернелу су мало прерађени, али су проблеми у овом подсистему решени током ширег
Енди Лутомирски је крајем децембра објавио трећу верзију закрпе. Он доприноси „две велике семантичке промене насумичних Линук АПИ-ја“. Закрпа додаје нову ГРНД_ИНСЕЦУРЕ заставицу у системски позив гетрандом() (иако је Лутомирски назива гетентропи(), која је имплементирана у глибц користећи гетрандом() са фиксним заставицама); ова заставица узрокује да позив увек враћа тражену количину података, али без гаранције да су подаци насумични. Кернел ће једноставно дати све од себе да произведе најбоље насумичне податке које има у датом тренутку. „Вероватно је најбоље да то назовете 'НЕСИГУРНО' (несигурно) да спречите да се овај АПИ користи за ствари којима је потребна безбедност."
Закрпе такође уклањају блок за блокирање. Кернел тренутно одржава два насумична скупа података, један који одговара /дев/рандом, а други /дев/урандом, као што је описано у овом
Уклањање скупа закључавања значи да се читање из /дев/рандом понаша као гетрандом() са заставицама постављеним на нулу (и претвара ГРНД_РАНДОМ заставицу у нооп). Када се криптографски генератор случајних бројева (ЦРНГ) иницијализује, читање из /дев/рандом и позиви гетрандом(...,0) неће блокирати и вратиће тражену количину насумичних података.
Лутомирски каже: „Верујем да је Линук блок за блокирање постао застарео. ЦРНГ Линук генерише излаз који је довољно добар да се користи чак и за генерисање кључева. Пул за блокирање није јачи у било ком материјалном смислу и захтева много инфраструктуре сумњиве вредности да би га подржао.
Промене су направљене са циљем да се осигура да постојећи програми неће стварно бити погођени, а заправо би било мање проблема са дугим чекањем на ствари попут ГнуПГ генерисања кључева.
„Ове епизоде не смеју да поремете ниједан постојећи програм. /дев/урандом остаје непромењен. /дев/рандом и даље блокира одмах након покретања, али блокира мање него раније. гетентропи() са постојећим заставицама ће вратити резултат који је подједнако погодан за практичне сврхе као и раније."
Лутомирски је приметио да је још увек отворено питање да ли језгро треба да обезбеди такозване „праве случајне бројеве“, што је језгро за блокирање у одређеној мери требало да уради. Он види само један разлог за то: „усаглашеност са државним стандардима“. Лутомирски је предложио да ако језгро то обезбеди, то треба да се уради преко потпуно другачијег интерфејса, или да се премести у кориснички простор, омогућавајући кориснику да преузме необрађене узорке догађаја који би могли да се користе за креирање таквог скупа закључавања.
Стефан Милер је предложио да његов сет
Маттхев Гарретт се успротивио термину „прави насумични подаци“, напомињући да се узорковани уређаји у принципу могу моделирати довољно прецизно да буду предвидљиви: „ми овдје не узоркујемо квантне догађаје.
Милер је одговорио да тај термин потиче из немачког стандарда АИС 31 да би описао генератор случајних бројева који само производи резултат „по истој стопи као што основни извор буке производи ентропију“.
Ако оставимо на страну терминолошке разлике, поседовање скупа закључавања као што сугеришу ЛРНГ закрпе ће једноставно довести до различитих проблема, барем ако му се приступа без привилегија.
Као што је рекао Лутомирски: „Ово не решава проблем. Ако два различита корисника покрећу глупе програме као што је гнупг, они ће се само исцрпљивати. Видим да тренутно постоје два главна проблема са /дев/рандом: подложан је ДоС-у (тј. исцрпљењу ресурса, злонамерном утицају или нечем сличном), а пошто за његово коришћење нису потребне привилегије, такође је склон злоупотреби. Гнупг је погрешан, то је потпуни колапс. Ако додамо нови непривилеговани интерфејс који ће користити гнупг и слични програми, поново ћемо изгубити."
Муеллер је приметио да ће додавање гетрандом() сада омогућити ГнуПГ-у да користи овај интерфејс, пошто ће обезбедити неопходну гаранцију да је скуп иницијализован. На основу разговора са ГнуПГ програмером Вернером Коцхом, Муеллер верује да је гаранција једини разлог зашто ГнуПГ тренутно чита директно из /дев/рандом. Али ако постоји непривилеговани интерфејс који је подложан одбијању услуге (као што је /дев/рандом данас), Лутомирски тврди да ће га неке апликације злоупотребљавати.
Изгледа да је Теодор Ју Так Тс'о, програмер Линук-овог подсистема случајних бројева, променио мишљење о потреби за блоком за блокирање. Рекао је да би се уклањањем овог скупа ефективно ослободило идеје да Линук има прави генератор случајних бројева (ТРНГ): „ово није глупост, пошто је то управо оно што је *БСД увек радио.“
Он је такође забринут да ће обезбеђивање ТРНГ механизма једноставно послужити као мамац за програмере апликација и верује да је у ствари, с обзиром на различите типове хардвера које подржава Линук, немогуће гарантовати ТРНГ у кернелу. Чак и могућност рада са опремом само са роот привилегијама неће решити проблем: „Програмери апликација наводе да њихова апликација буде инсталирана као роот из безбедносних разлога, тако да је то једини начин да приступите „стварно добрим“ случајним бројевима.“
Муеллер је питао да ли је Цао одустао од имплементације блока за блокирање коју је сам дуго предлагао. Цао је одговорио да планира да преузме закрпе Лутомирског и активно се противи додавању интерфејса за блокирање назад у кернел.
„Језгро не може да гарантује да ли је извор буке правилно окарактерисан. Једина ствар коју ГПГ или ОпенССЛ програмер може добити је нејасан осећај да је ТРУЕРАНДОМ „бољи“, а пошто желе више сигурности, несумњиво ће покушати да га искористе. У неком тренутку ће бити блокиран, а када га неки други паметни корисник (можда специјалиста за дистрибуцију) убаци у инит скрипту и системи престану да раде, корисници ће морати само да се жале Линусу Торвалдсу."
Цао такође заговара да се криптографима и онима којима је ТРНГ заиста потребан начин да сакупе сопствену ентропију у корисничком простору како би их користили како желе. Он каже да прикупљање ентропије није процес који кернел може да изврши на свом различитом хардверу који подржава, нити само кернел може проценити количину ентропије коју обезбеђују различити извори.
„Језгро не би требало да меша различите изворе буке заједно, и свакако не би требало да покушава да тврди да зна колико битова ентропије добија када покушава да игра неку врсту „игре ентропије“ на нечувено једноставном ЦПУ-у архитектура за потрошачке кориснике. ИОТ/Уграђени случајеви у којима све није синхронизовано са једним главним осцилатором, где не постоји ЦПУ инструкција за преуређивање или преименовање регистра, итд.”
„Можете да разговарате о обезбеђивању алата који покушавају да изврше ове прорачуне, али такве ствари морају да се раде на хардверу сваког корисника, што једноставно није практично за већину корисника дистрибуције. Ако је ово намењено само криптографима, нека се то уради у њиховом корисничком простору. И немојмо да поједностављујемо ГПГ, ОпенССЛ итд. па да сви кажу „желимо „истински случајност“ и нећемо се задовољити мање“. Можемо разговарати о томе како обезбеђујемо интерфејсе криптографима тако да могу да добију информације које су им потребне приступом примарним изворима буке, одвојеним и именованим, и можда некако извор буке може да се аутентификује у библиотеци или апликацији корисничког простора."
Било је неких дискусија о томе како би такав интерфејс могао да изгледа, будући да на пример може постојати безбедносне импликације за неке догађаје. Цао је приметио да се кодови за скенирање тастатуре (тј. притискања тастера) мешају у скуп као део прикупљања ентропије: „Уношење овога у кориснички простор, чак и путем привилегованог системског позива, у најмању руку не би било мудро.“ Сасвим је могуће да други тајминги догађаја могу створити неку врсту цурења информација кроз бочне канале.
Дакле, изгледа да је дугогодишњи проблем са Линук-овим подсистемом случајних бројева на путу ка решењу. Промене које је подсистем насумичних бројева недавно претрпео заправо су довеле само до проблема са ДоС-ом док га користите. Сада постоје ефикасни начини да се добију најбољи случајни бројеви које кернел може да обезбеди. Ако је ТРНГ и даље пожељан на Линук-у, онда ће овај недостатак морати да се отклони у будућности, али највероватније то неће бити урађено унутар самог кернела.
Неки огласи 🙂
Хвала вам што сте остали са нама. Да ли вам се свиђају наши чланци? Желите да видите још занимљивијег садржаја? Подржите нас тако што ћете наручити или препоручити пријатељима,
Делл Р730кд 2 пута јефтинији у Екуиник Тиер ИВ дата центру у Амстердаму? Само овде
Извор: ввв.хабр.цом