Линук: уклањање скупа закључавања /дев/рандом

Познато је да /дев/рандом, криптографски сигуран генератор псеудослучајних бројева (ЦСПРНГ), има један досадан проблем: блокирање. Овај чланак објашњава како то можете решити.

Током протеклих неколико месеци, објекти за генерисање случајних бројева у кернелу су мало прерађени, али су проблеми у овом подсистему решени током ширег Временски оквир. Највише последње промене су направљени да спрече системски позив гетрандом() да се блокира на дуже време када се систем покрене, али основни разлог за то је било понашање блокирања насумичне групе. Недавна закрпа би уклонила овај базен и очекивало се да ће кренути ка главном језгру.

Енди Лутомирски је крајем децембра објавио трећу верзију закрпе. Он доприноси „две велике семантичке промене насумичних Линук АПИ-ја“. Закрпа додаје нову ГРНД_ИНСЕЦУРЕ заставицу у системски позив гетрандом() (иако је Лутомирски назива гетентропи(), која је имплементирана у глибц користећи гетрандом() са фиксним заставицама); ова заставица узрокује да позив увек враћа тражену количину података, али без гаранције да су подаци насумични. Кернел ће једноставно дати све од себе да произведе најбоље насумичне податке које има у датом тренутку. „Вероватно је најбоље да то назовете 'НЕСИГУРНО' (несигурно) да спречите да се овај АПИ користи за ствари којима је потребна безбедност."

Закрпе такође уклањају блок за блокирање. Кернел тренутно одржава два насумична скупа података, један који одговара /дев/рандом, а други /дев/урандом, као што је описано у овом Чланак 2015. Скуп за блокирање је скуп за /дев/рандом; читања за тај уређај ће се блокирати (што значи његово име) све док се не прикупи "довољно" ентропије из система да би се задовољио захтев. Даља читања из ове датотеке су такође блокирана ако нема довољно ентропије у групи.

Уклањање скупа закључавања значи да се читање из /дев/рандом понаша као гетрандом() са заставицама постављеним на нулу (и претвара ГРНД_РАНДОМ заставицу у нооп). Када се криптографски генератор случајних бројева (ЦРНГ) иницијализује, читање из /дев/рандом и позиви гетрандом(...,0) неће блокирати и вратиће тражену количину насумичних података.

Лутомирски каже: „Верујем да је Линук блок за блокирање постао застарео. ЦРНГ Линук генерише излаз који је довољно добар да се користи чак и за генерисање кључева. Пул за блокирање није јачи у било ком материјалном смислу и захтева много инфраструктуре сумњиве вредности да би га подржао.

Промене су направљене са циљем да се осигура да постојећи програми неће стварно бити погођени, а заправо би било мање проблема са дугим чекањем на ствари попут ГнуПГ генерисања кључева.

„Ове епизоде ​​не смеју да поремете ниједан постојећи програм. /дев/урандом остаје непромењен. /дев/рандом и даље блокира одмах након покретања, али блокира мање него раније. гетентропи() са постојећим заставицама ће вратити резултат који је подједнако погодан за практичне сврхе као и раније."

Лутомирски је приметио да је још увек отворено питање да ли језгро треба да обезбеди такозване „праве случајне бројеве“, што је језгро за блокирање у одређеној мери требало да уради. Он види само један разлог за то: „усаглашеност са државним стандардима“. Лутомирски је предложио да ако језгро то обезбеди, то треба да се уради преко потпуно другачијег интерфејса, или да се премести у кориснички простор, омогућавајући кориснику да преузме необрађене узорке догађаја који би могли да се користе за креирање таквог скупа закључавања.

Стефан Милер је предложио да његов сет закрпе за Линук Генератор случајних бројева (ЛРНГ) (тренутно објављена верзија 26) могао би бити начин да се обезбеде прави случајни бројеви за апликације којима је то потребно. ЛРНГ је „потпуно усклађен са СП800-90Б смерницама о изворима ентропије који се користе за генерисање насумичних битова“, што га чини решењем за проблем владиних стандарда.
Маттхев Гарретт се успротивио термину „прави насумични подаци“, напомињући да се узорковани уређаји у принципу могу моделирати довољно прецизно да буду предвидљиви: „ми овдје не узоркујемо квантне догађаје.

Милер је одговорио да тај термин потиче из немачког стандарда АИС 31 да би описао генератор случајних бројева који само производи резултат „по истој стопи као што основни извор буке производи ентропију“.

Ако оставимо на страну терминолошке разлике, поседовање скупа закључавања као што сугеришу ЛРНГ закрпе ће једноставно довести до различитих проблема, барем ако му се приступа без привилегија.

Као што је рекао Лутомирски: „Ово не решава проблем. Ако два различита корисника покрећу глупе програме као што је гнупг, они ће се само исцрпљивати. Видим да тренутно постоје два главна проблема са /дев/рандом: подложан је ДоС-у (тј. исцрпљењу ресурса, злонамерном утицају или нечем сличном), а пошто за његово коришћење нису потребне привилегије, такође је склон злоупотреби. Гнупг је погрешан, то је потпуни колапс. Ако додамо нови непривилеговани интерфејс који ће користити гнупг и слични програми, поново ћемо изгубити."

Муеллер је приметио да ће додавање гетрандом() сада омогућити ГнуПГ-у да користи овај интерфејс, пошто ће обезбедити неопходну гаранцију да је скуп иницијализован. На основу разговора са ГнуПГ програмером Вернером Коцхом, Муеллер верује да је гаранција једини разлог зашто ГнуПГ тренутно чита директно из /дев/рандом. Али ако постоји непривилеговани интерфејс који је подложан одбијању услуге (као што је /дев/рандом данас), Лутомирски тврди да ће га неке апликације злоупотребљавати.

