Linux: кулпу бассейнин алып салуу /dev/random

/dev/random, криптографиялык жактан коопсуз псевдо-кокус сандар генераторунун (CSPRNG) бир тажатма көйгөйү бар экени белгилүү: бөгөт коюу. Бул макалада аны кантип чечсе болорун түшүндүрөт.

Акыркы бир нече айдын ичинде ядродогу кокус сандарды генерациялоочу түзүлүштөр бир аз кайра иштетилди, бирок бул подсистемадагы көйгөйлөр кененирээк убакыттын ичинде чечилди. убакыт алкагы. Көпчүлүк акыркы өзгөрүүлөр система жүктөлгөндө getrandom() тутумунун чалуусунун узак убакытка бөгөттөлүшүнө жол бербөө үчүн жасалган, бирок мунун негизги себеби кокустук пулдун бөгөттөө аракети болгон. Жакында жасалган жамаачы бул бассейнди алып салмак жана ал негизги өзөктү көздөй бет алат деп күтүлгөн.

Энди Лутомирски декабрдын аягында патчтын үчүнчү версиясын жарыялады. Ал салым кошот "кокус Linux API'лерине эки негизги семантикалык өзгөртүү". Патч getrandom() тутумунун чакыруусуна жаңы GRND_INSECURE желекчесин кошот (бирок Лутомирский аны 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 үчүн Random Number Generator (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 Лутомирскийдин патчтарын алууну пландап жатканын жана ядрого блокировкалоочу интерфейсти кошууга активдүү каршы экенин айтты.

"Ядро ызы-чуу булагы туура мүнөздөлгөн-болбогонуна эч кандай кепилдик бере албайт. GPG же OpenSSL иштеп чыгуучусу ала турган жалгыз нерсе - TRUERANDOM "жакшы" деген бүдөмүк сезим жана алар көбүрөөк коопсуздукту каалагандыктан, аны колдонууга аракет кылышы шексиз. Кайсы бир убакта ал бөгөттөлөт жана башка акылдуу колдонуучу (балким, бөлүштүрүүчү адис) аны init скриптине киргизгенде жана системалар иштебей калганда, колдонуучулар Линус Торвальдстын өзүнө гана арызданышы керек болот."

Као ошондой эле криптографтарга жана чындыгында TRNGге муктаж болгондорго колдонуучу мейкиндигинде өздөрүнүн энтропиясын чогултуунун жолун өздөрү каалагандай колдонууну жактайт. Анын айтымында, энтропияны чогултуу ядро ​​тарабынан колдоого алынган ар кандай жабдыктарда аткарыла турган процесс эмес жана ядро ​​өзү ар кандай булактар ​​тарабынан берилген энтропиянын көлөмүн эсептей албайт.

"Ядро ар кандай ызы-чуу булактарын аралаштырбашы керек жана ал абдан жөнөкөй керектөөчүгө кандайдыр бир" ийкемдүү энтропия оюнун" ойноого аракет кылып жатканда, канча бит энтропия алып жатканын билүүгө аракет кылбашы керек. CPU архитектурасы." IOT/Кондурулган учурлар, баары бир башкы осциллятор менен синхрондобой калган, реестрди иретке келтирүү же атын өзгөртүү боюнча CPU көрсөтмөсү жок ж.б."

«Сиз бул эсептөөлөрдү жасоого аракет кылган инструменттерди берүү жөнүндө сөз кыла аласыз, бирок мындай нерселерди ар бир колдонуучунун аппараттык камсыздоосунда жасоо керек, бул көпчүлүк бөлүштүрүү колдонуучулары үчүн практикалык эмес. Эгер бул криптографтарга гана арналган болсо, анда бул алардын колдонуучу мейкиндигинде жасалсын. Ал эми GPG, OpenSSL ж.б. жөнөкөйлөтпөйлү, баары "биз "чыныгы кокустук" каалайбыз жана азыраак нерсеге макул болбойбуз" деп айтышат. Биз криптографтарга интерфейстерди кантип берерибиз жөнүндө сүйлөшсөк болот, алар бөлүнгөн жана аталган негизги ызы-чуу булактарына жетүү аркылуу керектүү маалыматты ала алышат, балким, кандайдыр бир жол менен ызы-чуу булагы өзүн китепканага же колдонуучу мейкиндигине тиркемеде аутентификациялай алат."

Мындай интерфейс кандай болушу мүмкүн экендиги жөнүндө бир аз талкуу болду, анткени, мисалы, кээ бир окуялар үчүн коопсуздук кесепеттери болушу мүмкүн. Као клавиатуранын скандоочу коддору (б.а. баскыч басуулар) энтропия чогултуунун бир бөлүгү катары бассейнге аралашканын белгиледи: "Муну колдонуучу мейкиндигине, атүгүл артыкчылыктуу тутум чалуу аркылуу алып келүү, жок дегенде акылсыздык болмок." Окуялардын башка убакыттары каптал каналдар аркылуу кандайдыр бир маалыматтын агып чыгышын жаратышы толук мүмкүн.

Ошентип, Linux'тун кокус сандар подсистемасы менен көптөн бери чечилбей келе жаткан көйгөй чечилүүдө. Кокус сандар подсистемасы жакында кабылган өзгөрүүлөр аны колдонууда DoS көйгөйлөрүнө гана алып келди. Эми ядро ​​бере турган эң жакшы кокус сандарды алуунун эффективдүү жолдору бар. Эгерде TRNG дагы эле Linux'та каалаган болсо, анда бул кемчиликти келечекте чечүү керек болот, бирок, балким, бул ядронун өзүндө жасалбайт.

Кээ бир жарнамалар 🙂

Биз менен болгонуңуз үчүн рахмат. Биздин макалалар сизге жагабы? Көбүрөөк кызыктуу мазмунду көргүңүз келеби? Буйрутма берүү же досторуңузга сунуштоо менен бизди колдоңуз, иштеп чыгуучулар үчүн булут VPS 4.99 доллардан, биз сиз үчүн ойлоп тапкан баштапкы деңгээлдеги серверлердин уникалдуу аналогу: VPS (KVM) E5-2697 v3 (6 өзөктүү) 10 ГБ DDR4 480 ГБ SSD 1 Гбит/с 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 доллардан! Жөнүндө окуу Инфраструктураны кантип куруу керек. бир тыйынга 730 евро турган Dell R5xd E2650-4 v9000 серверлерин колдонуу менен класс?

Source: www.habr.com

Комментарий кошуу