Мэдэгдэж байгаагаар, /dev/random, криптографийн аюулгүй псевдор санамсаргүй тоо үүсгэгч (CSPRNG) нь нэг ядаргаатай асуудалтай тулгардаг: түгжигдэх. Энэ нийтлэлд энэ асуудлыг хэрхэн шийдвэрлэх талаар тайлбарласан болно.
Цөмийн санамсаргүй тоо үүсгэх байгууламжууд сүүлийн хэдэн сарын хугацаанд бага зэрэг шинэчлэгдсэн боловч энэ дэд систем дэх асуудлууд илүү урт хугацаанд шийдэгдсэн. Хамгийн их Эдгээр нь системийг ачаалах үед getrandom() системийн дуудлагыг удаан хугацаагаар хаахаас урьдчилан сэргийлэх зорилготой байсан боловч үндсэн шалтгаан нь санамсаргүй сан хөмрөгийг хаах үйлдэл байсан юм. Саяхны засвар нь энэ цөөрмийг устгах бөгөөд энэ нь үндсэн цөм рүү шилжих төлөвтэй байсан.
Энди Лутомирски 12-р сарын сүүлээр засварын гурав дахь хувилбарыг нийтэлсэн. Энэ нь танилцуулж байна «два основных семантических изменения в случайных API Linux»Уг нөхөөс нь getrandom() системийн дуудлагад шинэ GRND_INSECURE тугийг нэмдэг (хэдийгээр Лутомирский үүнийг getentropy() гэж хэлдэг ч энэ нь glibc дээр getrandom()-ыг тогтмол туг ашиглан хэрэгжүүлдэг); Энэ туг нь дуудлагад хүссэн өгөгдлийн хэмжээг үргэлж буцааж өгөхөд хүргэдэг боловч энэ өгөгдөл нь санамсаргүй гэсэн баталгаагүй. Цөм нь тухайн үед байгаа хамгийн сайн санамсаргүй өгөгдлийг буцаахын тулд чадах бүхнээ хийх болно. "АЮУЛГҮЙ" гэж нэрлэх нь хамгийн зөв зүйл байх." (найдваргүй) энэ API-г аюулгүй байдлыг хангах шаардлагатай зүйлсэд ашиглахаас сэргийлнэ."
Засварууд нь мөн хаах усан санг арилгадаг. Одоогоор цөм нь санамсаргүй хоёр өгөгдлийн санг хадгалж байгаа бөгөөд нэг нь /dev/random, нөгөө нь /dev/urandom-д тусгагдсан байдаг. 2015. Блоклох усан сан нь /dev/random; Энэ төхөөрөмжид унших нь хүсэлтийг хангахын тулд системээс "хангалттай" энтропи цуглуулах хүртэл (түүний нэрээр) блоклох болно. Хэрэв цөөрөмд энтропи байхгүй бол энэ файлаас цааш унших нь мөн хаагдах болно.
Түгжээний санг арилгана гэдэг нь /dev/random-аас унших нь getrandom() шиг тугуудыг тэг болгож (мөн GRND_RANDOM тугийг noop болгон хувиргана) гэсэн үг юм. Криптограф санамсаргүй тоо үүсгэгчийг (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-д өртөмтгий (жишээ нь: нөөц шавхагдах, хортой нөлөөлөл гэх мэт), мөн ашиглахад ямар ч давуу эрх шаарддаггүй тул G-ийг бүрэн ашиглах нь буруу.' Хэрэв бид gnupg болон үүнтэй төстэй програмууд ашиглаж болох шинэ давуу талгүй интерфейс нэмбэл бид дахин алдах болно."
Getrandom()-г нэмснээр одоо GnuPG-д энэ интерфэйсийг ашиглах боломжийг олгоно гэж Мюллер тэмдэглэв. GnuPG хөгжүүлэгч Вернер Кохтой хийсэн яриан дээр үндэслэн Мюллер энэ баталгаа нь GnuPG одоогоор /dev/random-аас шууд уншдаг цорын ганц шалтгаан гэж үзэж байна. Гэсэн хэдий ч, хэрэв /dev/random одоо байгаа шиг) үйлчилгээ үзүүлэхээс татгалзах боломжтой давуу эрхгүй интерфейс байгаа бол Лутомирскийн хэлснээр зарим программ үүнийг буруугаар ашиглах болно.
Теодор Цао (Theodore Yue Tak Ts’o), разработчик подсистемы случайных чисел Linux, по-видимому, изменил свое мнение по поводу необходимости блокирующего пула. Он сказал, что удаление этого пула позволит эффективно избавиться от идеи, что Linux имеет настоящий генератор случайных чисел (TRNG): "Энэ бол дэмий зүйл биш, учир нь *BSD үргэлж ийм зүйл хийдэг байсан."
Он также обеспокоен тем, что предоставление механизма TRNG будет просто служить в качестве приманки для разработчиков приложений и считает, что на самом деле, учитывая различные типы аппаратного обеспечения, поддерживаемого Linux, невозможно гарантировать TRNG в ядре. Проблему не решит даже возможность работы с оборудование только на основе root-привилегий: "Апп хөгжүүлэгчид өөрсдийн програмыг аюулгүй байдлын үүднээс root хэлбэрээр суулгахыг шаарддаг, учир нь энэ нь та "үнэхээр сайн" санамсаргүй тоонуудад хандах цорын ганц арга зам юм."
Мюллер Као аль эрт санал болгож байсан хаах цөөрмийн хэрэгжилтээс татгалзсан эсэхийг асуув. Цао Лутомирскийн засваруудыг авахаар төлөвлөж байгаа бөгөөд блоклох интерфейсийг цөмд буцааж оруулахыг идэвхтэй эсэргүүцэж байна гэж хариулав.
"Цөм нь дуу чимээний эх үүсвэрийг зөв тодорхойлсон эсэх талаар ямар ч баталгаа өгч чадахгүй. GPG эсвэл OpenSSL хөгжүүлэгчийн авч чадах цорын ганц зүйл бол TRUERANDOM нь "илүү сайн" гэсэн тодорхой бус мэдрэмж бөгөөд тэд илүү сайн хамгаалалтыг хүсч байгаа тул тэд үүнийг ашиглахыг оролдох нь гарцаагүй. Хэзээ нэгэн цагт энэ нь хаагдаж, бусад ухаалаг хэрэглэгч үүнийг түгээлтийн системд (магадгүй) оруулахыг зогсоож магадгүй юм. ажиллаж байгаа тул хэрэглэгчдэд гомдоллох цорын ганц зүйл бол Линус Торвалдс өөрөө юм."
Цао мөн криптографчид болон TRNG-г үнэхээр хэрэгтэй байгаа хүмүүст хэрэглэгчийн орон зайд өөрсдийн хэрэгцээнд зориулж өөрийн энтропийг цуглуулах арга замыг санал болгодог. Тэрээр энтропи цуглуулах нь цөм нь дэмжигдсэн бүх техник хангамж дээр хийгддэг процесс биш бөгөөд цөм өөрөө янз бүрийн эх сурвалжаас өгсөн энтропийн хэмжээг тооцоолж чадахгүй гэж тэрээр үзэж байна.
"Цөм нь янз бүрийн дуу чимээний эх үүсвэрүүдийг хооронд нь хольж болохгүй, мөн IOT/Embedded хэрэглэгчийн тохиолдлуудад зориулсан инээдтэй энгийн CPU-ийн архитектур дээр "хүчтэй энтропи тоглоом" тоглохыг оролдох үед, бүх зүйл нэг мастер осциллятортой синхрончлогдоогүй үед, CPU-ийн нэрийг дахин бүртгэх, бүртгэх гэх мэт тохиолдолд хэдэн бит энтропи авдагийг мэдэх гэж оролдох ёсгүй."
"Бид эдгээр тооцооллыг хийх гэж оролддог хэрэгслүүдээр хангах талаар ярьж болно, гэхдээ ийм зүйлсийг хэрэглэгч бүрийн техник хангамж дээр хийх ёстой бөгөөд энэ нь ихэнх түгээлтийн хэрэглэгчдэд боломжгүй юм. Хэрэв энэ нь зөвхөн криптографчдад зориулагдсан бол үүнийг тэдний хэрэглэгчийн орон зайд хийцгээе. Мөн GPG, OpenSSL гэх мэтийг хялбарчлахгүй байцгаая, тэгвэл хүн бүр "Бид санамсаргүй байдлаар "Бид ялахыг хүсч байна" гэж хэлэх болно. Бид криптографчдад интерфэйсийг хэрхэн хангаж өгөх талаар ярилцаж болно, ингэснээр тэд тусгаарлагдсан, нэрлэсэн дуу чимээний үндсэн эх үүсвэрүүдэд хандаж, ямар нэгэн байдлаар дуу чимээний эх үүсвэрийг хэрэглэгчийн орон зайн номын сан эсвэл програмд баталгаажуулах боломжийг олгох замаар шаардлагатай мэдээллийг олж авах боломжтой."
Зарим үйл явдал, жишээлбэл, аюулгүй байдлын үр дагавартай байж болох тул ийм интерфэйс хэрхэн харагдах талаар зарим нэг хэлэлцүүлэг байсан. Цао гарын скан кодыг (жишээ нь, товчлуурын даралтыг) энтропи цуглуулгын нэг хэсэг болгон нэгтгэдэг гэж тэмдэглэжээ: "Үүнийг системийн дуудлагаар дамжуулан хэрэглэгчийн орон зайд шилжүүлэх нь наад зах нь ухаалаг бус байх болно." Бусад үйл явдлын цаг хугацаа нь хажуугийн сувгийн мэдээллийн алдагдлыг үүсгэж болзошгүй юм.
Таким образом, возникает ощущение, что давняя проблема подсистемы случайных чисел Linux находится на пути к решению. Изменения, которые подсистема случайных чисел претерпела в последнее время, фактически приводили только к проблемам DoS в процессе ее использования. Теперь же появились эффективные способы получить наилучшие случайные числа, какие только может предоставить ядро. Если же TRNG все еще желателен для Linux, то этот недостаток нужно будет устранить в будущем, но, скорее всего, это не будет делаться внутри самого ядра.
Зарим зар 🙂
Бидэнтэй хамт байсанд баярлалаа. Манай нийтлэл танд таалагдаж байна уу? Илүү сонирхолтой контент үзэхийг хүсч байна уу? Захиалга өгөх эсвэл найзууддаа санал болгох замаар биднийг дэмжээрэй, , Бидний танд зориулж бүтээсэн анхны түвшний серверүүдийн өвөрмөц аналоги: (RAID1 болон RAID10, 24 хүртэлх цөм, 40 ГБ хүртэл DDR4-тэй байх боломжтой).
Амстердам дахь Equinix Tier IV дата төвд Dell R730xd 2 дахин хямд байна уу? Зөвхөн энд Нидерландад! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - 99 доллараас! тухай уншина уу
Эх сурвалж: www.habr.com
