Linux: miceun lock pool /dev/random

/ dev / acak, a cryptographically aman pseudo-acak angka generator (CSPRNG), dipikawanoh boga hiji masalah bangor: blocking. Tulisan ieu ngajelaskeun kumaha anjeun tiasa ngabéréskeunana.

Dina sababaraha sasih katukang, fasilitas pembangkitan angka acak dina kernel tos rada didamel deui, tapi masalah dina subsistem ieu parantos direngsekeun dina waktos anu langkung ageung. jangka waktos. Pangseueurna parobahan panungtungan dijieun pikeun nyegah getrandom () Sistim panggero blocking pikeun lila lamun sistem boot, tapi alesan kaayaan ieu kabiasaan blocking tina kolam renang acak. Patch anyar bakal ngaleungitkeun kolam renang ieu sareng diperkirakeun bakal nuju ka inti utama.

Andy Lutomirski nyebarkeun versi katilu tina patch dina ahir Désémber. Anjeunna nyumbang "dua parobahan semantik utama kana API Linux acak". patch nambahkeun bandéra GRND_INSECURE anyar pikeun getrandom () Sistim panggero (sanajan Lutomirsky nujul kana eta getentropy (), nu dilaksanakeun dina glibc maké getrandom () kalawan bandéra tetep); bandéra ieu ngabalukarkeun panggero salawasna balik jumlah data dipénta, tapi tanpa jaminan yén data téh acak. Kernel ngan saukur bakal ngalakukeun anu pangsaéna pikeun ngahasilkeun data acak anu pangsaéna dina waktos anu ditangtukeun. "Panginten anu pangsaéna nyaéta nyauran éta 'INSECURE' (teu aman) pikeun nyegah API ieu dianggo pikeun hal-hal anu peryogi kaamanan."

Patches ogé nyabut kolam renang blocking. Kernel ayeuna ngajaga dua pools data acak, hiji pakait jeung / dev / acak sarta séjén pikeun / dev / urandom, sakumaha ditétélakeun dina ieu. artikel 2015. kolam renang blocking teh kolam renang keur / dev / acak; berbunyi pikeun alat nu bakal meungpeuk (hartina ngaranna) dugi "cukup" éntropi geus dikumpulkeun ti sistem pikeun nyugemakeun pamundut nu. Bacaan salajengna tina file ieu ogé diblokir upami teu cukup éntropi dina kolam renang.

Nyoplokkeun kolam renang konci hartina maca tina / dev / acak behaves kawas getrandom () kalawan bandéra disetel ka enol (jeung ngarobah bandéra GRND_RANDOM kana noop a). Sakali generator angka acak cryptographic (CRNG) ieu initialized, maca tina / dev / acak sarta nelepon ka getrandom(...,0) moal meungpeuk sarta bakal balik jumlah dipénta data acak.

Lutomirsky nyebutkeun: "Kuring yakin yén kolam renang anu ngahalangan Linux parantos leungit. CRNG Linux ngahasilkeun kaluaran anu cukup saé bahkan tiasa dianggo pikeun generasi konci. Kolam renang anu meungpeuk henteu langkung kuat dina sagala hal material sareng ngabutuhkeun seueur infrastruktur anu nilai anu diragukeun pikeun ngadukung éta.

Parobihan ieu dilakukeun kalayan tujuan pikeun mastikeun yén program anu tos aya moal leres-leres dipangaruhan, sareng kanyataanna, bakal aya masalah pangsaeutikna sareng ngantosan anu panjang pikeun hal-hal sapertos generasi konci GnuPG.

"Épisode ieu henteu kedah ngaganggu program anu aya. / dev / urandom tetep unchanged. / dev / acak masih meungpeuk langsung kana boot, tapi blok kirang ti saméméhna. getentropy() sareng bandéra anu tos aya bakal ngabalikeun hasil anu cocog pikeun tujuan praktis sapertos sateuacana."

Lutomirsky nyatakeun yén éta masih patarosan anu kabuka naha kernel kedah nyayogikeun anu disebut "angka acak anu leres," anu kedah dilakukeun ku kernel blocking dina tingkat anu tangtu. Anjeunna ngan ukur ningali hiji alesan pikeun ieu: "patuh kana standar pamaréntahan." Lutomirsky ngusulkeun yén lamun kernel éta nyadiakeun ieu, eta kudu dilakukeun ngaliwatan panganteur lengkep beda, atawa kudu dipindahkeun kana spasi pamaké, sahingga pamaké pikeun meunangkeun sampel acara atah nu bisa dipaké pikeun nyieun kolam renang konci misalna.

