Linux: kilid hovuzunun çıxarılması /dev/random

/dev/random, kriptoqrafik cəhətdən təhlükəsiz psevdo-təsadüfi nömrələr generatorunun (CSPRNG) bir zəhlətökən problemi olduğu bilinir: bloklama. Bu məqalə bunu necə həll edə biləcəyinizi izah edir.

Son bir neçə ay ərzində nüvədə təsadüfi ədəd yaratmaq imkanları bir qədər yenidən işlənmişdir, lakin bu alt sistemdəki problemlər daha geniş müddət ərzində həll edilmişdir. vaxt çərçivəsi... Ən çox son dəyişikliklər sistem işə salındıqda getrandom() sistem çağırışının uzun müddət bloklanmasının qarşısını almaq üçün edilmişdir, lakin bunun əsas səbəbi təsadüfi hovuzun bloklama davranışı idi. Bu yaxınlarda hazırlanan yamaq bu hovuzu siləcəkdi və onun əsas nüvəyə doğru getməsi gözlənilirdi.

Endi Lutomirski yamağın üçüncü versiyasını dekabrın sonunda nəşr etdi. O, töhfə verir "təsadüfi Linux API-lərinə iki əsas semantik dəyişiklik". Yamaq getrandom() sistem çağırışına yeni GRND_INSECURE bayrağı əlavə edir (baxmayaraq ki, Lutomirsky ona getentropy() kimi istinad edir, bu, sabit bayraqlarla getrandom() istifadə edərək glibc-də həyata keçirilir); bu bayraq zəngin həmişə tələb olunan məlumat miqdarını qaytarmasına səbəb olur, lakin məlumatların təsadüfi olmasına zəmanət vermir. Nüvə sadəcə olaraq verilmiş vaxtda malik olduğu ən yaxşı təsadüfi məlumatları istehsal etmək üçün əlindən gələni edəcək. “Yəqin ki, ediləcək ən yaxşı şey bunu “TƏHLÜKƏSİZ” adlandırmaqdır. (təhlükəsiz) bu API-nin təhlükəsizliyə ehtiyacı olan şeylər üçün istifadə edilməsinin qarşısını almaq üçün."

Yamalar bloklama hovuzunu da aradan qaldırır. Hal-hazırda nüvə iki təsadüfi məlumat hovuzunu saxlayır, bunlardan biri /dev/random, digəri isə /dev/urandom-a uyğundur. məqalə 2015. Bloklama hovuzu /dev/random üçün hovuzdur; sorğunu təmin etmək üçün sistemdən "kifayət qədər" entropiya toplanana qədər həmin cihaz üçün oxunmalar bloklanacaq (onun adını nəzərdə tutur). Hovuzda kifayət qədər entropiya olmadıqda bu fayldan əlavə oxunuşlar da bloklanır.

Kilid hovuzunun çıxarılması o deməkdir ki, /dev/random-dan oxumaq bayraqları sıfıra təyin edilmiş getrandom() kimi davranır (və GRND_RANDOM bayrağını döngəyə çevirir). Kriptoqrafik təsadüfi ədəd generatoru (CRNG) işə salındıqdan sonra /dev/random-dan oxumaq və getrandom(...,0)-a edilən zənglər bloklanmayacaq və tələb olunan təsadüfi məlumat miqdarını qaytaracaq.

Lutomirsky deyir: “Mən inanıram ki, Linux bloklama hovuzu köhnəlib. CRNG Linux hətta açar yaratmaq üçün istifadə oluna biləcək qədər yaxşı çıxış yaradır. Bloklama hovuzu heç bir maddi mənada daha güclü deyil və onu dəstəkləmək üçün çoxlu şübhəli dəyəri olan infrastruktur tələb olunur”.

Dəyişikliklər mövcud proqramların həqiqətən təsirlənməyəcəyini təmin etmək məqsədi ilə edildi və əslində GnuPG açarının yaradılması kimi şeylər üçün uzun gözləmələrlə bağlı daha az problem olacaq.

“Bu epizodlar mövcud proqramları pozmamalıdır. /dev/urandom dəyişməz olaraq qalır. /dev/random hələ də yükləmə zamanı dərhal bloklayır, lakin əvvəlkindən daha az bloklayır. Mövcud bayraqlarla getentropy() əvvəlki kimi praktik məqsədlər üçün uyğun bir nəticə verəcəkdir."

Lutomirsky qeyd etdi ki, nüvənin "həqiqi təsadüfi ədədlər" adlandırılanları təmin edib-etməməsi hələ də açıq sualdır, bloklayan nüvənin müəyyən dərəcədə etməli olduğu şey budur. O, bunun yalnız bir səbəbini görür: “dövlət standartlarına uyğunluq”. Lutomirsky təklif etdi ki, əgər nüvə bunu təmin edəcəksə, bu, tamamilə fərqli bir interfeys vasitəsilə həyata keçirilməli və ya istifadəçiyə belə bir kilid hovuzu yaratmaq üçün istifadə edilə bilən xam hadisə nümunələrini əldə etməyə imkan verən istifadəçi sahəsinə köçürülməlidir.

