Linux: хориҷ кардани ҳавзи қулф /dev/random

/dev/random, як тавлидкунандаи рақамҳои псевдо-тасодуфӣ (CSPRNG), ки аз ҷиҳати криптографӣ эмин аст, маълум аст, ки як мушкили дилгиркунанда дорад: басташавӣ. Ин мақола мефаҳмонад, ки чӣ тавр шумо метавонед онро ҳал кунед.

Дар тӯли чанд моҳи охир, дастгоҳҳои тавлиди рақамҳои тасодуфӣ дар ядро ​​​​ каме аз нав кор карда шуданд, аммо мушкилот дар ин зерсистема дар тӯли васеътар ҳал карда шуданд. муддати вақт. Аксарият тағйироти охирин барои ҷилавгирӣ аз бастани занги системаи getrandom() барои муддати тӯлонӣ ҳангоми боркунии система сохта шуда буданд, аммо сабаби аслии ин рафтори бастани ҳавзи тасодуфӣ буд. Ямоқи ба наздикӣ ин ҳавзро нест мекард ва интизор мерафт, ки он ба ядрои асосӣ меравад.

Энди Лутомирски версияи сеюми патчро дар охири моҳи декабр нашр кард. Ӯ саҳм мегузорад "ду тағироти асосии семантикӣ ба API-ҳои тасодуфии Linux". Пач парчами нави GRND_INSECURE -ро ба занги системаи getrandom() илова мекунад (гарчанде ки Лутомирский онро getentropy(), ки дар glibc бо истифода аз getrandom() бо парчамҳои собит амалӣ мешавад); ин парчам боиси он мегардад, ки занг ҳамеша ҳаҷми маълумоти дархостшударо баргардонад, аммо бидуни кафолати тасодуфӣ будани маълумот. Ядро танҳо тамоми кори аз дасташ меомадаро мекунад, то маълумоти беҳтарини тасодуфиро дар вақти додашуда тавлид кунад. "Эҳтимол беҳтарин коре, ки бояд кард, онро" БАМНАВОР" номидан аст (бехатар) барои пешгирӣ кардани ин API барои чизҳое, ки ба амният ниёз доранд."

Часбҳо инчунин ҳавзи блокро хориҷ мекунанд. Дар айни замон ядро ​​ду ҳавзи маълумоти тасодуфиро нигоҳ медорад, ки яке ба /dev/random ва дигаре ба /dev/urandom мувофиқ аст, тавре ки дар ин мақола тавсиф шудааст мақола 2015. Ҳавзи басташавӣ ҳавзи барои /dev/random; хондан барои он дастгоҳ блок мекунад (дар маънои номи он) то он даме, ки энтропияи "кофӣ" аз система барои қонеъ кардани дархост ҷамъ карда шавад. Агар дар ҳавз энтропия кофӣ набошад, хондани минбаъдаи ин файл низ баста мешавад.

Хориҷ кардани ҳавзи қулф маънои онро дорад, ки хондан аз /dev/random мисли getrandom() бо парчамҳои ба сифр гузошташуда рафтор мекунад (ва парчами GRND_RANDOM-ро ба ҳалқа табдил медиҳад). Вақте ки генератори рақамҳои тасодуфии криптографӣ (CRNG) оғоз карда мешавад, хондан аз /dev/random ва зангҳо ба getrandom(...,0) баста намешавад ва миқдори дархостшудаи маълумоти тасодуфиро бармегардонад.

Лутомирский мегӯяд: "Ман боварӣ дорам, ки ҳавзи бастани Linux кӯҳна шудааст. CRNG Linux натиҷаеро тавлид мекунад, ки барои тавлиди калидҳо кофӣ хуб аст. Ҳавзи басташавӣ аз ҷиҳати моддӣ қавитар нест ва барои дастгирии он инфрасохтори зиёди арзиши шубҳанокро талаб мекунад."

Тағирот бо мақсади таъмини он, ки ба барномаҳои мавҷуда воқеан таъсир нарасонанд ва дар асл, бо интизории тӯлонӣ барои чизҳое ба мисли тавлиди калидҳои GnuPG мушкилот камтар хоҳад буд.