Stephan Müller ngusulkeun yén set na tambalan pikeun Linux Ubuntu Random Number Generator (LRNG) (versi ayeuna 26 dileupaskeun) bisa jadi cara pikeun nyadiakeun angka acak leres pikeun aplikasi nu peryogi eta. LRNG "sapinuhna patuh kana Pedoman SP800-90B ngeunaan Sumber Éntropi Dipaké pikeun Ngahasilkeun Bit Acak," janten solusi pikeun masalah standar pamaréntah.
Matthew Garrett bantahan kana istilah "data acak anu leres," nyatakeun yén alat-alat anu disampelkeun prinsipna tiasa dimodelkeun sacara akurat pikeun ngajantenkeun aranjeunna tiasa diprediksi: "kami henteu nyandak conto acara kuantum di dieu."

Müller ngaréspon yén istilah éta asalna tina standar Jerman AIS 31 pikeun ngajelaskeun generator nomer acak anu ngan ukur ngahasilkeun hasil "dina laju anu sami sareng sumber bising anu ngahasilkeun éntropi."

Bedana terminologi kumisan, gaduh kolam renang konci sakumaha disarankeun ku patch LRNG ngan saukur bakal ngakibatkeun sagala rupa masalah, sahenteuna lamun diakses tanpa hak husus.

Sakumaha ceuk Lutomirsky: "Ieu henteu ngabéréskeun masalah. Lamun dua pamaké béda ngajalankeun program bodo kawas gnupg, aranjeunna ngan bakal solokan silih. Kuring nempo yén ayeuna aya dua masalah utama kalawan / dev / acak: eta rawan DoS (i.e. depletion sumberdaya, pangaruh jahat atawa hal sarupa), sarta saprak euweuh hak husus anu diperlukeun ngagunakeun eta, eta oge rawan nyiksa. Gnupg salah, éta runtuhna lengkep. Upami urang nambihan antarbeungeut unprivileged énggal anu bakal dianggo ku gnupg sareng program anu sami, urang bakal leungit deui."

Mueller dicatet yén ditambah getrandom () ayeuna bakal ngidinan GnuPG ngagunakeun panganteur ieu, saprak éta bakal nyadiakeun jaminan perlu yén kolam renang nu geus initialized. Dumasar kana diskusi sareng pamekar GnuPG Werner Koch, Mueller yakin yén garansi mangrupikeun hiji-hijina alesan GnuPG ayeuna maca langsung tina / dev / acak. Tapi lamun aya hiji panganteur unprivileged anu susceptible kana panolakan tina jasa (sakumaha / dev / acak kiwari), Lutomirsky boga pamadegan yén éta bakal misused ku sababaraha aplikasi.

Theodore Yue Tak Ts'o, pamekar subsistem angka acak Linux, katingalina parantos robih ngeunaan kabutuhan kolam renang anu ngahalangan. Anjeunna nyarios yén ngaleungitkeun kolam renang ieu sacara efektif bakal ngaleungitkeun ideu yén Linux gaduh generator nomer acak anu leres (TRNG): "Ieu sanés omong kosong, sabab ieu mangrupikeun anu kantos dilakukeun ku BSD."

Anjeunna ogé prihatin yén nyadiakeun mékanisme TRNG saukur bakal ngawula ka salaku bait pikeun pamekar aplikasi tur yakin yén kanyataanna, dibere tipena béda hardware dirojong ku Linux Ubuntu, mustahil pikeun ngajamin TRNG dina kernel. Malahan kamampuan damel sareng alat ngan ukur ku hak istimewa akar moal ngabéréskeun masalah: "Pamekar aplikasi netepkeun yén aplikasina dipasang salaku akar pikeun tujuan kaamanan, ku kituna ieu mangrupikeun hiji-hijina cara anjeun tiasa ngaksés nomer acak anu 'leres saé'."

Mueller naros naha Cao parantos ngantunkeun palaksanaan kolam renang blocking anu anjeunna parantos lami diusulkeun. Cao ngaréspon yén anjeunna ngarencanakeun nyandak patches Lutomirsky sareng sacara aktip nentang nambihan antarmuka anu ngahalangan deui kana kernel.

"Kernel henteu tiasa ngajamin naha sumber bising parantos dicirian leres. Hiji-hijina hal anu tiasa didamel ku pamekar GPG atanapi OpenSSL nyaéta perasaan anu samar yén TRUERANDOM "langkung saé", sareng kusabab aranjeunna hoyong langkung kaamanan, aranjeunna pasti bakal nyobian nganggo éta. Dina sababaraha waktos éta bakal diblokir, sareng nalika sababaraha pangguna pinter anu sanés (panginten spesialis distribusi) ngalebetkeun kana skrip init sareng sistemna lirén damel, pangguna ngan ukur kedah ngawadul ka Linus Torvalds nyalira.