Изгледа да је Теодор Ју Так Тс'о, програмер Линук-овог подсистема случајних бројева, променио мишљење о потреби за блоком за блокирање. Рекао је да би се уклањањем овог скупа ефективно ослободило идеје да Линук има прави генератор случајних бројева (ТРНГ): „ово није глупост, пошто је то управо оно што је *БСД увек радио.“

Он је такође забринут да ће обезбеђивање ТРНГ механизма једноставно послужити као мамац за програмере апликација и верује да је у ствари, с обзиром на различите типове хардвера које подржава Линук, немогуће гарантовати ТРНГ у кернелу. Чак и могућност рада са опремом само са роот привилегијама неће решити проблем: „Програмери апликација наводе да њихова апликација буде инсталирана као роот из безбедносних разлога, тако да је то једини начин да приступите „стварно добрим“ случајним бројевима.“

Муеллер је питао да ли је Цао одустао од имплементације блока за блокирање коју је сам дуго предлагао. Цао је одговорио да планира да преузме закрпе Лутомирског и активно се противи додавању интерфејса за блокирање назад у кернел.

„Језгро не може да гарантује да ли је извор буке правилно окарактерисан. Једина ствар коју ГПГ или ОпенССЛ програмер може добити је нејасан осећај да је ТРУЕРАНДОМ „бољи“, а пошто желе више сигурности, несумњиво ће покушати да га искористе. У неком тренутку ће бити блокиран, а када га неки други паметни корисник (можда специјалиста за дистрибуцију) убаци у инит скрипту и системи престану да раде, корисници ће морати само да се жале Линусу Торвалдсу."

Цао такође заговара да се криптографима и онима којима је ТРНГ заиста потребан начин да сакупе сопствену ентропију у корисничком простору како би их користили како желе. Он каже да прикупљање ентропије није процес који кернел може да изврши на свом различитом хардверу који подржава, нити само кернел може проценити количину ентропије коју обезбеђују различити извори.

„Језгро не би требало да меша различите изворе буке заједно, и свакако не би требало да покушава да тврди да зна колико битова ентропије добија када покушава да игра неку врсту „игре ентропије“ на нечувено једноставном ЦПУ-у архитектура за потрошачке кориснике. ИОТ/Уграђени случајеви у којима све није синхронизовано са једним главним осцилатором, где не постоји ЦПУ инструкција за преуређивање или преименовање регистра, итд.”

„Можете да разговарате о обезбеђивању алата који покушавају да изврше ове прорачуне, али такве ствари морају да се раде на хардверу сваког корисника, што једноставно није практично за већину корисника дистрибуције. Ако је ово намењено само криптографима, нека се то уради у њиховом корисничком простору. И немојмо да поједностављујемо ГПГ, ОпенССЛ итд. па да сви кажу „желимо „истински случајност“ и нећемо се задовољити мање“. Можемо разговарати о томе како обезбеђујемо интерфејсе криптографима тако да могу да добију информације које су им потребне приступом примарним изворима буке, одвојеним и именованим, и можда некако извор буке може да се аутентификује у библиотеци или апликацији корисничког простора."

Било је неких дискусија о томе како би такав интерфејс могао да изгледа, будући да на пример може постојати безбедносне импликације за неке догађаје. Цао је приметио да се кодови за скенирање тастатуре (тј. притискања тастера) мешају у скуп као део прикупљања ентропије: „Уношење овога у кориснички простор, чак и путем привилегованог системског позива, у најмању руку не би било мудро.“ Сасвим је могуће да други тајминги догађаја могу створити неку врсту цурења информација кроз бочне канале.

Дакле, изгледа да је дугогодишњи проблем са Линук-овим подсистемом случајних бројева на путу ка решењу. Промене које је подсистем насумичних бројева недавно претрпео заправо су довеле само до проблема са ДоС-ом док га користите. Сада постоје ефикасни начини да се добију најбољи случајни бројеви које кернел може да обезбеди. Ако је ТРНГ и даље пожељан на Линук-у, онда ће овај недостатак морати да се отклони у будућности, али највероватније то неће бити урађено унутар самог кернела.

Неки огласи 🙂

Хвала вам што сте остали са нама. Да ли вам се свиђају наши чланци? Желите да видите још занимљивијег садржаја? Подржите нас тако што ћете наручити или препоручити пријатељима, ВПС у облаку за програмере од 4.99 УСД, јединствени аналог сервера почетног нивоа, који смо ми измислили за вас: Цела истина о ВПС (КВМ) Е5-2697 в3 (6 језгара) 10ГБ ДДР4 480ГБ ССД 1Гбпс од 19 долара или како делити сервер? (доступно са РАИД1 и РАИД10, до 24 језгра и до 40 ГБ ДДР4).

Делл Р730кд 2 пута јефтинији у Екуиник Тиер ИВ дата центру у Амстердаму? Само овде 2 к Интел ТетраДеца-Цоре Ксеон 2к Е5-2697в3 2.6ГХз 14Ц 64ГБ ДДР4 4к960ГБ ССД 1Гбпс 100 ТВ од 199 УСД у Холандији! Делл Р420 - 2к Е5-2430 2.2Гхз 6Ц 128ГБ ДДР3 2к960ГБ ССД 1Гбпс 100ТБ - од 99 долара! Читали о Како изградити инфраструктурну корпорацију. класе уз коришћење Делл Р730кд Е5-2650 в4 сервера у вредности од 9000 евра за пени?

Извор: ввв.хабр.цом

Додај коментар