Stefan Müller öz setini təklif etdi yamaqlar Linux üçün Təsadüfi Nömrələr Generatoru (LRNG) (hazırda buraxılış 26) ona ehtiyacı olan proqramlar üçün həqiqi təsadüfi ədədlər təqdim etmək üçün bir yol ola bilər. LRNG “Təsadüfi Bitlər Yaratmaq üçün İstifadə olunan Entropiya Mənbələri üzrə SP800-90B Təlimatlarına tam uyğundur” və bu, onu hökumət standartları probleminin həllinə çevirir.
Metyu Qarret "həqiqi təsadüfi məlumatlar" termininə etiraz edərək, nümunə götürülən cihazların prinsipcə onları proqnozlaşdırıla bilən etmək üçün kifayət qədər dəqiq modelləşdirilə biləcəyini qeyd etdi: "biz burada kvant hadisələrini seçmirik."

Müller cavab verdi ki, bu termin yalnız "əsas səs-küy mənbəyinin entropiya yaratdığı ilə eyni sürətlə" nəticə çıxaran təsadüfi say generatorunu təsvir etmək üçün Alman standartı AIS 31-dən gəlir.

Terminoloji fərqləri bir kənara qoysaq, LRNG yamaqlarının təklif etdiyi kimi kilid hovuzuna sahib olmaq, ən azı imtiyazsız istifadə olunarsa, sadəcə müxtəlif problemlərə gətirib çıxaracaq.

Lutomirskinin dediyi kimi: “Bu, problemi həll etmir. Əgər iki fərqli istifadəçi gnupg kimi axmaq proqramlar işlədirsə, onlar sadəcə bir-birlərini qurudacaqlar. Mən görürəm ki, hazırda /dev/random ilə bağlı iki əsas problem var: o, DoS-ə meyllidir (yəni resurs tükənməsi, zərərli təsir və ya buna bənzər bir şey) və ondan istifadə etmək üçün heç bir imtiyaz tələb olunmadığından, sui-istifadəyə də meyllidir. Gnupg səhvdir, bu, tam çöküşdür. Əgər gnupg və oxşar proqramların istifadə edəcəyi yeni imtiyazsız interfeys əlavə etsək, yenə itirəcəyik."

Mueller qeyd etdi ki, getrandom() əlavəsi indi GnuPG-yə bu interfeysdən istifadə etməyə imkan verəcək, çünki o, hovuzun işə salınmasına lazımi zəmanət verəcək. GnuPG tərtibatçısı Werner Koch ilə müzakirələrə əsaslanaraq, Mueller hesab edir ki, zəmanət GnuPG-nin hazırda birbaşa /dev/random-dan oxumasının yeganə səbəbidir. Lakin xidmətdən imtinaya həssas olan imtiyazsız bir interfeys varsa (bu gün / dev/random olduğu kimi), Lutomirsky onun bəzi tətbiqlər tərəfindən sui-istifadə ediləcəyini iddia edir.

Linux-un təsadüfi nömrələr alt sisteminin inkişaf etdiricisi Teodor Yue Tak Ts'o, görünür, bloklama hovuzuna ehtiyac haqqında fikrini dəyişdi. O, bu hovuzun çıxarılmasının Linux-un həqiqi təsadüfi ədəd generatoruna (TRNG) sahib olması fikrindən effektiv şəkildə qurtulacağını söylədi: "Bu cəfəngiyat deyil, çünki *BSD həmişə etdiyi şeydir."

O, həmçinin TRNG mexanizminin təmin edilməsinin sadəcə proqram tərtibatçıları üçün yem rolunu oynayacağından narahatdır və hesab edir ki, əslində Linux tərəfindən dəstəklənən müxtəlif növ aparatları nəzərə alsaq, nüvədə TRNG-yə zəmanət vermək mümkün deyil. Yalnız kök imtiyazları olan avadanlıqla işləmək bacarığı belə problemi həll etməyəcək: "Tətbiq tərtibatçıları təhlükəsizlik məqsədləri üçün onların tətbiqinin kök olaraq quraşdırıldığını qeyd edirlər ki, bu, "həqiqətən yaxşı" təsadüfi nömrələrə daxil olmağın yeganə yoludur."

Mueller Cao-nun özünün çoxdan təklif etdiyi bloklama hovuzunun tətbiqindən imtina edib-etmədiyini soruşdu. Cao cavab verdi ki, o, Lutomirskinin yamaqlarını götürməyi planlaşdırır və nüvəyə bloklayıcı interfeys əlavə etməyə fəal şəkildə qarşı çıxır.

“Kernel səs-küy mənbəyinin düzgün xarakterizə edilib-edilməməsinə dair heç bir zəmanət verə bilməz. GPG və ya OpenSSL tərtibatçısının əldə edə biləcəyi yeganə şey TRUERANDOM-un "daha yaxşı" olduğuna dair qeyri-müəyyən hissdir və onlar daha çox təhlükəsizlik istədikləri üçün, şübhəsiz ki, ondan istifadə etməyə çalışacaqlar. Nə vaxtsa bloklanacaq və başqa ağıllı istifadəçi (bəlkə də paylama mütəxəssisi) onu init skriptinə daxil edəndə və sistemlər işləməyi dayandırdıqda, istifadəçilər yalnız Linus Torvaldsın özünə şikayət etməli olacaqlar.”

