/dev/random, криптографиялық қауіпсіз псевдокездейсоқ сандар генераторы (CSPRNG) бір тітіркендіргіш проблемасы бар екені белгілі: блоктау. Бұл мақала оны қалай шешуге болатынын түсіндіреді.
Соңғы бірнеше ай ішінде ядродағы кездейсоқ сандарды генерациялау құралдары аздап қайта өңделді, бірақ бұл ішкі жүйедегі мәселелер кеңірек жұмыс барысында шешілді.
Энди Лутомирски патчтың үшінші нұсқасын желтоқсанның соңында жариялады. Ол үлес қосады «кездейсоқ Linux API интерфейстеріне екі негізгі семантикалық өзгерістер». Патч getrandom() жүйелік шақыруына жаңа GRND_INSECURE жалауын қосады (бірақ Лутомирский оны getentropy() деп атайды, ол glibc жүйесінде getrandom() арқылы бекітілген жалаушалармен жүзеге асырылады); бұл жалауша қоңырауды әрқашан сұралған деректер көлемін қайтаруға әкеледі, бірақ деректердің кездейсоқ екеніне кепілдік бермейді. Ядро берілген уақытта ең жақсы кездейсоқ деректерді шығару үшін бар күш-жігерін салады. «Ең жақсысы оны «ҚАУІПСІЗ» деп атаған болар. (қауіпсіз) осы API интерфейсін қауіпсіздікті қажет ететін нәрселер үшін пайдалануды болдырмау үшін."
Патчтар блоктау пулын да жояды. Қазіргі уақытта ядро екі кездейсоқ деректер пулын сақтайды, біреуі /dev/random, екіншісі осы бөлімде сипатталғандай /dev/urandom.
Құлыптау пулын жою /dev/random ішінен оқу жалаушалары нөлге орнатылған getrandom() сияқты әрекет ететінін білдіреді (және GRND_RANDOM жалауын циклге айналдырады). Криптографиялық кездейсоқ сандар генераторы (CRNG) инициализацияланғаннан кейін, /dev/random ішінен оқу және getrandom(...,0) шақырулары блокталмайды және кездейсоқ деректердің сұралған көлемін қайтарады.
Лутомирский былай дейді: «Мен Linux блоктау пулы ескірген деп есептеймін. CRNG Linux тіпті кілттерді генерациялау үшін пайдалануға жеткілікті жақсы нәтиже шығарады. Блоктау пулы ешқандай материалдық мағынада күшті емес және оны қолдау үшін күмәнді құндылығы бар көптеген инфрақұрылымды қажет етеді ».
Өзгерістер қолданыстағы бағдарламалардың шынымен әсер етпеуін қамтамасыз ету мақсатында жасалды және іс жүзінде GnuPG кілтін құру сияқты нәрселерді ұзақ күтумен байланысты проблемалар аз болады.
«Бұл эпизодтар бұрыннан бар бағдарламаларды бұзбауы керек. /dev/urandom өзгеріссіз қалады. /dev/random әлі де жүктелген кезде бірден блоктайды, бірақ ол бұрынғыдан азырақ блоктайды. getentropy() бар жалаушалармен бұрынғыдай практикалық мақсаттарға қолайлы нәтиже береді.
Лутомирский ядроның «шын кездейсоқ сандарды» қамтамасыз етуі керек пе, бұл әлі де ашық сұрақ екенін атап өтті, бұл блоктау ядросы белгілі бір дәрежеде істеуі керек еді. Ол мұның бір ғана себебін көреді: «мемлекеттік стандарттарды сақтау». Лутомирский егер ядро мұны қамтамасыз ететін болса, оны мүлдем басқа интерфейс арқылы жасау керек немесе оны пайдаланушы кеңістігіне жылжыту керек, бұл пайдаланушыға осындай құлыптау пулын жасау үшін пайдалануға болатын шикі оқиға үлгілерін алуға мүмкіндік береді.
Стефан Мюллер өз жиынтығын ұсынды
Мэттью Гаррет «шынайы кездейсоқ деректер» терминіне қарсылық білдіріп, іріктелген құрылғыларды болжау үшін жеткілікті түрде модельдеуге болатынын атап өтті: «біз мұнда кванттық оқиғаларды таңдамаймыз».
Мюллер бұл термин «негізгі шу көзі энтропияны тудыратындай жылдамдықпен» нәтиже беретін кездейсоқ сандар генераторын сипаттау үшін неміс стандартынан шыққан 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 әлі де қажет болса, онда бұл кемшілікті болашақта жою қажет болады, бірақ бұл ядроның өзінде жасалмауы мүмкін.
Кейбір жарнамалар 🙂
Бізбен бірге болғандарыңызға рахмет. Сізге біздің мақалалар ұнайды ма? Қызықты мазмұнды көргіңіз келе ме? Тапсырыс беру немесе достарыңызға ұсыну арқылы бізге қолдау көрсетіңіз,
Dell R730xd Амстердамдағы Equinix Tier IV деректер орталығында 2 есе арзан ба? Тек осында
Ақпарат көзі: www.habr.com