Linux: e wehe ana i ka wai laka /dev/random

/dev/random, he pseudo-random number generator (CSPRNG) i hoʻopaʻa ʻia i ka cryptographically securely pseudo-random number generator (CSPRNG), i ʻike ʻia he hoʻokahi pilikia hoʻonāukiuki: ka pale ʻana. Hōʻike kēia ʻatikala pehea ʻoe e hoʻoponopono ai.

I kēia mau mahina i hala iho nei, ua hoʻoponopono hou ʻia nā mea hoʻomohala helu maʻamau i ka kernel, akā ua hoʻoholo ʻia nā pilikia o kēia subsystem i ka wā o ka laulā. manawa manawa. ʻO ka nui loa nā hoʻololi hope ua hana ʻia e pale aku i ka getrandom() system call mai ke kāohi ʻana no ka manawa lōʻihi i ka wā e hoʻomaka ai ka ʻōnaehana, akā ʻo ke kumu kumu o kēia ʻo ke ʻano o ka pale ʻana i ka wai puna. Ua hoʻoneʻe ʻia kēia loko wai i kahi ʻāpana hou a ua manaʻo ʻia e hele i ke kumu nui.

Ua hoʻopuka ʻo Andy Lutomirski i ke kolu o ka mana o ka patch i ka hopena o Dekemaba. Hāʻawi ʻo ia "ʻelua hoʻololi semantic nui i nā API Linux maʻamau". Hoʻohui ka patch i kahi hae GRND_INSECURE hou i ka getrandom() system call (ʻoiai ʻo Lutomirsky e kuhikuhi iā ia he getentropy (), i hoʻokō ʻia ma glibc me ka hoʻohana ʻana i ka getrandom () me nā hae paʻa); ʻO kēia hae ke kumu e hoʻihoʻi mau ai ke kelepona i ka nui o ka ʻikepili i noi ʻia, akā me ka ʻole e hōʻoiaʻiʻo ʻia ʻo ia ka ʻikepili. E hana wale ka kernel i ka mea maikaʻi loa e hoʻopuka i ka ʻikepili maikaʻi loa i loaʻa iā ia i ka manawa i hāʻawi ʻia. "Malia paha ʻo ka mea maikaʻi loa e hana ai ʻo ia ke kapa ʻia ʻo 'INSECURE' (insecure) e pale i kēia API mai ka hoʻohana ʻia ʻana no nā mea e pono ai ka palekana."

Hoʻokuʻu pū ʻia nā ʻōpala i ka wai hoʻopaʻa. Ke mālama nei ka kernel i ʻelua mau pūnāwai data random, hoʻokahi e pili ana i / dev / random a ʻo kekahi i / dev / urandom, e like me ka mea i wehewehe ʻia ma kēia. 'ōlelo 2015. ʻO ka pūnāwai hoʻopaʻa ʻia ka pūnāwai no /dev/random; Heluhelu no ia mea e poloka (ʻo ia hoʻi kona inoa) a hiki i ka ʻohi ʻia ʻana o ka entropy mai ka ʻōnaehana e hoʻokō i ka noi. Hoʻopaʻa ʻia nā heluhelu hou aʻe mai kēia faila inā ʻaʻole lawa ka entropy i loko o ka loko.

ʻO ka wehe ʻana i ka loko laka, ʻo ia ka heluhelu ʻana mai /dev/random e like me getrandom() me nā hae i hoʻonohonoho ʻia i ka ʻole (a hoʻololi i ka hae GRND_RANDOM i noop). Ke hoʻomaka ka cryptographic random number generator (CRNG), heluhelu mai /dev/random a me nā kelepona i getrandom(...,0) ʻaʻole e poloka a e hoʻihoʻi i ka nui o ka ʻikepili i noi ʻia.

'Ōleloʻo Lutomirsky: "Ke manaʻoʻiʻo nei au ua lilo ka wai hoʻopaʻa ʻana o Linux. Hoʻopuka ʻo CRNG Linux i nā huahana kūpono e hoʻohana ʻia no ka hana nui. ʻAʻole ʻoi aku ka ikaika o ka wai hoʻopaʻa ʻana i kekahi ʻano waiwai a koi aku i ka nui o nā ʻōnaehana o ka waiwai kānalua e kākoʻo ai. "

