Linux: blokirovka hovuzini olib tashlash /dev/tasodifiy

/dev/random, kriptografik jihatdan xavfsiz psevdo-tasodifiy raqamlar generatori (CSPRNG) bitta zerikarli muammoga ega: blokirovka qilish. Ushbu maqolada uni qanday hal qilish mumkinligi tushuntiriladi.

So'nggi bir necha oy ichida yadrodagi tasodifiy sonlarni yaratish moslamalari biroz qayta ishlandi, ammo bu quyi tizimdagi muammolar kengroq vaqt davomida hal qilindi. vaqt muddati. Eng oxirgi o'zgarishlar tizim yuklanganda getrandom() tizimi chaqiruvining uzoq vaqt davomida bloklanishiga yo'l qo'ymaslik uchun qilingan, ammo buning asosiy sababi tasodifiy pulning blokirovkalash harakati edi. Yaqinda chiqarilgan yamoq bu hovuzni olib tashlagan bo'lardi va u asosiy yadro tomon yo'l olishi kutilgan edi.

Endi Lutomirski dekabr oyi oxirida yamoqning uchinchi versiyasini nashr etdi. U hissa qo'shadi "Tasodifiy Linux API-lariga ikkita asosiy semantik o'zgarishlar". Yamoq getrandom() tizimi chaqiruviga yangi GRND_INSECURE bayrog'ini qo'shadi (garchi Lutomirskiy uni getentropy() deb ataydi, bu glibc da getrandom() yordamida qattiq bayroqlar bilan amalga oshiriladi); bu bayroq qo'ng'iroqni har doim so'ralgan ma'lumotlar miqdorini qaytarishiga olib keladi, lekin ma'lumotlar tasodifiy ekanligini kafolatlamaydi. Yadro ma'lum bir vaqtda mavjud bo'lgan eng yaxshi tasodifiy ma'lumotlarni ishlab chiqarish uchun qo'lidan kelganini qiladi. "Ehtimol, eng yaxshi narsa buni" XAVFSIZLIK "deyishdir. (xavfsiz) ushbu API xavfsizligini talab qiladigan narsalar uchun ishlatilishini oldini olish uchun."

Yamalar, shuningdek, blokirovka qiluvchi hovuzni ham olib tashlaydi. Hozirgi vaqtda yadro ikkita tasodifiy ma'lumotlar hovuzini saqlaydi, biri /dev/random ga, ikkinchisi esa /dev/urandom ga mos keladi. maqola 2015 yil. Bloklash havzasi /dev/random uchun hovuzdir; so'rovni qondirish uchun tizimdan "etarli" entropiya yig'ilmaguncha, ushbu qurilma uchun o'qishlar bloklanadi (uning nomini anglatadi). Hovuzda etarli entropiya bo'lmasa, ushbu fayldan keyingi o'qishlar ham bloklanadi.