“Ин эпизодҳо набояд ягон барномаи мавҷударо халалдор кунанд. /dev/urandom бетағйир боқӣ мемонад. /dev/random ҳоло ҳам дарҳол ҳангоми боркунӣ блок мекунад, аммо он нисбат ба пештара камтар блок мекунад. getentropy() бо парчамҳои мавҷуда натиҷаеро бармегардонад, ки мисли пештара барои мақсадҳои амалӣ мувофиқ аст."

Лутомирский қайд кард, ки оё ядро ​​​​ба истилоҳ "рақамҳои тасодуфии ҳақиқӣ" -ро пешниҳод мекунад, ки ядрои блоккунӣ бояд то андозае анҷом диҳад, то ҳол саволи кушод аст. Вай факат як сабаби инро мебинад: «риояй ба стандартхои давлатй». Лутомирский пешниҳод кард, ки агар ядро ​​инро таъмин кунад, он бояд тавассути интерфейси комилан дигар анҷом дода шавад ё он бояд ба фазои корбар интиқол дода шавад, ки ба корбар имкон медиҳад, ки намунаҳои ҳодисаҳои хомро, ки метавонанд барои сохтани чунин ҳавзи қулф истифода шаванд, дарёфт кунад.

Стефан Мюллер пешниҳод кард, ки маҷмӯи худ часпакхо барои Linux Generator Number Random (LRNG) (ҳоло версияи 26 бароварда шудааст) метавонад як роҳи пешниҳоди рақамҳои тасодуфии ҳақиқӣ барои барномаҳое бошад, ки ба он ниёз доранд. LRNG "ба Дастурҳои SP800-90B оид ба манбаъҳои энтропия, ки барои тавлиди битҳои тасодуфӣ истифода мешаванд, комилан мувофиқат мекунад" ва онро ҳалли мушкилоти стандартҳои давлатӣ месозад.
Мэттью Гаррет ба истилоҳи "маълумоти тасодуфии ҳақиқӣ" эътироз кард ва қайд кард, ки дастгоҳҳои интихобшуда метавонанд дар асл ба таври кофӣ моделсозӣ карда шаванд, то онҳоро пешгӯӣ кунанд: "мо дар ин ҷо рӯйдодҳои квантиро интихоб намекунем."

Мюллер посух дод, ки ин истилоҳ аз стандарти олмонии AIS 31 барои тавсифи генератори рақамҳои тасодуфӣ гирифта шудааст, ки танҳо "бо ҳамон суръате, ки манбаи садои аслӣ энтропия тавлид мекунад" натиҷа медиҳад.

Тафовутҳои истилоҳот як сӯ, доштани ҳавзи қулф, ки аз ҷониби часбҳои LRNG пешниҳод шудааст, танҳо ба мушкилоти гуногун оварда мерасонад, ҳадди аққал агар он бе имтиёз дастрас бошад.

Чунон ки Лутомирский гуфта буд: “Ин мушкилотро ҳал намекунад. Агар ду корбари гуногун барномаҳои беақлро ба мисли gnupg иҷро кунанд, онҳо танҳо якдигарро холӣ мекунанд. Ман мебинам, ки дар айни замон ду мушкилоти асосӣ бо /dev/random вуҷуд дорад: он ба DoS моил аст (яъне камшавии захираҳо, таъсири бадхоҳона ё чизи шабеҳ) ва азбаски барои истифодаи он имтиёз талаб карда намешавад, он инчунин ба сӯиистифода моил аст. Gnupg нодуруст аст, он як шикасти пурра аст. Агар мо интерфейси нави беимтиёзро илова кунем, ки gnupg ва барномаҳои шабеҳ истифода хоҳанд кард, мо боз аз даст медиҳем."