Ua hana ʻia nā hoʻololi me ka pahuhopu o ka hōʻoia ʻana ʻaʻole e hoʻopilikia maoli ʻia nā papahana e kū nei, a ʻoiaʻiʻo, e liʻiliʻi nā pilikia me ka kali lōʻihi no nā mea e like me GnuPG key generation.

"ʻAʻole pono kēia mau ʻāpana e hoʻopau i nā papahana i loaʻa. /dev/urandom ʻaʻole i loli. /dev/random paʻa koke ma luna o ka boot, akā ua poloka ia ma mua o ka wā ma mua. getentropy() me nā hae i loaʻa e hoʻihoʻi i kahi hopena i kūpono no nā kumu hana e like me ka wā ma mua."

Ua ʻike ʻo Lutomirsky he nīnau wehe ia inā pono e hāʻawi ka kernel i ka mea i kapa ʻia ʻo "helu helu maoli," ʻo ia ka mea i manaʻo ʻia e hana ʻia ka kernel blocking i kekahi ʻano. ʻIke ʻo ia i hoʻokahi kumu no kēia: "ka hoʻokō ʻana i nā kūlana aupuni." Ua manaʻo ʻo Lutomirsky inā ʻo ka kernel e hāʻawi i kēia, pono e hana ʻia ma o kahi interface ʻokoʻa loa, a i ʻole e hoʻoneʻe ʻia i loko o kahi mea hoʻohana, e ʻae i ka mea hoʻohana e kiʻi i nā hanana hanana maka i hiki ke hoʻohana ʻia no ka hana ʻana i kahi loko laka.

Ua manaʻo ʻo Stephan Müller i kāna set nā pā no ka Linux Random Number Generator (LRNG) (ua hoʻokuʻu ʻia ka mana 26 i kēia manawa) hiki ke lilo i ala e hāʻawi ai i nā helu helu maoli no nā noi e pono ai. ʻO LRNG ka "kūpono piha me SP800-90B Guidelines on Entropy Sources Used to Generate Random Bits," i mea e hoʻonā ai i ka pilikia o ke aupuni.
Ua kūʻē ʻo Matthew Garrett i ka huaʻōlelo "ʻikepili random maoli," me ka ʻike ʻana e hiki ke hoʻohālikelike pono ʻia nā mea i hoʻohālikelike ʻia i mea e hiki ai ke wānana: "ʻaʻole mākou e hōʻike i nā hanana quantum ma aneʻi."

Ua pane mai ʻo Müller e hele mai ka huaʻōlelo mai ka German standard AIS 31 e wehewehe i kahi mea hoʻoheheʻe helu maʻamau e hoʻopuka wale i kahi hopena "ma ka helu like me ka kumu o ka leo kumu e hoʻopuka ai i ka entropy."

Ma waho aʻe o nā ʻokoʻa ʻōlelo, ʻo ka loaʻa ʻana o kahi loko laka e like me ka manaʻo o ka LRNG patch e alakaʻi wale i nā pilikia like ʻole, inā paha e komo ʻole ʻia me ka ʻole o nā pono.

E like me kā Lutomirsky i ʻōlelo ai: “ʻAʻole kēia e hoʻoponopono i ka pilikia. Inā holo nā mea hoʻohana ʻelua i nā polokalamu naʻaupō e like me gnupg, e hoʻokahe wale lākou i kekahi i kekahi. ʻIke au aia i kēia manawa ʻelua pilikia nui me /dev/random: hiki ke hoʻohana ʻia i ka DoS (ʻo ia hoʻi ka hoʻopau ʻana o nā kumuwaiwai, ka manaʻo ʻino a i ʻole kekahi mea like), a no ka mea ʻaʻohe pono e koi ʻia e hoʻohana ia mea, hiki nō hoʻi i ka hana ʻino. Ua hewa ʻo Gnupg, ua hāʻule loa. Inā mākou e hoʻohui i kahi interface hou ʻole i hoʻohana ʻia e gnupg a me nā polokalamu like, e nalowale hou mākou. "