Bloklash hovuzini olib tashlash /dev/random dan o'qish bayroqlar nolga o'rnatilgan getrandom() kabi harakat qilishini anglatadi (va GRND_RANDOM bayrog'ini noopga aylantiradi). Kriptografik tasodifiy sonlar generatori (CRNG) ishga tushirilgandan so'ng, /dev/random dan o'qish va getrandom(...,0) ga qo'ng'iroqlar bloklanmaydi va so'ralgan tasodifiy ma'lumotlar miqdorini qaytaradi.

Lutomirskiy deydi: "Men Linuxni blokirovka qilish havzasi eskirganiga ishonaman. CRNG Linux hatto kalit ishlab chiqarish uchun ham foydalanish uchun etarlicha yaxshi natijalarni ishlab chiqaradi. Bloklash hovuzi hech qanday moddiy ma'noda kuchliroq emas va uni qo'llab-quvvatlash uchun shubhali qiymatga ega ko'plab infratuzilmani talab qiladi.

O'zgarishlar mavjud dasturlarga haqiqatan ham ta'sir qilmasligini ta'minlash maqsadida amalga oshirildi va aslida GnuPG kalitlarini yaratish kabi narsalarni uzoq kutish bilan bog'liq muammolar kamroq bo'ladi.

“Ushbu epizodlar mavjud dasturlarni buzmasligi kerak. /dev/urandom o'zgarishsiz qoladi. /dev/random hali ham yuklashda darhol bloklanadi, lekin u avvalgidan kamroq bloklaydi. getentropy() mavjud bayroqlar bilan oldingi kabi amaliy maqsadlar uchun mos bo'lgan natijani qaytaradi."

Lutomirskiyning ta'kidlashicha, yadro "haqiqiy tasodifiy sonlar" deb ataladigan narsani ta'minlashi kerakmi yoki yo'qmi, bu hali ham ochiq savol, bu blokirovka yadrosi ma'lum darajada qilishi kerak edi. U buning faqat bitta sababini ko'radi: "davlat standartlariga rioya qilish". Lutomirskiy, agar yadro buni ta'minlaydigan bo'lsa, u butunlay boshqa interfeys orqali amalga oshirilishi yoki foydalanuvchi bo'shlig'iga ko'chirilishi kerakligini taklif qildi, bu foydalanuvchiga bunday blokirovka pulini yaratish uchun ishlatilishi mumkin bo'lgan xom hodisa namunalarini olish imkonini beradi.

Stefan Myuller o'zining to'plamini taklif qildi yamalar Linux uchun Random Number Generator (LRNG) (hozirda 26-versiyasi chiqarilgan) unga muhtoj bo'lgan ilovalar uchun haqiqiy tasodifiy raqamlarni taqdim etishning bir usuli bo'lishi mumkin. LRNG "tasodifiy bitlarni yaratish uchun ishlatiladigan entropiya manbalari bo'yicha SP800-90B ko'rsatmalariga to'liq mos keladi", bu uni davlat standartlari muammosini hal qiladi.
Metyu Garret "haqiqiy tasodifiy ma'lumotlar" atamasiga e'tiroz bildirdi va tanlab olingan qurilmalar printsipial jihatdan ularni bashorat qilish uchun etarlicha aniq modellashtirilishi mumkinligini ta'kidladi: "biz bu erda kvant hodisalarini tanlamaymiz".

Myuller javob berdiki, bu atama AIS 31 nemis standartidan kelib chiqqan bo'lib, faqat "asosiy shovqin manbai entropiya hosil qilgani kabi bir xil tezlikda" natija beradigan tasodifiy sonlar generatorini tavsiflaydi.

Terminologik farqlardan tashqari, LRNG yamoqlari tomonidan taklif qilingan qulflash hovuziga ega bo'lish, hech bo'lmaganda, agar unga imtiyozlarsiz kirish mumkin bo'lsa, shunchaki turli xil muammolarga olib keladi.

Lutomirskiy aytganidek: “Bu muammoni hal qilmaydi. Agar ikki xil foydalanuvchi gnupg kabi ahmoq dasturlarni ishga tushirsa, ular bir-birlarini shunchaki quritadilar. Ko'ryapmanki, hozirda /dev/random bilan ikkita asosiy muammo bor: u DoS-ga moyil (ya'ni, resurslarning kamayishi, zararli ta'sir yoki shunga o'xshash narsa) va undan foydalanish uchun hech qanday imtiyoz talab etilmagani uchun u ham suiiste'mol qilishga moyil. Gnupg noto'g'ri, bu butunlay qulash. Agar biz gnupg va shunga o'xshash dasturlar ishlatadigan yangi imtiyozsiz interfeysni qo'shsak, biz yana yo'qotamiz."