Мюллер қайд кард, ки иловаи getrandom() ҳоло ба GnuPG имкон медиҳад, ки ин интерфейсро истифода барад, зеро он кафолати зарурии ба кор андохтани ҳавзро медиҳад. Бар асоси мубоҳисаҳо бо таҳиягари GnuPG Вернер Кох, Мюллер чунин мешуморад, ки кафолат ягона сабаби мутолиаи GnuPG дар айни замон аз /dev/random аст. Аммо агар интерфейси беимтиёз вуҷуд дошта бошад, ки ба рад кардани хидмат ҳассос аст (чун /dev/random имрӯз аст), Лутомирский баҳс мекунад, ки он аз ҷониби баъзе барномаҳо нодуруст истифода мешавад.

Теодор Юе Так Ц'о, таҳиягари зерсистемаи рақамҳои тасодуфии Linux, зоҳиран ақидаи худро дар бораи зарурати ҳавзи басташавӣ тағйир додааст. Вай гуфт, ки аз байн бурдани ин ҳавз аз ақидае, ки Linux дорои генератори воқеии рақамҳои тасодуфӣ (TRNG) аст, ба таври муассир халос мешавад: "Ин сафсата нест, зеро маҳз ҳамон чизест, ки *BSD ҳамеша мекард."

Вай инчунин аз он нигарон аст, ки пешниҳоди механизми TRNG танҳо ҳамчун ришват барои таҳиягарони барнома хидмат мекунад ва боварӣ дорад, ки дар асл, бо назардошти намудҳои гуногуни сахтафзор, ки аз ҷониби Linux дастгирӣ мешаванд, кафолати TRNG дар ядро ​​​​имкон нест. Ҳатто қобилияти кор бо таҷҳизот танҳо бо имтиёзҳои реша мушкилотро ҳал намекунад: "Таҳиягарони барномаҳо муайян мекунанд, ки барномаи онҳо ҳамчун реша барои мақсадҳои амниятӣ насб карда мешавад, то ин ягона роҳест, ки шумо метавонед ба рақамҳои тасодуфии "воқеан хуб" дастрасӣ пайдо кунед."

Мюллер пурсид, ки оё Cao аз татбиқи ҳавзи бастабандӣ, ки худаш дер боз пешниҳод карда буд, даст кашидааст. Cao посух дод, ки вай нақша дорад, ки часбҳои Лутомирскийро бигирад ва ба илова кардани интерфейси бастани дубора ба ядро ​​​​муқовимат мекунад.

“Ядро наметавонад кафолат диҳад, ки оё манбаи садо дуруст тавсиф шудааст ё не. Ягона чизе, ки як таҳиягари GPG ё OpenSSL метавонад ба даст орад, эҳсоси норавшан аст, ки TRUERANDOM "беҳтар" аст ва азбаски онҳо амнияти бештар мехоҳанд, онҳо бешубҳа кӯшиш мекунанд, ки онро истифода баранд. Дар як лаҳза он баста мешавад ва вақте ки корбари дигари оқил (шояд мутахассиси дистрибютор) онро ба скрипти init ворид кунад ва системаҳо аз кор бозмемонанд, корбарон танҳо бояд ба худи Линус Торвалдс шикоят кунанд."

Cao инчунин ҷонибдори додани криптографҳо ва онҳое, ки воқеан ба TRNG ниёз доранд, роҳи ҳосили энтропияи худро дар фазои корбар барои истифодаи мувофиқи мувофиқ истифода баранд. Вай мегӯяд, ки ҷамъоварии энтропия раванде нест, ки ядро ​​метавонад дар ҳама сахтафзорҳои мухталифе, ки онро дастгирӣ мекунад, иҷро шавад ва худи ядро ​​миқдори энтропияро аз манбаъҳои гуногун ҳисоб карда наметавонад.

"Ядро набояд сарчашмаҳои садоҳои гуногунро бо ҳам омехта кунад ва он бешубҳа набояд кӯшиш кунад иддао кунад, ки ҳангоми кӯшиши бозӣ кардани як навъи "бозии энтропия" дар CPU-и бениҳоят содда чанд бит энтропия ба даст меояд. меъморӣ барои корбарони истеъмолкунанда. Ҳолатҳои IOT/Embedded, ки ҳама чиз бо як осциллятори устоди ягона мувофиқат намекунад, дар он ҷо ягон дастури CPU барои аз нав фармоиш додан ё тағир додани номи реестр мавҷуд нест ва ғайра."