Ua ʻōlelo ʻo Mueller, ʻo ka hoʻohui ʻana o getrandom() e ʻae iā GnuPG e hoʻohana i kēia interface, no ka mea e hāʻawi ia i ka hōʻoia kūpono ua hoʻomaka ʻia ka loko. Ma muli o nā kūkākūkā me ka mea hoʻomohala GnuPG ʻo Werner Koch, manaʻo ʻo Mueller ʻo ka hōʻoiaʻiʻo wale nō ke kumu e heluhelu pololei ai ʻo GnuPG mai /dev/random. Akā inā loaʻa kahi interface unprivileged i hiki ke hōʻole i ka lawelawe (e like me / dev / random i kēia lā), ʻōlelo ʻo Lutomirsky e hoʻohana hewa ʻia e kekahi mau noi.

Ua ʻike ʻia ʻo Theodore Yue Tak Tsʻo, ka mea nāna i hoʻokumu i ka subsystem helu random o Linux, ua hoʻololi ʻo ia i kona manaʻo e pili ana i ka pono o kahi wai ʻauʻau. Ua ʻōlelo ʻo ia ʻo ka wehe ʻana i kēia kolamu e hoʻopau maikaʻi i ka manaʻo e loaʻa iā Linux kahi mea hoʻoheheʻe helu random maoli (TRNG): "ʻAʻole kēia he mea lapuwale, ʻoiai ʻo ia ka mea a *BSD i hana mau ai."

Ke hopohopo nei ʻo ia i ka hāʻawi ʻana i kahi mīkini TRNG e lilo wale i maunu no nā mea hoʻomohala noiʻi a manaʻoʻiʻo ʻo ka ʻoiaʻiʻo, hāʻawi ʻia i nā ʻano ʻano lako like ʻole i kākoʻo ʻia e Linux, ʻaʻole hiki ke hōʻoiaʻiʻo iā TRNG i ka kernel. ʻO ka hiki ke hana me nā mea hana wale nō me nā pono kumu ʻaʻole e hoʻonā i ka pilikia: "Hoʻomaopopo nā mea hoʻomohala noi e hoʻokomo ʻia kā lākou noi ma ke ʻano he kumu no ka palekana, no laila ʻo kēia wale nō ke ala e hiki ai iā ʻoe ke komo i nā helu helu 'maikaʻi loa'."

Ua nīnau ʻo Mueller inā ua haʻalele ʻo Cao i ka hoʻokō ʻana i ka wai ʻauʻau paʻa āna i manaʻo lōʻihi ai. Ua pane ʻo Cao e hoʻolālā ana ʻo ia e lawe i nā pāpaʻi a Lutomirsky a kūʻē ikaika i ka hoʻohui ʻana i kahi interface blocking i ka kernel.

“ʻAʻole hiki i ka kernel ke hōʻoiaʻiʻo inā ua ʻike pono ʻia ke kumu leo. ʻO ka mea wale nō i loaʻa i ka mea hoʻomohala GPG a i ʻole OpenSSL he manaʻo ʻike ʻole ʻo TRUERANDOM ʻoi aku ka "ʻoi aku ka maikaʻi", a no ka mea makemake lākou i ka palekana, e hoʻāʻo lākou e hoʻohana. I kekahi manawa e hoʻopaʻa ʻia, a i ka wā e hoʻokomo ai kekahi mea hoʻohana akamai ʻē aʻe (he loea hoʻolaha paha) i loko o ka script init a pau nā ʻōnaehana i ka hana, pono nā mea hoʻohana e hoʻopiʻi iā Linus Torvalds iā ia iho.

Kākoʻo pū ʻo Cao i ka hāʻawi ʻana i nā cryptographers a me ka poʻe e pono maoli iā TRNG kahi ala e hōʻiliʻili ai i kā lākou entropy i loko o kahi mea hoʻohana e hoʻohana ai e like me kā lākou e ʻike ai he kūpono. Ua ʻōlelo ʻo ia, ʻaʻole ʻo ka hōʻiliʻili ʻana i ka entropy he hana e hiki ke hana ʻia e ka kernel ma luna o nā hāmeʻa like ʻole a pau e kākoʻo ai, ʻaʻole hiki i ka kernel ponoʻī ke koho i ka nui o ka entropy i hāʻawi ʻia e nā kumu like ʻole.

"ʻAʻole pono e hui pū ka kernel i nā kumu leo ​​like ʻole, a ʻaʻole pono e hoʻāʻo e ʻōlelo e ʻike i ka nui o nā ʻāpana o ka entropy e loaʻa ana i ka wā e hoʻāʻo nei e pāʻani i kekahi ʻano "twitchy entropy game" ma kahi CPU maʻalahi. hale hoʻolālā no nā mea hoʻohana. IOT/Embedded hihia kahi i pau ʻole ai nā mea āpau me hoʻokahi master oscillator, kahi ʻaʻohe ʻōlelo aʻo CPU e hoʻonohonoho hou a inoa hou i kahi papa inoa, etc.

