Kā zk-ASM var nodrošināt drošu un neuzticamu internetu

Web3.com Ventures oriģinālās izpētes analīze

0xFishylosopher

Piezīme. Šis raksts ir diezgan tehniski blīvs gabals, un tajā ir ietvertas pamata konceptuālās zināšanas par zk-Proofs un/vai zk-Rollups. Vispārīgāku šo principu ievadu var atrast šeit.

Ievads

Nulles zināšanu pierādījumi, jo īpaši zk-SNARK (īsi neinteraktīvie zināšanu argumenti), iespējams, ir viena no vissvarīgākajām tehnoloģijām Web 3 robežās. Lai gan lielākā daļa plašsaziņas līdzekļu un investīciju uzmanības šajā apakšnozarē ir vērsta uz zk. - Apkopojumi, mērogošanas risinājumi, kas nodrošina mērogojamību L1 blokķēdēm, piemēram, Ethereum, tas nekādā ziņā nav vienīgais zk-SNARK pielietojums. Šajā esejā es padziļināti analizēšu Zero-Knowledge Assembly koda (jeb zkASM) koncepciju, izvērtējot tā lietošanas gadījumus gan zk-Rollups, gan ne tikai, izpētot tā teorētiskās iespējas, kā mēs zinām, no jauna izgudrojot internetu.

Tehniskie principi

zk-ASM, kā norāda tā nosaukums, satur divas galvenās tehniskās daļas: ZK un ASM. ZK daļa attiecas uz zk-SNARK jeb kodolīgiem neinteraktīviem zināšanu argumentiem, savukārt ASM daļa attiecas uz montāžas kodu. Lai saprastu zk-ASM potenciālu, mums vispirms ir jāsaprot abu šo šķietami noslēpumaino jēdzienu teorētiskie pamati.

zk-SNARKs

zk-SNARK ir zk-Proofs kroņa dārgakmeņi: tie ir īss pierādījums tam, ka noteikts apgalvojums ir patiess, ja pierādījums neko neatklāj par pierādītajiem datiem. Piemēram, pieņemsim, ka kāds apstiprina apgalvojumu “Es zinu m tādu, ka C(m) = 0”, kur m ir gigabaitu garš ziņojums un C ir funkcija. zk-SNARK būtu ļoti īss pierādījums (< 1GB), ko var ātri pārbaudīt un kurā nekas par m netiek atklāts (izņemot publiski pieejamo informāciju) [1].

Tātad, kas ir šis “C(m)”? Kā tas ir noderīgi? Šī funkcija faktiski ir aritmētiskā shēma vai virzīta acikliskā grafika (DAG) attēlojums noteiktai funkcijai, kuru mēs vēlamies veikt, kā parādīts diagrammā [2]. “m” būtībā ir ievades dati ķēdē, un konkrēti ķēdes “mezgli” ir atsevišķi loģiski vārti vai aritmētiskās darbības. Piemēram, “+” mezglam var būt ievades “2” un “3”, un nākamajam operatoram var izvadīt “5”. Tādējādi patvaļīgu aritmētisku vai loģisku darbību var iekodēt “aritmētiskajā shēmā”.

Kad šī aritmētiskā shēma ir koda attēlojums, kurā vēlamies palaist zk-SNARK, mēs varam sākt veidot šo zk-SNARK. Būtībā zk-SNARK ir iespējams, pateicoties “algebras fundamentālajai teorēmai”, kas nosaka, ka “d” pakāpes polinomam ir ne vairāk kā “d” saknes [3]. Matemātiskais triks sastāv no diviem posmiem: (1) kaut kādā veidā pārvērst funkciju “f(m)”, ko mēs vēlamies pierādīt, par polinomu (un pieturēties pie tā), un (2) izmantot “algebras fundamentālo teorēmu”, lai mijiedarbotos. ar polinomu un sniedz īsu pierādījumu. Tehniskajā žargonā pirmo daļu sauc par “Polynomial Commitment Scheme” (PCS), bet otro daļu sauc par “Polynomial Interactive Oracle Proof” (PIOP) [4].

