Linux. կողպեքի լողավազանի հեռացում /dev/random

/dev/random, գաղտնագրորեն ապահով կեղծ պատահական թվերի գեներատոր (CSPRNG), հայտնի է, որ ունի մեկ անհանգստացնող խնդիր՝ արգելափակումը: Այս հոդվածը բացատրում է, թե ինչպես կարող եք լուծել այն:

Վերջին մի քանի ամիսների ընթացքում միջուկում պատահական թվերի ստեղծման հնարավորությունները փոքր-ինչ վերամշակվել են, սակայն այս ենթահամակարգի խնդիրները լուծվել են ավելի լայն ժամանակաշրջանի ընթացքում: ժամանակային շրջանակ. Առավելագույնը վերջին փոփոխությունները արվել են՝ կանխելու getrandom() համակարգի զանգի արգելափակումը երկար ժամանակ, երբ համակարգը բեռնվում է, բայց դրա հիմքում ընկած պատճառը պատահական լողավազանի արգելափակման պահվածքն էր: Վերջին կարկատումը կհեռացներ այս լողավազանը և ակնկալվում էր, որ այն կուղղվի դեպի հիմնական միջուկը:

Էնդի Լուտոմիրսկին դեկտեմբերի վերջին հրապարակեց կարկատան երրորդ տարբերակը։ Նա նպաստում է «Երկու հիմնական իմաստային փոփոխություն պատահական Linux API-ներում». Patch-ը նոր GRND_INSECURE դրոշ է ավելացնում getrandom() համակարգի կանչին (չնայած Լուտոմիրսկին այն անվանում է 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 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 միջուկում: Նույնիսկ միայն արմատային արտոնություններով սարքավորումների հետ աշխատելու ունակությունը չի լուծի խնդիրը. «Հավելված մշակողները նշում են, որ իրենց հավելվածը տեղադրվի որպես «root»՝ անվտանգության նպատակներով, այնպես որ միայն այդպես կարող եք մուտք գործել «իսկապես լավ» պատահական թվեր։

Մյուլլերը հարցրեց, թե արդյոք Կաոն հրաժարվել է արգելափակման լողավազանի իրականացումից, որն ինքն էր վաղուց առաջարկել: Կաոն պատասխանեց, որ մտադիր է վերցնել Լուտոմիրսկու կարկատանները և ակտիվորեն դեմ է միջուկին արգելափակող միջերես ավելացնելուն:

«Միջուկը չի կարող որևէ երաշխիք տալ, թե արդյոք աղմուկի աղբյուրը պատշաճ կերպով բնութագրվել է: Միակ բանը, ինչ կարող է ստանալ GPG կամ OpenSSL ծրագրավորողը, անորոշ զգացումն է, որ TRUERANDOM-ը «ավելի լավն է», և քանի որ նրանք ավելի շատ անվտանգություն են ուզում, անկասկած կփորձեն օգտագործել այն։ Ինչ-որ պահի այն կարգելափակվի, և երբ ինչ-որ այլ խելացի օգտատեր (գուցե բաշխման մասնագետ) այն մտցնի init սկրիպտի մեջ, և համակարգերը դադարեն աշխատել, օգտվողները ստիպված կլինեն միայն բողոքել հենց Լինուս Տորվալդսին»:

Կաոն նաև պաշտպանում է կրիպտոգրաֆներին և նրանց, ովքեր իրականում TRNG-ի կարիքն ունեն, օգտատերերի տարածքում սեփական էնտրոպիան հավաքելու միջոց տրամադրել, որպեսզի օգտագործեն այնպես, ինչպես իրենք են հարմար գտնում: Նա ասում է, որ էնտրոպիան հավաքելը գործընթաց չէ, որը կարող է իրականացվել միջուկի կողմից այն բոլոր տարբեր սարքավորումների վրա, որոնք նա աջակցում է, ոչ էլ միջուկն ինքը կարող է գնահատել տարբեր աղբյուրների կողմից տրամադրված էնտրոպիայի քանակը:

«Միջուկը չպետք է իրար խառնի աղմուկի տարբեր աղբյուրներ, և, իհարկե, չպետք է փորձի պնդել, թե քանի բիթ էնտրոպիա է ստանում, երբ փորձում է խաղալ ինչ-որ «ցնցող էնտրոպիայի խաղ» սարսափելի պարզ պրոցեսորի վրա: ճարտարապետություն սպառողների օգտագործողների համար IOT/ Ներկառուցված դեպքեր, երբ ամեն ինչ համաժամանակյա չէ մեկ հիմնական տատանվողի հետ, որտեղ չկա պրոցեսորի հրահանգ՝ ռեգիստրը վերադասավորելու կամ վերանվանելու համար և այլն»։

«Դուք կարող եք խոսել գործիքների տրամադրման մասին, որոնք փորձում են կատարել այս հաշվարկները, բայց նման բաները պետք է արվեն յուրաքանչյուր օգտագործողի սարքավորման վրա, ինչը պարզապես գործնական չէ բաշխման օգտվողների մեծ մասի համար: Եթե ​​սա նախատեսված է միայն կրիպտոգրաֆիստների համար, ապա թող դա արվի նրանց օգտատերերի տարածքում։ Եվ եկեք չպարզեցնենք GPG-ն, OpenSSL-ը և այլն, որպեսզի բոլորն ասեն՝ «մենք ուզում ենք «իսկական պատահականություն» և չբավարարվենք պակասով»: Մենք կարող ենք խոսել այն մասին, թե ինչպես ենք մենք ինտերֆեյս տրամադրում կրիպտոգրաֆիստներին, որպեսզի նրանք կարողանան ստանալ իրենց անհրաժեշտ տեղեկատվությունը՝ մուտք գործելով աղմուկի առաջնային աղբյուրներ՝ առանձնացված և անվանված, և, հնարավոր է, ինչ-որ կերպ աղմուկի աղբյուրը կարողանա նույնականացնել իրեն գրադարանի կամ օգտագործողի տարածքի հավելվածում»:

Քննարկումներ եղան այն մասին, թե ինչպիսին կարող է լինել նման ինտերֆեյսը, քանի որ, օրինակ, կարող են լինել անվտանգության հետևանքներ որոշ իրադարձությունների համար: Կաոն նշել է, որ ստեղնաշարի սկանավորման կոդերը (այսինքն՝ ստեղնաշարի սեղմումները) խառնվում են լողավազանի մեջ՝ որպես էնտրոպիայի հավաքածուի մաս. Միանգամայն հնարավոր է, որ իրադարձությունների այլ ժամկետները կարող են ինչ-որ տեղեկատվության արտահոսք առաջացնել կողմնակի ուղիներով:

Այսպիսով, թվում է, թե Linux-ի պատահական թվերի ենթահամակարգի հետ կապված վաղեմի խնդիրը լուծման ճանապարհին է: Փոփոխությունները, որոնց ենթարկվել է պատահական թվերի ենթահամակարգը, իրականում միայն այն օգտագործելիս հանգեցրել են DoS խնդիրների: Այժմ կան արդյունավետ ուղիներ՝ միջուկը տրամադրելու լավագույն պատահական թվերը ստանալու համար: Եթե ​​TRNG-ը դեռ ցանկալի է Linux-ում, ապա այս թերությունը պետք է լուծվի ապագայում, բայց, ամենայն հավանականությամբ, դա չի արվի հենց միջուկում:

Մի քանի գովազդ 🙂

Շնորհակալություն մեզ հետ մնալու համար: Ձեզ դուր են գալիս մեր հոդվածները: Ցանկանու՞մ եք տեսնել ավելի հետաքրքիր բովանդակություն: Աջակցեք մեզ՝ պատվիրելով կամ խորհուրդ տալով ընկերներին, ամպային VPS մշակողների համար $4.99-ից, մուտքի մակարդակի սերվերների եզակի անալոգ, որը հորինվել է մեր կողմից ձեզ համար. Ամբողջ ճշմարտությունը VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps 19 դոլարից կամ ինչպես կիսել սերվերը: (հասանելի է RAID1 և RAID10-ով, մինչև 24 միջուկով և մինչև 40 ԳԲ DDR4):

Dell R730xd 2 անգամ ավելի էժան Ամստերդամի Equinix Tier IV տվյալների կենտրոնում: Միայն այստեղ 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

Добавить комментарий