Cao həmçinin kriptoqraflara və həqiqətən TRNG-yə ehtiyacı olanlara uyğun gördükləri kimi istifadə etmək üçün istifadəçi məkanında öz entropiyalarını toplamaq üçün bir yol verməyi müdafiə edir. O deyir ki, entropiyanın toplanması nüvənin dəstəklədiyi bütün müxtəlif aparatlarda həyata keçirə biləcəyi bir proses deyil və nüvənin özü də müxtəlif mənbələr tərəfindən təmin edilən entropiyanın miqdarını təxmin edə bilməz.

"Ləpə müxtəlif səs-küy mənbələrini bir-birinə qarışdırmamalıdır və o, çox sadə bir CPU-da bir növ "seğirmə entropiya oyunu" oynamağa çalışarkən nə qədər entropiya biti əldə etdiyini bilməyə çalışmamalıdır. istehlakçı istifadəçiləri üçün arxitektura. Hər şeyin tək əsas osilatorla sinxronizasiya olunmadığı, reyestri yenidən sıralamaq və ya adını dəyişmək üçün CPU təlimatının olmadığı IOT/Daxil edilmiş hallar və s.”

“Bu hesablamaları aparmağa çalışan alətlərin təqdim edilməsi haqqında danışa bilərsiniz, lakin bu cür işlər hər bir istifadəçinin aparatında edilməlidir, bu isə əksər paylama istifadəçiləri üçün praktiki deyil. Bu, yalnız kriptoqraflar üçün nəzərdə tutulubsa, o zaman bu, onların istifadəçi məkanında edilsin. Gəlin GPG, OpenSSL və s. sadələşdirməyək ki, hamı “biz “əsl təsadüfilik” istəyirik və daha az şeylə kifayətlənməyək” desin. Biz kriptoqraflara interfeysləri necə təqdim etdiyimiz barədə danışa bilərik ki, onlar ayrılmış və adlandırılmış əsas səs-küy mənbələrinə daxil olaraq ehtiyac duyduqları məlumatı əldə edə bilsinlər və ola bilsin ki, səs-küy mənbəyi hansısa bir şəkildə özünü kitabxanaya və ya istifadəçi sahəsi proqramına autentifikasiya edə bilsin."

Belə bir interfeysin necə görünə biləcəyi ilə bağlı bəzi müzakirələr aparıldı, məsələn, bəzi hadisələr üçün təhlükəsizlik təsirləri ola bilər. Cao qeyd etdi ki, klaviatura skan kodları (yəni düymə vuruşları) entropiya kolleksiyasının bir hissəsi kimi hovuza qarışdırılır: "Bunu istifadəçi məkanına, hətta imtiyazlı sistem çağırışı vasitəsilə gətirmək ən azı ağılsızlıq olardı." Tamamilə mümkündür ki, digər hadisə vaxtları yan kanallar vasitəsilə bir növ məlumat sızması yarada bilər.

Beləliklə, Linux-un təsadüfi nömrələr alt sistemi ilə bağlı uzun müddətdir davam edən problem həll yolundadır. Təsadüfi nömrələr altsisteminin bu yaxınlarda məruz qaldığı dəyişikliklər əslində ondan istifadə zamanı yalnız DoS problemləri ilə nəticələndi. İndi nüvənin təmin edə biləcəyi ən yaxşı təsadüfi nömrələri əldə etməyin səmərəli yolları var. Əgər TRNG hələ də Linux-da arzuolunandırsa, o zaman bu qüsuru gələcəkdə aradan qaldırmaq lazımdır, lakin çox güman ki, bu, nüvənin özündə edilməyəcək.

Bəzi reklamlar 🙂

Bizimlə qaldığınız üçün təşəkkür edirik. Məqalələrimiz xoşunuza gəlirmi? Daha maraqlı məzmun görmək istəyirsiniz? Sifariş verməklə və ya dostlarınıza tövsiyə etməklə bizə dəstək olun, developers üçün bulud VPS 4.99 dollardan, Sizin üçün bizim tərəfimizdən icad edilmiş giriş səviyyəli serverlərin unikal analoqu: VPS (KVM) E5-2697 v3 (6 nüvəli) 10GB DDR4 480GB SSD 1Gbps haqqında 19 dollardan bütün həqiqət və ya serveri necə paylaşmaq olar? (RAID1 və RAID10, 24 nüvəyə qədər və 40 GB DDR4 ilə mövcuddur).

Dell R730xd Amsterdamdakı Equinix Tier IV məlumat mərkəzində 2 dəfə ucuzdur? Yalnız burada 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV 199$-dan başlayan qiymətlərlə Hollandiyada! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - 99 dollardan! haqqında oxuyun İnfrastruktur korporasiyasını necə qurmaq olar. bir qəpik üçün 730 avro dəyərində Dell R5xd E2650-4 v9000 serverlərinin istifadəsi ilə sinif?

Mənbə: www.habr.com

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