Lai gan konkrētās PCS un PIOP ieviešanas ir ārpus šī raksta darbības jomas, līdz šim esam ieguvuši aptuvenu zk-SNARK galveno darbību skici:

  1. Jums ir izvēles funkcija (koda funkcija, matemātiskais vienādojums utt.), ar kuru vēlaties palaist zk-SNARK

  2. Kodēt šo funkciju kā aritmētisko shēmu C(m)

  3. Palaidiet PCS, lai iegūtu šīs aritmētiskās ķēdes polinomu

  4. Palaidiet PIOP, lai iegūtu īsu logaritmisko pierādījumu oriģinālajam “m”

Un alts, mums ir īpaši izveidots zk-SNARK, kas var pierādīt, ka kāds zina konkrēto ziņojumu, neatklājot, kas tas ir.

Montāžas kods

Otrais zk-ASM mīklas gabals ir Assembly Code ideja. Montāžas kods ir valodu klase, kas satur ļoti zemas valodas instrukcijas, kuras ir viegli nolasīt mašīnai, bet diezgan grūti atšifrēt cilvēkam. Atšķirībā no augstāka līmeņa valodām, piemēram, Python, Java vai pat C, montāžas valodas satur ļoti primitīvas funkcijas, piemēram, pārvietošanu, salīdzināšanu, pievienošanu un pāriet uz virkni datu reģistru procesorā un cieti kodētās atmiņas vietās. Piemēram, Python kods, lai uz ekrāna izdrukātu ciparus no 1 līdz 9, ir 123456789.

Diezgan viegli saprast, vai ne? Tagad šeit ir tā x86 Assembly versija [5]:

Daudz nepatīkamāka, īpaši tik vienkāršai darbībai. Tātad, kāpēc pat izmantot montāžas valodu? Kā minēts iepriekš, lai gan šīs instrukcijas cilvēkiem var nebūt viegli nolasāmas, tās ir ļoti viegli “salikt” 110011001 baita kodā, lai mašīna nolasītu un izpildītu (to sauc par montētāju) [6]. Salīdzinoši runājot, augstāka līmeņa valodas, piemēram, Python un Java, ir daudz draudzīgākas cilvēkiem, taču šajās valodās rakstītās programmas nevar tieši izpildīt ar procesoru. Tā vietā mums jāpaļaujas uz “kompilatoru”, kas uztver mūsu rakstīto Python vai Java kodu un izspiež tādu montāžas koda izgāztuvi, kāds ir iepriekš minētais, lai iekārta to samontētu un izpildītu. Mēs varam sagaidīt, ka viens un tas pats Python vai Java gabals darbosies nevainojami dažādos procesoros un dažādās operētājsistēmās, jo kompilators veic visu nepieciešamo, apkopojot jūsu avota kodu Assembly valodā, kas raksturīga šim procesoram vai operētājsistēmai.

Tā kā visas valodas tiek kompilētas līdz montāžas kodam (kas pats tiek kompilēts līdz izpildāmam bināram kodam), montāža būtībā ir kā “visu valodu māte”. Tagad pieņemsim, ka mēs varam pārvērst visus operandus montāžas valodā (piemēram, x86 vai RISC-V) aritmētiskā shēmas attēlojumā, lai mēs varētu nodrošināt zk-SNARK pierādījumus visiem operandiem šajā asamblejā. valodu. Tas nozīmē, ka mēs teorētiski varam nodrošināt zk-SNARK jebkurai programmai, kas rakstīta patvaļīgā augsta līmeņa valodā (piemēram, Python vai Java), kas tiek kompilēta līdz šai montāžas valodai. Un tāpēc mums ir jādomā par zk-ASM.

Praktiski pielietojumi

zk-EVM apkopojumi: daudzstūris zk-ASM

Viena no svarīgākajām zk-ASM lietojumprogrammām ir ar Ethereum virtuālo mašīnu saderīgu zk-Rollups jeb zk-EVM izveide. Zk-EVM ir neticami svarīgs blokķēdes mērogojamībai, jo tas ļauj programmētājiem izmantot zk-Rollup balstītu L2 ķēdi, nemainot lielu daļu sava koda (ja tāds ir) [7]. Šajā jomā Polygon's zk-EVM ir piemērs gadījuma izpētei, kas parāda, kā zk-ASM var izmantot šī mērķa sasniegšanai.

