Àmì méjì ni wọ́n ń lò bí ẹni pé ohun kan náà ni: tí a fi ohun èlò yára àti tí a gbé lọ sí kernel. Ọ̀kan ṣàlàyé àwọn ìtọ́nisọ́nà wo ni ìlànà AES ti ilé ìkàwé ń ṣe, èkejì ṣàlàyé ibi tí ṣíṣe pákẹ́tì ti ń ṣẹlẹ̀. VPN lè ní èkínní láìsí èkejì, èkejì láìsí èkínní, tàbí méjèèjì papọ̀. Ìpinnu èyíkéyìí nípa iṣẹ́ gbọ́dọ̀ bẹ̀rẹ̀ pẹ̀lú dídárúkọ èwo nínú àwọn méjì ni ìwọ ń yí lóòótọ́.

Àkójọ méjì, kì í ṣe àmì kan

Àkójọ àkọ́kọ́ ni ìmúṣẹ: ṣé kóòdù tí ń ṣe AES-256-GCM ni a ń darí lọ sí ẹ̀yà tí ń lo àwọn ìtọ́nisọ́nà àkànṣe processor tàbí sí ìlànà tí ó lè kó lọ tí ń ṣe wọ́n bí ìṣirò lasan. Ìyàn yìí ń gbé inú ilé ìkàwé crypto, a sì ń ṣe é nígbà tí ó bẹ̀rẹ̀.

Àkójọ èkejì ni ibi: ṣé pákẹ́tì ń gba ọ̀nà ìyípadà kernel kọjá tàbí daemon nínú ààyè olùlò ń kà látinú ẹ̀rọ tunnel, ń fi àṣírí ṣe é, tí ó sì tún kọ ọ́.

Kò sí àkójọ tí ó ń dí èkejì lọ́wọ́. VPN nínú ààyè olùlò lórí CPU tí ó ní àwọn ìtọ́nisọ́nà AES lè lo wọ́n nígbà gbogbo, ọ̀nà kernel lórí CPU tí kò ní wọ́n sì padà sí ìmúṣẹ software. Àwọn àmì nínú àwọn ohun èlò olùtà kì í fi hàn ní ìyàtọ̀ yìí, ìdí nìyẹn tí ìmọ̀ràn àtúnṣe tí a dà kọ láàárín ipò méjèèjì kì í fi ṣe nǹkan lọ́pọ̀ ìgbà.

Àkójọ kan: kóòdù wo ni ń ṣe àṣírí

OpenSSL ń ṣàwárí àwọn ẹ̀yà processor nígbà ìbẹ̀rẹ̀, ó sì ń lo àbájáde láti yan àwọn ọ̀nà kóòdù tí a ti mú dára síi, gẹ́gẹ́ bí ìwé àwọn agbára x86 ṣe ṣàlàyé. AES-NI jẹ́ ọ̀kan nínú àwọn agbára tí a kọ sílẹ̀ lẹ́yìn ìdarí yẹn. Kò sí nínú èyí tí ó béèrè pé kí ilé ìkàwé di ẹ̀yà kernel.

Jẹ́rìí pé ẹ̀yà náà hàn sí ìlànà kí o tó rò pé a ń lo ọ̀nà yára. Lórí Linux orísun ni pápá flags nínú /proc/cpuinfo, ní inú àlejò ó ń fi ohun tí hypervisor ń ṣàfihàn hàn, kì í ṣe orúkọ àwòṣe ẹ̀rọ gbàlejò ti ara.

grep -m1 '^flags' /proc/cpuinfo | grep -o '\baes\b'
openssl list -providers -verbose

Àṣẹ èkejì ń dárúkọ àwọn olùpèsè tí a kó sínú ìkọ́ yẹn. Kò sọ ilé ìkàwé tí iṣẹ́ VPN so mọ́, ẹ̀rọ gbàlejò kan sì lè gbé ìṣàfilọ́lẹ̀ OpenSSL méjì nígbà tí ìlànà tí ń ṣiṣẹ́ ń lo ọ̀kan nínú wọn.

Àkójọ méjì: ibo ni ọ̀nà pákẹ́tì ti ń ṣiṣẹ́

Fífi sínú kernel túmọ̀ sí pé ìyípadà ń ṣẹlẹ̀ nínú ẹ̀rọ IPsec ti kernel fúnra rẹ̀ tàbí nínú awakọ̀ tunnel nínú kernel, nítorí náà àwọn pákẹ́tì kò nílò ìrìn àjò lọ àti padà nípasẹ̀ ìlànà ààyè olùlò fún ẹ̀kọ́ kọ̀ọ̀kan. Èyí lè dín àwọn àdàkọ àti ìyípadà ipò kù, ó sì lè pín iṣẹ́ sí àwọn kọ́ọ̀dù ní ọ̀nà tí daemon aláfọ̀wọ́ kan kò lè ṣe. Ó tún ń gbé àwọn olùka àti àwọn àpẹẹrẹ tí ìwọ yóò kà nígbà tí ìṣàn kù, nítorí iṣẹ́ ti ń ṣẹlẹ̀ ní ẹ̀gbẹ́ kejì ààlà tí ìwọ kò ṣàkóso. Wo èyí bí iye owó àtúnṣe àṣìṣe, kì í ṣe ìpinnu iṣẹ́ nìkan.

