Ինչպես գիտեք, /dev/random-ը, որը կրիպտոգրաֆիկորեն անվտանգ կեղծ-պատահական թվերի գեներատոր է (CSPRNG), ունի մեկ տհաճ խնդիր՝ կողպումը: Այս հոդվածը բացատրում է, թե ինչպես լուծել այն:
Վերջին մի քանի ամիսների ընթացքում միջուկի պատահական թվերի գեներացման հնարավորությունները փոքր-ինչ վերանայվել են, սակայն այս ենթահամակարգի խնդիրները լուծվել են ավելի երկար ժամանակահատվածում։ Ամենաշատը արվել են համակարգի բեռնման ժամանակ getrandom() համակարգային կանչի երկար ժամանակ արգելափակումը կանխելու համար, սակայն դրա հիմնական պատճառը արգելափակող պատահական միավորի վարքագիծն էր։ Վերջերս կատարված թարմացումը կհեռացներ այս միավորը, և կարելի էր ակնկալել, որ այն կհասնի նաև հիմնական միջուկ։
Էնդի Լուտոմիրսկին դեկտեմբերի վերջին հրապարակեց թարմացման երրորդ տարբերակը։ Այն ներկայացնում է «Երկու հիմնական իմաստաբանական փոփոխություններ պատահական 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 սպառել է իր օգտակարությունը։ 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-ի առկայությունը միջուկում։ Նույնիսկ միայն root արտոնություններով սարքավորումը աշխատեցնելը չի լուծի խնդիրը։ «Ծրագրերի մշակողները նշում են, որ իրենց ծրագիրը պետք է տեղադրվի որպես root՝ անվտանգության նկատառումներից ելնելով, քանի որ դա միակ միջոցն է «իսկապես լավ» պատահական թվերին մուտք գործելու համար»։
Մյուլլերը հարցրեց, թե արդյոք Կաոն հրաժարվել է վաղուց առաջարկած արգելափակող խմբի ներդրումից։ Կաոն պատասխանեց, որ պլանավորում է վերցնել Լուտոմիրսկու թարմացումները և ակտիվորեն դեմ է արգելափակող ինտերֆեյսը միջուկին վերադարձնելուն։
«Միջուկը չի կարող որևէ երաշխիք տալ այն մասին, թե արդյոք աղմուկի աղբյուրը ճիշտ է բնութագրվել։ GPG կամ OpenSSL մշակողը կարող է միայն անորոշ զգացողություն ունենալ, որ TRUERANDOM-ը «ավելի լավն է», և քանի որ նրանք ցանկանում են ավելի շատ անվտանգություն, անկասկած կփորձեն օգտագործել այն։ Ինչ-որ պահի այն կարգելափակվի, և երբ որևէ այլ խելացի օգտատեր (գուցե բաշխման թողարկման ինժեներ) այն կտեղադրի init սկրիպտի մեջ, և համակարգերը կդադարեն աշխատել, օգտատերերի համար միակ բանը, որին կարող են բողոքել, Լինուս Տորվալդսն է»։
Ցաոն նաև պաշտպանում է կրիպտոգրաֆներին և նրանց, ովքեր իսկապես կարիք ունեն TRNG-ի, տրամադրել միջոց՝ օգտատիրոջ տարածքում իրենց սեփական էնտրոպիան հավաքելու և իրենց հայեցողությամբ օգտագործելու համար: Նա ասում է, որ էնտրոպիան հավաքելը այն չէ, ինչ միջուկը կարող է անել իր կողմից աջակցվող բոլոր տարբեր սարքավորումների վրա, և ոչ էլ միջուկն ինքը կարող է գնահատել տարբեր աղբյուրների կողմից տրամադրվող էնտրոպիայի քանակը:
«Կիրճը չպետք է խառնի տարբեր աղմուկի աղբյուրներ, և այն, անշուշտ, չպետք է փորձի պնդել, որ գիտի, թե քանի բիթ է ստանում էնտրոպիա, երբ փորձում է խաղալ որևէ «կտրուկ էնտրոպիայի խաղ» ծիծաղելիորեն պարզ IOT/ներկառուցված օգտատիրոջ դեպքի CPU ճարտարապետության վրա, որտեղ ամեն ինչ համաժամեցված չէ մեկ գլխավոր օսցիլյատորի հետ, որտեղ չկա CPU հրահանգ՝ ռեգիստրը վերադասավորելու կամ վերանվանելու և այլնի համար»։
«Մենք կարող ենք խոսել այս հաշվարկները կատարելու համար գործիքներ տրամադրելու մասին, բայց այդպիսի բան պետք է արվի յուրաքանչյուր օգտատիրոջ սարքավորման վրա, ինչը պարզապես անիրագործելի է բաշխման օգտատերերի մեծ մասի համար: Եթե դա միայն կրիպտոգրաֆների համար է, ապա թող դա արվի նրանց օգտատիրոջ տարածքում: Եվ եկեք չնսեմացնենք GPG-ն, OpenSSL-ը և այլն, որպեսզի բոլորը ասեն. «Մենք ուզում ենք «իրական պատահականություն» և չենք բավարարվի ավելի քիչով»: Մենք կարող ենք խոսել այն մասին, թե ինչպես ենք մենք ինտերֆեյսներ տրամադրում կրիպտոգրաֆներին, որպեսզի նրանք կարողանան ստանալ անհրաժեշտ տեղեկատվությունը` մուտք ունենալով հիմքում ընկած աղմուկի աղբյուրներին, որոնք բաժանված և անվանված են, և գուցե ինչ-որ կերպ աղմուկի աղբյուրը կարողանա ինքնությունը հաստատել օգտատիրոջ տարածքի գրադարանում կամ հավելվածում»:
Որոշ քննարկումներ եղան այն մասին, թե ինչպիսին կարող է լինել նման ինտերֆեյսը, քանի որ որոշ իրադարձություններ, օրինակ, կարող են անվտանգության հետ կապված հետևանքներ ունենալ: Ցաոն նշեց, որ ստեղնաշարի սկանավորման կոդերը (այսինքն՝ ստեղների սեղմումները) խառնվում են լողավազանի մեջ՝ որպես էնտրոպիայի հավաքագրման մաս. «Դա օգտատիրոջ տարածքում տեղադրելը, նույնիսկ արտոնյալ համակարգային կանչի միջոցով, մեղմ ասած, անխոհեմ կլինի»: Հնարավոր է, որ այլ իրադարձությունների ժամանակացույցերը նույնպես կարող են առաջացնել որոշակի տեսակի կողային ալիքային տեղեկատվության արտահոսք:
Այսպիսով, թվում է, թե պատահական թվերի ենթահամակարգի երկարատև խնդիրը Linux լուծման ճանապարհին է։ Վերջերս պատահական թվերի ենթահամակարգում տեղի ունեցած փոփոխությունները հանգեցրել են միայն DoS խնդիրների դրա օգտագործման ընթացքում։ Այժմ, սակայն, կան արդյունավետ եղանակներ՝ ստանալու համար միջուկի կողմից տրամադրվող լավագույն պատահական թվերը։ Եթե TRNG-ն դեռևս ցանկալի է Linux, ապա այս թերությունը պետք է լուծվի ապագայում, բայց, ամենայն հավանականությամբ, դա չի արվի հենց միջուկի ներսում։
Մի քանի գովազդ 🙂
Շնորհակալություն մեզ հետ մնալու համար: Ձեզ դուր են գալիս մեր հոդվածները: Ցանկանու՞մ եք տեսնել ավելի հետաքրքիր բովանդակություն: Աջակցեք մեզ՝ պատվիրելով կամ խորհուրդ տալով ընկերներին, , մուտքի մակարդակի սերվերների եզակի անալոգ, որը հորինվել է մեր կողմից ձեզ համար. (հասանելի է RAID1 և RAID10-ով, մինչև 24 միջուկով և մինչև 40 ԳԲ DDR4):
Dell R730xd 2 անգամ ավելի էժան Ամստերդամի Equinix Tier IV տվյալների կենտրոնում: Միայն այստեղ Նիդեռլանդներում! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - $99-ից: Կարդացեք մասին
Source: www.habr.com