Myullerning ta'kidlashicha, getrandom() qo'shilishi endi GnuPG-ga ushbu interfeysdan foydalanish imkonini beradi, chunki u hovuz ishga tushirilganligi uchun zarur kafolatni beradi. GnuPG ishlab chiqaruvchisi Verner Koch bilan suhbatlarga asoslanib, Myuller kafolat GnuPG hozirda to'g'ridan-to'g'ri /dev/random dan o'qishining yagona sababi deb hisoblaydi. Biroq, agar xizmat ko'rsatishni rad etishga moyil bo'lgan imtiyozsiz interfeys mavjud bo'lsa (bu bugungi kunda /dev/random kabi), Lutomirskiy ba'zi ilovalar tomonidan noto'g'ri ishlatilishini ta'kidlaydi.

Teodor Yue Tak Ts'o, Linuxning tasodifiy raqamlar quyi tizimini ishlab chiquvchisi, blokirovkalash havzasi zarurligi haqidagi fikrini o'zgartirgan ko'rinadi. Uning so'zlariga ko'ra, ushbu hovuzni olib tashlash Linuxda haqiqiy tasodifiy sonlar generatoriga (TRNG) ega degan fikrdan samarali xalos bo'ladi: "Bu bema'nilik emas, chunki *BSD har doim shunday qilgan."

U shuningdek, TRNG mexanizmini taqdim etish dastur ishlab chiquvchilari uchun o'lja bo'lib xizmat qilishidan xavotirda va aslida Linux tomonidan qo'llab-quvvatlanadigan har xil turdagi apparatlarni hisobga olsak, yadroda TRNGni kafolatlash mumkin emas deb hisoblaydi. Uskunalar bilan faqat ildiz huquqlari bilan ishlash qobiliyati ham muammoni hal qilmaydi: "Ilova ishlab chiquvchilari xavfsizlik maqsadlari uchun ularning ilovalari ildiz sifatida o'rnatilishini ta'kidlaydilar, shuning uchun siz "haqiqatan ham yaxshi" tasodifiy raqamlarga kirishingiz mumkin bo'lgan yagona usuldir."

Myuller Cao o'zi uzoq vaqtdan beri taklif qilgan blokirovkalash havzasini amalga oshirishdan voz kechdimi yoki yo'qligini so'radi. Cao javob berdi, u Lutomirskiyning yamoqlarini olishni rejalashtirmoqda va yadroga blokirovka interfeysini qo'shishga faol qarshi.

"Yadro shovqin manbai to'g'ri tavsiflanganligi haqida hech qanday kafolat bera olmaydi. GPG yoki OpenSSL dasturchisi olishi mumkin bo'lgan yagona narsa bu TRUERANDOM "yaxshiroq" degan noaniq tuyg'u va ular ko'proq xavfsizlikni xohlayotgani uchun, ular shubhasiz, undan foydalanishga harakat qilishadi. Bir nuqtada u bloklanadi va boshqa aqlli foydalanuvchi (ehtimol, tarqatish bo'yicha mutaxassis) uni init skriptiga kiritsa va tizimlar ishlamay qolsa, foydalanuvchilar Linus Torvaldsning o'ziga shikoyat qilishlari kerak bo'ladi.

Cao, shuningdek, kriptograflar va TRNGga haqiqatan ham muhtoj bo'lganlarga foydalanuvchi makonida o'zlarining entropiyalarini o'zlari xohlagancha ishlatish uchun yo'l berishni yoqlaydi. Uning so'zlariga ko'ra, entropiyani yig'ish yadro tomonidan qo'llab-quvvatlanadigan barcha turli xil qurilmalarda bajariladigan jarayon emas va yadroning o'zi ham turli manbalar tomonidan taqdim etilgan entropiya miqdorini baholay olmaydi.

"Yadro turli xil shovqin manbalarini aralashtirmasligi kerak va u juda oddiy protsessorda qandaydir" twitchy entropiya o'yini" o'ynashga harakat qilganda qancha entropiya bitini olishini bilishga da'vo qilmasligi kerak. isteʼmolchi foydalanuvchilari uchun arxitektura. IOT/Oʻrnatilgan holatlar, hammasi bitta asosiy osilator bilan sinxronlashtirilmagan, reestrni qayta tartiblash yoki nomini oʻzgartirish boʻyicha protsessor koʻrsatmasi yoʻq va hokazo”.