Kad programmētāji izstrādā Ethereum L1 blokķēdi, viņi parasti kodē Solidity, kas ir augsta līmeņa valoda, kas ir līdzīga C. Šis Solidity kods pirms izpildes tiek apkopots EVM opkodu sērijā, piemēram, ADD, SLOAD un EQ. L1 blokķēdē [8]. Pēc noklusējuma šis process acīmredzami nerada nekāda veida zk-Proof. Daudzstūra triks ir izveidot metodi, lai interpretētu katru no EVM opkodiem to pielāgotajā zk-ASM, kas ir ļoti zk-SNARK draudzīgs. Pēc tam viņu L2 zk-EVM izpildīs zk-ASM, vienlaikus izveidojot arī ASM zk-SNARK ķēdi, lai izveidotu zk-SNARK pierādījumu [9]. Piemēram, ADD operācijas kods EVM tiks pārtulkots daudzstūra zk-ASM šādi [10]:

Tā kā Polygon zk-EVM viltība notiek montāžas līmenī, tas ir divi līmeņi, kas tiek noņemti no koda, kuram pieskaras vidusmēra Ethereum programmētājs, tas ir “Solidity” līmenis. Tas ir iemesls, kāpēc lielākā daļa izstrādātāju var pārsūtīt savu Ethereum tīklam izveidoto EVM kodu tieši uz Polygon zk-EVM. Turklāt, tā kā Polygon zk-EVM “saglabā” Ethereum tehnoloģiju kopu līdz operētājkoda līmenim, visa atkļūdošanas infrastruktūra, kas balstās uz kompilēto operāciju kodu analīzi, tiks saglabāta lietojama un neskarta. Tas atšķiras no dažiem citiem zk-EVM dizainiem, piemēram, zk-Sync, kas nenodrošina zk-Proofs opkoda līmenī. Tādējādi, pat ja Polygon izgudro un pierāda savu montāžas valodu, Vitaliks raksta, ka "tas joprojām var pārbaudīt EVM kodu, tas tikai izmanto atšķirīgu iekšējo loģiku, lai to izdarītu" [11].

Beyond Rollups: zk-WASM

zk-EVM nekādā gadījumā nav vienīgā zk-ASM lietojumprogramma. Atgādiniet mūsu iepriekšējo apgalvojumu, ka asamblejas valodas būtībā ir "visu valodu mātes" un ka zk-ASM izveide atbloķēs zk-Proofs vispārīgām programmām, kas rakstītas jebkurā valodā, kas tiek kompilēta šajā asamblejas valodā. Web Assembly jeb WASM ir viena no svarīgākajām topošajām montāžas valodām. Pirmo reizi publicēts 2018. gadā, WASM mērķis ir izveidot montāžas valodu, kas palielināja Web Apps izpildes ātrumu un nodrošināja Javascript, primārās kodēšanas valodas, kas ir tīmekļa pamatā, izpildes papildinājumu [12].

Būtībā, tīmeklim gadu gaitā attīstoties, Web Apps pieaugošais lielums un sarežģītība ir novedusi pie tā, ka bieži vien pārlūkprogrammas neticami lēni apkopo visu Javascript rakstīto, un tām ir jāpaļaujas uz sarežģītiem kompilēšanas-optimizēšanas-pārlādēšanas cikliem [12]. No otras puses, WebAssembly novērš nepieciešamību paļauties uz sarežģītiem pārlūkprogrammas izpildes dzinējiem, nodrošinot pārnēsājamu, modulāru un viegli izpildāmu montāžas valodu. Turklāt kā montāžas valoda WASM ļauj programmētājiem tieši rakstīt koda fragmentus C, C++, Rust, Java vai Ruby valodā, kas darbojas pārlūkprogrammā. Tāpēc WASM ir kļuvusi par izvēlētu tehnoloģiju “izplatītu bezserveru funkciju nodrošināšanai” [13].