Cao ogé ngajengkeun méré cryptographers jeung jalma anu sabenerna butuh TRNG cara panén éntropi sorangan dina spasi pamaké ngagunakeun sakumaha aranjeunna ningali pas. Anjeunna nyebatkeun yén ngumpulkeun éntropi sanés prosés anu tiasa dilakukeun ku kernel dina sadaya hardware anu béda anu dirojong, sareng kernel sorangan henteu tiasa ngira-ngira jumlah éntropi anu disayogikeun ku sumber anu béda.

"Kernel henteu kedah nyampur sumber bising anu béda-béda babarengan, sareng éta pasti henteu kedah nyobian ngaku terang sabaraha bit éntropi anu dipikabutuh nalika nyobian maénkeun sababaraha jinis" kaulinan éntropi twitchy "dina CPU anu saderhana pisan. arsitéktur pikeun pamaké konsumen. Kasus IOT / Embedded dimana sagalana teu sinkron sareng master osilator tunggal, dimana teu aya instruksi CPU pikeun nyusun ulang atawa ngaganti ngaran register a, jsb.

"Anjeun tiasa nyarioskeun ngeunaan nyayogikeun alat anu nyobian ngalakukeun itungan ieu, tapi hal-hal sapertos kitu kedah dilakukeun dina unggal hardware pangguna, anu henteu praktis pikeun kalolobaan pangguna distribusi. Lamun ieu ngan dimaksudkeun pikeun cryptographers, teras hayu eta dilakukeun dina spasi pamaké maranéhanana. Na hayu urang teu simplify GPG, OpenSSL, jeung sajabana ambéh dulur nyebutkeun "urang hayang" randomness leres "na moal settle pikeun kirang." Urang bisa ngobrol ngeunaan kumaha urang nyadiakeun interfaces ka cryptographers ambéh maranéhanana bisa meunangkeun inpo nu diperlukeun ku ngakses sumber noise primér, dipisahkeun jeung ngaranna, jeung sugan kumaha bae sumber noise bisa auténtikasi sorangan ka perpustakaan atawa aplikasi rohangan pamaké.

Aya sababaraha diskusi ngeunaan kumaha antarmuka sapertos kitu, sabab contona, aya implikasi kaamanan pikeun sababaraha acara. Cao nyatet yén kode scan keyboard (nyaéta keystrokes) dicampurkeun kana kolam renang salaku bagian tina kumpulan éntropi: "Bringing ieu kana spasi pamaké, sanajan ngaliwatan panggero sistem husus, bakal jadi unwise ngomong sahanteuna." Ieu rada mungkin yen timing acara lianna bisa nyieun sababaraha jenis leakage informasi ngaliwatan saluran samping.

Janten sigana masalah anu parantos lami sareng subsistem nomer acak Linux nuju jalan kana solusi. Parobahan yén subsistem angka acak geus undergone anyar geus sabenerna ngan ngakibatkeun masalah DoS bari maké éta. Ayeuna aya cara anu éfisién pikeun kéngingkeun nomer acak pangsaéna anu tiasa disayogikeun ku kernel. Upami TRNG masih dipikahoyong dina Linux, maka cacad ieu kedah diatasi di hareup, tapi sigana mah ieu moal dilakukeun dina kernel sorangan.

Sababaraha iklan 🙂

Hatur nuhun pikeun tetep sareng kami. Naha anjeun resep artikel kami? Hoyong ningali eusi anu langkung narik? Dukung kami ku cara nempatkeun pesenan atanapi nyarankeun ka babaturan, cloud VPS pikeun pamekar ti $4.99, analog unik tina server tingkat éntri, anu diciptakeun ku kami pikeun anjeun: Sakabeh bebeneran ngeunaan VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps ti $ 19 atanapi kumaha babagi server a? (sadia kalawan RAID1 na RAID10, nepi ka 24 cores sarta nepi ka 40GB DDR4).

Dell R730xd 2 kali langkung mirah dina puseur data Equinix nagara golongan IV di Amsterdam? Ngan di dieu 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV ti $199 di Walanda! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - ti $99! Baca ngeunaan Kumaha ngawangun Infrastruktur Corp. kelas kalawan pamakéan Dell R730xd E5-2650 v4 server patut 9000 euro pikeun Penny a?

sumber: www.habr.com

Tambahkeun komentar