"Шумо метавонед дар бораи таъмин кардани асбобҳое сӯҳбат кунед, ки ин ҳисобҳоро анҷом медиҳанд, аммо ин корҳо бояд дар сахтафзори ҳар як корбар анҷом дода шаванд, ки барои аксари корбарони дистрибюторҳо амалӣ нест. Агар ин танҳо барои криптографҳо пешбинӣ шуда бошад, пас бигзор он дар фазои корбарии онҳо анҷом дода шавад. Ва биёед GPG, OpenSSL ва ғайраро содда накунем, то ҳама бигӯянд, ки "мо "тасодуфанҳои ҳақиқӣ" -ро мехоҳем ва бо камтарин розӣ нашавем." Мо метавонем дар бораи он сӯҳбат кунем, ки чӣ тавр мо ба криптографҳо интерфейсҳо пешниҳод мекунем, то онҳо тавонанд иттилооти заруриро тавассути дастрасӣ ба манбаъҳои ибтидоии садо, ҷудошуда ва номбаршуда ба даст оранд ва эҳтимолан манбаи садо метавонад худро ба китобхона ё барномаи фазои корбар тасдиқ кунад."

Баъзе баҳсҳо дар бораи чӣ гуна будани чунин интерфейс вуҷуд дошт, зеро масалан, барои баъзе рӯйдодҳо метавонад оқибатҳои амниятӣ дошта бошад. Cao қайд кард, ки рамзҳои сканкунии клавиатура (яъне зарбаҳои клавиатура) ҳамчун як қисми коллексияи энтропия ба ҳавз омехта карда мешаванд: "Баровардани ин ба фазои корбар, ҳатто тавассути занги имтиёзноки система, ҳадди аққал гуфтан оқилона нест." Ин комилан имконпазир аст, ки дигар вақтҳои рӯйдодҳо метавонанд тавассути каналҳои паҳлӯӣ як навъ ихроҷи иттилоотро эҷод кунанд.

Ҳамин тавр, ба назар чунин менамояд, ки мушкили дерина бо зерсистемаи рақамҳои тасодуфии Linux дар роҳи ҳалли он аст. Тағйироте, ки зерсистемаи рақамҳои тасодуфӣ ба наздикӣ аз сар гузаронидааст, воқеан танҳо ба мушкилоти DoS ҳангоми истифодаи он оварда расонд. Ҳоло роҳҳои самараноки ба даст овардани рақамҳои беҳтарини тасодуфӣ вуҷуд доранд, ки ядро ​​метавонад таъмин кунад. Агар TRNG то ҳол дар Linux матлуб бошад, пас ин камбудӣ бояд дар оянда бартараф карда шавад, аммо эҳтимоли зиёд ин дар дохили худи ядро ​​анҷом дода намешавад.

Баъзе рекламаҳо 🙂

Ташаккур ба шумо барои бо мо мондан. Мақолаҳои мо ба шумо маъқуланд? Мехоҳед мундариҷаи ҷолибтарро бубинед? Бо фармоиш додан ё тавсия додан ба дӯстон моро дастгирӣ кунед, абр VPS барои таҳиягарон аз $4.99, аналоги беназири серверҳои сатҳи ибтидоӣ, ки аз ҷониби мо барои шумо ихтироъ шудааст: Тамоми ҳақиқат дар бораи VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps аз $19 ё чӣ гуна мубодила кардани сервер? (бо RAID1 ва RAID10, то 24 ядро ​​ва то 40 ГБ DDR4 дастрас аст).

Dell R730xd дар маркази додаҳои Equinix Tier IV дар Амстердам 2 маротиба арзонтар аст? Танҳо дар ин ҷо 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 ТВ аз $199 дар Нидерландия! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - аз $99! Дар бораи хондан Корпоратсияи инфраструктураро чӣ гуна бояд сохт. синф бо истифодаи серверҳои Dell R730xd E5-2650 v4 ба маблағи 9000 XNUMX евро барои як динор?

Манбаъ: will.com

Илова Эзоҳ