“Siz ushbu hisob-kitoblarni amalga oshirishga harakat qiladigan vositalarni taqdim etish haqida gapirishingiz mumkin, ammo bunday narsalarni har bir foydalanuvchining apparatida qilish kerak, bu ko'pchilik tarqatish foydalanuvchilari uchun amaliy emas. Agar bu faqat kriptograflar uchun mo'ljallangan bo'lsa, bu ularning foydalanuvchi maydonida amalga oshirilsin. Va keling, GPG, OpenSSL va boshqalarni soddalashtirmaylik, shunda hamma "biz "haqiqiy tasodifiylikni" xohlaymiz va kamroq narsaga rozi bo'lmaymiz" deyishadi. Biz kriptograflarga qanday qilib interfeyslarni taqdim etishimiz haqida gaplashishimiz mumkin, shunda ular birlamchi shovqin manbalariga kirish orqali kerakli ma'lumotlarni olishlari mumkin, ajratilgan va nomlangan, va ehtimol, shovqin manbai o'zini kutubxona yoki foydalanuvchi maydoni ilovasida autentifikatsiya qilishi mumkin."

Bunday interfeys qanday ko'rinishi haqida ba'zi munozaralar bo'ldi, chunki masalan, ba'zi hodisalar uchun xavfsizlik oqibatlari bo'lishi mumkin. Cao klaviaturani skanerlash kodlari (ya'ni, tugmachalarni bosish) entropiya to'plamining bir qismi sifatida hovuzga aralashtirilganligini ta'kidladi: "Buni hatto imtiyozli tizim qo'ng'irog'i orqali ham foydalanuvchi maydoniga olib kirish, hech bo'lmaganda aqlsizlik bo'ladi." Hodisalarning boshqa vaqtlari yon kanallar orqali qandaydir ma'lumot oqishini keltirib chiqarishi mumkin.

Shunday qilib, Linuxning tasodifiy raqamlar quyi tizimi bilan bog'liq uzoq vaqtdan beri mavjud muammo yechim yo'lida. Tasodifiy raqamlar quyi tizimi yaqinda sodir bo'lgan o'zgarishlar aslida uni ishlatishda DoS bilan bog'liq muammolarga olib keldi. Endi yadro taqdim etadigan eng yaxshi tasodifiy raqamlarni olishning samarali usullari mavjud. Agar Linuxda TRNG hali ham kerakli bo'lsa, kelajakda bu kamchilikni bartaraf etish kerak bo'ladi, lekin bu, ehtimol, yadroning o'zida amalga oshirilmaydi.

Ba'zi reklamalar 🙂

Biz bilan qolganingiz uchun tashakkur. Bizning maqolalarimiz sizga yoqdimi? Ko'proq qiziqarli tarkibni ko'rishni xohlaysizmi? Buyurtma berish yoki do'stlaringizga tavsiya qilish orqali bizni qo'llab-quvvatlang, 4.99 dollardan boshlab ishlab chiquvchilar uchun bulutli VPS, Siz uchun biz tomonidan ixtiro qilingan boshlang'ich darajadagi serverlarning noyob analogi: VPS (KVM) E5-2697 v3 (6 yadroli) 10GB DDR4 480GB SSD 1Gbps 19 dollardan yoki serverni qanday almashish haqida butun haqiqat? (RAID1 va RAID10, 24 tagacha yadro va 40 Gb gacha DDR4 bilan mavjud).

Amsterdamdagi Equinix Tier IV ma'lumotlar markazida Dell R730xd 2 baravar arzonmi? Faqat shu yerda 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 televizor 199 dollardan Gollandiyada! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - 99 dollardan! Haqida o'qing Infratuzilma korporatsiyasini qanday qurish kerak. bir tiyinga 730 evroga teng Dell R5xd E2650-4 v9000 serverlaridan foydalanish bilan sinf?

Manba: www.habr.com

a Izoh qo'shish