"Hiki iā ʻoe ke kamaʻilio e pili ana i ka hāʻawi ʻana i nā mea hana e hoʻāʻo ai e hana i kēia mau helu, akā pono e hana ʻia ia mau mea ma nā hāmeʻa o kēlā me kēia mea hoʻohana, ʻaʻole pono ia no ka hapa nui o nā mea hoʻohana. Inā makemake wale ʻia kēia no nā cryptographers, a laila e hana ʻia i loko o kā lākou wahi mea hoʻohana. A mai hoʻomaʻamaʻa mākou i ka GPG, OpenSSL, a me nā mea ʻē aʻe e ʻōlelo ai nā mea a pau "makemake mākou i ka " randomness maoli " a ʻaʻole e hoʻomaha iki. Hiki iā mākou ke kamaʻilio e pili ana i kā mākou hāʻawi ʻana i nā loulou i nā cryptographers i hiki iā lākou ke loaʻa ka ʻike e pono ai lākou ma ke komo ʻana i nā kumu leo ​​nui, hoʻokaʻawale ʻia a kapa ʻia, a ma ke ʻano paha e hiki ai i ke kumu walaʻau ke hōʻoia iā ia iho i kahi waihona a i ʻole ka noi kikowaena mea hoʻohana. "

Aia kekahi mau kūkākūkā e pili ana i ke ʻano o ia interface, ʻoiai no ka laʻana aia paha nā hopena palekana no kekahi mau hanana. Ua ʻike ʻo Cao, ua hui pū ʻia nā code scan keyboard (ʻo ia hoʻi nā kī kī) i loko o ka loko wai ma ke ʻano he ʻāpana o ka hōʻiliʻili entropy: "ʻO ka lawe ʻana i kēia i loko o kahi mea hoʻohana, ʻoiai ma o ke kelepona ʻana i ka ʻōnaehana ponoʻī, ʻaʻole naʻauao e ʻōlelo iki." Hiki paha i nā manawa hanana ʻē aʻe ke hana i kekahi ʻano leakage ʻike ma nā kahawai ʻaoʻao.

No laila ua like ia me kahi pilikia lōʻihi me ka subsystem helu random o Linux ma ke ala i kahi hopena. ʻO nā hoʻololi i hana ʻia e ka subsystem helu random i kēia manawa ua hoʻopuka wale ʻia nā pilikia DoS i ka wā e hoʻohana ai. I kēia manawa aia nā ala maikaʻi e loaʻa ai nā helu random maikaʻi loa i hiki i ka kernel ke hāʻawi. Inā makemake ʻia ʻo TRNG ma Linux, a laila pono e hoʻoponopono ʻia kēia hemahema i ka wā e hiki mai ana, akā ʻaʻole paha e hana ʻia kēia i loko o ka kernel ponoʻī.

Kekahi mau hoʻolaha 🙂

Mahalo no kou noho pū ʻana me mākou. Makemake ʻoe i kā mākou ʻatikala? Makemake ʻoe e ʻike i nā mea hoihoi hou aʻe? E kākoʻo iā mākou ma ke kau ʻana i kahi kauoha a i ʻole ka ʻōlelo ʻana i nā hoaaloha, cloud VPS no nā mea hoʻomohala mai $4.99, he analogue kū hoʻokahi o nā kikowaena hoʻokomo-level, i hana ʻia e mākou no ʻoe: ʻO ka ʻoiaʻiʻo holoʻokoʻa e pili ana iā VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps mai $ 19 a pehea e kaʻana like ai i kahi kikowaena? (loaʻa me RAID1 a me RAID10, a hiki i 24 cores a hiki i 40GB DDR4).

ʻO Dell R730xd 2 mau manawa maʻalahi ma Equinix Tier IV kikowaena data ma Amsterdam? Eia wale nō 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV mai $199 ma Netherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - mai $99! Heluhelu e pili ana Pehea e kūkulu ai i ka ʻoihana ʻoihana. papa me ka hoʻohana 'ana o Dell R730xd E5-2650 v4 kikowaena waiwai 9000 euros no ka peni?

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka