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 үшін Кездейсоқ сандар генераторы (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-ге кепілдік беру мүмкін емес деп санайды. Тіпті түбірлік артықшылықтармен жабдықпен жұмыс істеу мүмкіндігі мәселені шешпейді: «Қолданбаларды әзірлеушілер олардың қолданбасы қауіпсіздік мақсатында түбір ретінде орнатылатынын көрсетеді, осылайша «шынымен жақсы» кездейсоқ сандарға қол жеткізуге болады.»

Мюллер Као өзі көптен бері ұсынған блоктау пулын іске асырудан бас тартты ма деп сұрады. Цао Лутомирскийдің патчтарын алуды жоспарлап отырғанын және ядроға блоктау интерфейсін қосуға белсенді түрде қарсы екенін айтты.

«Ядро шу көзінің дұрыс сипатталғанына ешқандай кепілдік бере алмайды. GPG немесе OpenSSL әзірлеушісі ала алатын жалғыз нәрсе - бұл TRUERANDOM «жақсы» деген түсініксіз сезім және олар көбірек қауіпсіздікті қалайтындықтан, олар оны пайдалануға тырысатыны сөзсіз. Бір сәтте ол бұғатталады және басқа ақылды пайдаланушы (мүмкін таратушы маман) оны init сценарийіне енгізгенде және жүйелер жұмысын тоқтатқанда, пайдаланушылар тек Линус Торвальдстың өзіне шағымдануы керек.

Сондай-ақ, Као криптографтарға және TRNG-ге шын мәнінде мұқтаж адамдарға пайдаланушы кеңістігінде өздерінің энтропиясын жинау әдісін өздері қалағандай пайдалануды қолдайды. Оның айтуынша, энтропияны жинау ядро ​​қолдайтын барлық әртүрлі аппараттық құралдарда орындалатын процесс емес және ядроның өзі әртүрлі көздер беретін энтропия мөлшерін бағалай алмайды.

«Ядро әртүрлі шу көздерін араластырмауы керек және ол өте қарапайым процессорда қандай да бір «твитиялық энтропия ойынын» ойнауға тырысқанда қанша энтропия бит алатынын білуге ​​тырыспауы керек. тұтынушы пайдаланушыларына арналған архитектура. IOT/Енгізілген жағдайлар, барлығы бір басты осциллятормен синхрондалмаған, регистрдің ретін өзгерту немесе атын өзгерту бойынша процессор нұсқауы жоқ және т.б.».

«Сіз осы есептеулерді жасауға тырысатын құралдарды ұсыну туралы айта аласыз, бірақ мұндай әрекеттерді әр пайдаланушының аппараттық құралында жасау керек, бұл таратуды пайдаланушылардың көпшілігі үшін практикалық емес. Егер бұл тек криптографтарға арналған болса, оны олардың пайдаланушы кеңістігінде жасауға рұқсат етіңіз. Және GPG, OpenSSL және т.б. жеңілдетпей-ақ қояйық, сонда бәрі «біз «шынайы кездейсоқтықты» қалаймыз және азырақ нәрсеге келіспейміз» дейтіндей. Біз криптографтарға интерфейстерді қалай беретініміз туралы сөйлесе аламыз, осылайша олар бөлінген және аталған негізгі шу көздеріне қол жеткізу арқылы қажетті ақпаратты ала алады, мүмкін қандай да бір жолмен шу көзі кітапханаға немесе пайдаланушы кеңістігі қолданбасына аутентификация жасай алады.

Мұндай интерфейстің қандай болуы мүмкін екендігі туралы біраз пікірталас болды, мысалы, кейбір оқиғалар үшін қауіпсіздік салдары болуы мүмкін. Као пернетақтаны сканерлеу кодтары (яғни, пернелерді басу) энтропия жинағының бөлігі ретінде пулға араласатынын атап өтті: «Мұны пайдаланушы кеңістігіне, тіпті артықшылықты жүйелік қоңырау арқылы жеткізу, кем дегенде, ақылсыз болар еді». Оқиғаның басқа уақыттары бүйірлік арналар арқылы қандай да бір ақпараттың ағып кетуін тудыруы әбден мүмкін.

Осылайша, Linux кездейсоқ сандар ішкі жүйесінде бұрыннан келе жатқан мәселе шешімін табу жолында тұрған сияқты. Кездейсоқ сандар ішкі жүйесі жақында болған өзгерістер оны пайдалану кезінде тек DoS мәселелеріне әкелді. Енді ядро ​​бере алатын ең жақсы кездейсоқ сандарды алудың тиімді жолдары бар. Егер Linux жүйесінде TRNG әлі де қажет болса, онда бұл кемшілікті болашақта жою қажет болады, бірақ бұл ядроның өзінде жасалмауы мүмкін.

Кейбір жарнамалар 🙂

Бізбен бірге болғандарыңызға рахмет. Сізге біздің мақалалар ұнайды ма? Қызықты мазмұнды көргіңіз келе ме? Тапсырыс беру немесе достарыңызға ұсыну арқылы бізге қолдау көрсетіңіз, әзірлеушілерге арналған бұлтты 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.6 ГГц 14C 64 ГБ DDR4 4x960 ГБ SSD 1 Гбит/с 100 теледидар 199 доллардан бастап Нидерландыда! Dell R420 - 2x E5-2430 2.2 ГГц 6C 128 ГБ DDR3 2x960 ГБ SSD 1 Гбит/с 100 ТБ - 99 доллардан бастап! туралы оқыңыз Инфрақұрылымдық корпорацияны қалай құруға болады. бір тиынға 730 еуро тұратын Dell R5xd E2650-4 v9000 серверлерін қолданатын класс?

Ақпарат көзі: www.habr.com

пікір қалдыру