Tātad, kāpēc un kā zk-SNARKs nonāk attēlā? WASM ir unikāla ar to, ka tā ir klienta puses tehnoloģija, kas spēj tieši mijiedarboties ar lietotāja ievadi un datiem. Tā kā bieži vien tas ietver sensitīvus datus, piemēram, paroles un personisko informāciju, mums ir nepieciešama tehnoloģija, kas (1) nodrošina programmas pareizu izpildi un (2) mūsu sensitīvās informācijas noplūdi. Kā aprakstīts iepriekš, zk-SNARK ir ideāls risinājums abu šo problēmu risināšanai, un tādējādi tas ir svarīgs mīklas gabals WASM nodrošināšanā [14].

Lai gan darbs pie zk-WASM izstrādes joprojām ir agrīnā stadijā, nesen ir bijuši daži projekti, kas ir izlaiduši zk-SNARK shēmu prototipu WebAssembly. Piemēram, Delphinus Lab “ZAWA” zk-SNARK emulators piedāvā metodi WASM virtuālās mašīnas operandu un semantikas kodēšanai aritmētiskā shēmā, kas ļauj tai veikt zk-SNARK pierādījumus [13]. Laikam ejot, zk-WASM shēmas neapšaubāmi tiks nepārtraukti optimizētas, tādējādi ļaujot programmām, kas rakstītas vispārīgās valodās (piemēram, C, C++, Rust un Ruby), pieņemt zk-Proofs paradigmu.

Secinājums

Visā šajā esejā mēs esam izpētījuši zk-ASM teorētiskos pamatus, kā arī izpētījuši divus paradigmatiskus zk-ASM gadījumu izpēti: zk-ASM daudzstūris izmanto, lai izveidotu opkoda līmeņa zk-EVM, kā arī zk pielietojums. -SNARKs uz WebAssembly, lai izveidotu zk-WASM. Galu galā zk-ASM solījums ir apvienot Web 2 savietojamību un mērogu ar Web 3 neuzticamību un drošību.

No vienas puses, blokķēdes arvien vairāk cenšas pārsniegt pašreizējos caurlaidspējas šķēršļus un potenciāli atbalsta izpildi, savukārt, no otras puses, Web 2 metodes tiek arvien vairāk pakļautas uzbrukumiem, jo ​​tās nepietiekami aizsargā lietotāju datus un privātumu. Tā kā programmētāji var izmantot Web 3 dizaina paradigmas savā Web 2 kodā un ieviest Web 2 valodas un kodu blokķēdē, vispārīgie zk-ASM var būt saplūdes punkts Web 2 un Web 3 pasaulē [15]. Šajā ziņā zk-ASM var ļaut mums no jauna iztēloties drošāku un neuzticamāku internetu.

🐦 @0xfishylosopher

📅 2022. gada 17. decembris

Atruna: iepriekš sniegtā informācija ir tikai izglītojoša, tā nav finansiāla konsultācija, un tā atspoguļo tikai autora uzskatus. Delphinus Lab ir Web3.com Ventures portfeļa uzņēmums.

Atsauces

[1] https://z.cash/technology/zksnarks/

[2] https://cs251.stanford.edu/lectures/lecture14.pdf

[3] https://www.britannica.com/science/fundamental-theorem-of-algebra

[4] Efektīvu SNARK izveide: https://cs251.stanford.edu/lectures/lecture15.pdf

[5] Piemērs no: https://www.tutorialspoint.com/assembly_programming/assembly_loops.htm

[6] https://en.wikipedia.org/wiki/Assembly_language

[7] https://www.alchemy.com/overviews/zkevm

[8] Opkodu saraksts: https://ethereum.org/en/developers/docs/evm/opcodes/

[9] https://wiki.polygon.technology/docs/zkEVM/zkASM/introduction

[10] https://wiki.polygon.technology/docs/zkEVM/zkASM/some-examples

[11] https://vitalik.ca/general/2022/08/04/zkevm.html

[12] https://blog.developer.adobe.com/understanding-webassembly-wasm-d5b592208ecc

[13] https://jhc.sjtu.edu.cn/~hongfeifu/manuscriptb.pdf

[14] https://hyperoracle.medium.com/zkwasm-the-next-chapter-of-zk-and-zkvm-471038b1fba6

[15] https://delphinuslab.com/zk-wasm/