Kò dá àtìlẹ́yìn ìtọ́nisọ́nà, kò ṣètò cipher, kò sì mú ọ̀nà tí ó wà ṣiṣẹ́.

Virtualisation tún ń fi ìpẹ́ kun àkójọ yìí. A lè fún àlejò ní àwòṣe CPU tí a bojú pa àwọn ẹ̀yà tí ẹ̀rọ gbàlejò ní, àlejò tí ó wà nínú rẹ̀ sì lè rí díẹ̀ síi. Ka ìwòye àwọn agbára látinú àyíká tí VPN ti ń ṣiṣẹ́ gan-an, kì í ṣe látinú console hypervisor.

Ìyàn kọ̀ọ̀kan ń ra kíni, kí sì ni kò lè ṣe

Ìbéèrè ìgbàlódé ni ibo ni àkókò ti ń lọ. Bí fọ́wọ́ kan tí ó dí, àwọn àdàkọ buffer tí ń tún ṣe tàbí ìpè ètò fún pákẹ́tì kọ̀ọ̀kan bá ń dín ìṣàn kù, gbígbé ìyípadà lọ sí ọ̀nà tí ó yọ àwọn owó yẹn kúrò lè ràn ọ́ lọ́wọ́, ní àkókò tí kernel bá mú ìyípadà tí o nílò ṣẹ.

Bí ààlà bá jẹ́ ọ̀nà òkè tí ó kún, ọ̀nà tí ó ní àdánù, àkókò ìrìn tí ó gùn, iṣẹ́ ibi tí ó kún tàbí fọ́wọ́ kan tí a so mọ́ kọ́ọ̀dù kan, ibi kò ní yí nǹkan pàtàkì kankan padà. Bẹ́ẹ̀ náà ni fún ìyàn ìtọ́nisọ́nà: AES lórí ohun èlò àkànṣe kò lè tún ọ̀nà tí ó sọnù ṣe, kò sì ní ràn ọ́ lọ́wọ́ bí tunnel bá wà ní ìdákẹ́jẹ́ nítorí ìpín orúkọ kùnà.

Níbi tí méjèèjì bá wúlò, wọ́n ń para pọ̀. Ọ̀nà kernel lè lo ìdarí ìpele ìtọ́nisọ́nà kan náà nínú API crypto kernel, ọ̀nà ààyè olùlò pẹ̀lú ilé ìkàwé tí a yàn dáradára sì ti ń lò ó. Ìpinnu kì í ṣe èwo ni ó yára jù ní ọ̀nà àìlóye; ó jẹ́ èwo owó ni ìwọ ní ẹ̀rí fún.

Kọ àwọn òtítọ́ mẹ́rin kí o tó yí nǹkan kan padà

Kọ binary iṣẹ́ náà àti ilé ìkàwé crypto tí ó so mọ́, nítorí àwọn ni wọ́n ń pinnu àkójọ àkọ́kọ́. Lẹ́yìn náà kọ ààbò dátà tí a gbà, nítorí cipher tí kò ní ọ̀nà ìtọ́nisọ́nà àkànṣe ń huwa yàtọ̀ sí èyí tí ó ní, a sì ń yan àkójọ pẹ̀lú ẹ̀gbẹ́ méjèèjì.

Lẹ́yìn náà, ìwòye àwọn agbára látinú àyíká tí ń ṣiṣẹ́, àti ní ìparí ọ̀nà pákẹ́tì tí ń ṣiṣẹ́ pẹ̀lú ẹ̀rí pé ipò tí o rò pé ó ṣí gan-an ni ó ṣí. Módùùlù tí a kó kì í ṣe ẹ̀rí pé àwòṣe kan ń lò ó, pẹ̀lúpẹ̀lú ìlà ìṣètò kì í ṣe ẹ̀rí pé kernel ti gbà á.

Yí ohun kan padà, lẹ́yìn náà fi wé ẹrù iṣẹ́ tí ó dọ́gba pẹ̀lú àwọn ibi ìparí kan náà àti ọ̀nà ìgbékalẹ̀ kan náà. Ìsọ nípa ìyára tí ìwọ kò fi wọ̀n kò ní iye tó ìkọ̀wé tí ó sọ pé a kò fi ẹ̀yìn ọ̀rọ̀ ṣe é rí.

Àwọn àpilẹ̀kọ tó jọra