Jak může zk-ASM poskytovat bezpečný a důvěryhodný internet

Web3.com Ventures Original Research Analysis

0xFishylosopher

Poznámka: Tento článek je poměrně technicky obsáhlý kus a předpokládá základní koncepční znalost zk-Proofs a/nebo zk-rollups. Obecnější úvod k těmto principům naleznete zde.

Úvod

Zero Knowledge Proofs, zejména zk-SNARKs (Succinct Non-interactive Arguments of Knowledge) je možná jednou z nejdůležitějších technologií na hranicích Web 3. Zatímco většina mediální a investiční pozornosti v této dílčí oblasti se obrátila k zk - Rollups, škálovací řešení, která poskytují velkou škálovatelnost pro L1 blockchainy, jako je Ethereum, to v žádném případě není jediná aplikace zk-SNARK. V této eseji budu do hloubky analyzovat koncept kódu Zero-Knowledge Assembly (neboli zkASM), zhodnotím jeho případy použití v zk-rollups i mimo něj a prozkoumám jeho teoretické možnosti při znovuobjevení internetu, jak ho známe.

Technické principy

zk-ASM, jak jeho název napovídá, obsahuje dvě hlavní technické části: ZK a ASM. Část ZK odkazuje na zk-SNARKs nebo Succinct Non-Interactive Arguments of Knowledge, zatímco část ASM odkazuje na kód shromáždění. Abychom pochopili potenciál zk-ASM, musíme nejprve pochopit teoretické základy obou těchto zdánlivě tajemných konceptů.

zk-SNARKs

Zk-SNARK jsou korunovační klenoty zk-Proofs: jsou stručným důkazem, že určité tvrzení je pravdivé, pokud důkaz neodhaluje nic o dokazovaných datech. Vezměme si například někoho, kdo tvrdí tvrzení „znám m takové, že C(m) = 0“, kde m je gigabajt dlouhá zpráva a C je funkce. Zk-SNARK by byl velmi krátkým důkazem (< 1 GB), který lze rychle ověřit, a důkazem, kde není nic o m odhaleno (mimo veřejně dostupné informace) [1].

Takže co je to „C(m)“? Jak je to užitečné? Tato funkce je ve skutečnosti aritmetickým obvodem nebo řízeným acyklickým grafem (DAG) znázorněním konkrétní funkce, kterou chceme provést, jak ukazuje schéma [2]. „m“ jsou v podstatě vstupní data do obvodu a konkrétní „uzly“ v obvodu jsou jednotlivá logická hradla nebo aritmetické operace. Například uzel „+“ může mít jako vstupy „2“ a „3“ a na další operátor může být výstup „5“. Libovolná aritmetická nebo logická operace tedy může být zakódována v „aritmetickém obvodu“.

Jakmile máme tento aritmetický obvod jako reprezentaci kódu, na kterém chceme spustit zk-SNARK, můžeme začít tento zk-SNARK stavět. Zk-SNARK je v zásadě možný díky „základnímu teorému algebry“, který říká, že polynom stupně „d“ má nejvýše „d“ kořeny [3]. Matematický trik spočívá ve dvou krocích: (1) nějak převést funkci „f(m)“, kterou chceme dokázat, na polynom (a toho se držet), a (2) použít „základní větu algebry“ k interakci. s polynomem a poskytnout stručný důkaz. V technickém žargonu se první část nazývá „Polynomial Commitment Scheme“ (PCS) a druhá část se nazývá „Polynomial Interactive Oracle Proof“ (PIOP) [4].

Zatímco konkrétní implementace PCS a PIOP jsou mimo rozsah tohoto článku, zatím jsme odvodili hrubý náčrt pro základní kroky zk-SNARK:

  1. Mít funkci výběru (funkce kódu, matematická rovnice atd.), kterou chcete spustit zk-SNARK

  2. Zakódujte tuto funkci jako aritmetický obvod C(m)

  3. Spusťte PCS, abyste získali polynomickou reprezentaci tohoto aritmetického obvodu

  4. Spusťte PIOP, abyste získali stručnou logaritmickou logaritmickou velikost k původnímu „m“

A violo, máme vlastní zk-SNARK, který dokáže dokázat, že někdo zná danou zprávu, aniž by prozradil, co to je.

Montážní kód

Druhým kouskem skládačky zk-ASM je myšlenka Assembly Code. Assembly code je třída jazyků obsahujících velmi nízkojazyčné instrukce, které jsou pro stroj snadno čitelné, ale pro člověka je poměrně obtížné je dešifrovat. Na rozdíl od jazyků vyšší úrovně, jako je Python, Java nebo dokonce C, jazyky assembleru obsahují velmi primitivní funkce, jako je přesun, porovnání, přidání a skok na sérii datových registrů na procesoru a na pevně zakódovaných paměťových místech. Například kód Pythonu pro tisk čísel 1 až 9 na obrazovce je 123456789:

Docela snadno pochopitelné, že? Nyní je zde jeho verze x86 Assembly [5]:

Mnohem ošklivější, zvláště pro tak jednoduchou operaci. Tak proč vůbec používat jazyk symbolických instrukcí? Jak je uvedeno výše, i když tyto pokyny nemusí být pro člověka snadno čitelné, lze je velmi snadno „sestavit“ do 110011001 bytového kódu, aby je stroj mohl číst a spouštět (toto se nazývá assembler) [6]. Ve srovnání s tím, jazyky vyšší úrovně, jako je Python a Java, jsou pro člověka mnohem příjemnější, ale programy napsané v těchto jazycích nemohou být přímo spouštěny procesorem. Místo toho se musíme spolehnout na „kompilátor“, který žvýká Python nebo Java kód, který píšeme, a chrlí skládku kódu sestavení, jako je ten výše, který má být sestaven a spuštěn strojem. Můžeme očekávat, že stejný kus Pythonu nebo Javy bude hladce běžet na různých procesorech a různých operačních systémech, protože kompilátor udělá těžkou práci a zkompiluje váš zdrojový kód do jazyka assembleru specifického pro daný procesor nebo operační systém.

Protože všechny jazyky se kompilují do kódu assembleru (který se sám kompiluje do spustitelného binárního kódu), je assemble v podstatě jako „matka všech jazyků“. Nyní předpokládejme, že jsme schopni převést všechny operandy v jazyce assembler (jako je x86 nebo RISC-V) na reprezentaci aritmetického obvodu, takže jsme schopni poskytnout zk-SNARK důkazy všech operandů v tomto shromáždění. Jazyk. To znamená, že jsme teoreticky schopni poskytnout zk-SNARK jakéhokoli programu napsaného v libovolném vysokoúrovňovém jazyce (jako je Python nebo Java), který se zkompiluje do tohoto jazyka assembleru. A to je důvod, proč musíme myslet na zk-ASM.

Praktické aplikace

zk-EVM Rollups: Polygon zk-ASM

Jednou z nejdůležitějších aplikací pro zk-ASM je vytváření zk-rollups nebo zk-EVM kompatibilních s Ethereum Virtual Machine. Zk-EVM je neuvěřitelně důležitý pro škálovatelnost blockchainu, protože umožňuje programátorům nasadit se na řetěz L2 založený na zk-Rollup, aniž by hodně (pokud vůbec nějaké) upravovali svůj kód [7]. V této oblasti je Polygonův zk-EVM příkladnou případovou studií, která ukazuje, jak lze zk-ASM použít k dosažení tohoto cíle.

Když programátoři vyvíjejí na blockchainu Ethereum L1, obvykle kódují v Solidity, což je jazyk na vysoké úrovni podobný jazyku C. Tento kód Solidity je před spuštěním zkompilován do řady operačních kódů EVM, jako jsou ADD, SLOAD a EQ. na L1 blockchainu [8]. Ve výchozím nastavení tento proces zjevně nevytváří žádný druh zk-Proof. Trik Polygonu je vytvořit metodu pro interpretaci každého z operačních kódů EVM do jejich vlastního napsaného zk-ASM, což je velmi přátelské k zk-SNARK. Poté jejich L2 zk-EVM provede zk-ASM a zároveň vytvoří obvod zk-SNARK ASM za účelem vytvoření důkazu zk-SNARK [9]. Například operační kód ADD v EVM bude přeložen do Polygonova zk-ASM následovně [10]:

Protože se Polygon zk-EVM lstí na úrovni shromáždění, jsou z kódu odstraněny dvě úrovně, kterých se průměrný programátor Etherea dotýká, úroveň „pevnosti“. To je důvod, proč většina vývojářů může přenést svůj kód EVM vytvořený pro hlavní síť Ethereum přímo na Polygon zk-EVM. Navíc, protože Polygon zk-EVM „udržuje“ technologickou sadu Etherea na úrovni operačních kódů, veškerá infrastruktura ladění, která se spoléhá na analýzu zkompilovaných operačních kódů, zůstane použitelná a nedotčená. To je na rozdíl od některých jiných návrhů zk-EVM, jako je zk-Sync, který neposkytuje důkazy zk na úrovni operačních kódů. I když Polygon vynalézá a dokazuje svůj vlastní jazyk assembleru, Vitalik píše, že „stále může ověřit EVM kód, jen k tomu používá jinou vnitřní logiku“ [11].

Beyond Rollups: zk-WASM

zk-EVM nejsou v žádném případě jedinou aplikací pro zk-ASM. Připomeňme si naše předchozí tvrzení, že jazyky assembleru jsou v podstatě „matkou všech jazyků“ a že vytvoření zk-ASM odemkne zk-proofs pro generické programy napsané v jakémkoli jazyce, který se do tohoto jazyka assembleru zkompiluje. Web Assembly, neboli WASM, je jedním z nejdůležitějších vznikajících jazyků assembleru. Smyslem WASM, který byl poprvé publikován v roce 2018, je vytvořit jazyk assembleru, který zvýšil rychlost provádění webových aplikací a poskytl exekuční doplněk Javascriptu, primárního kódovacího jazyka za webem [12].

Jak se web v průběhu let vyvíjel, rostoucí velikost a složitost webových aplikací v podstatě znamenala, že pro prohlížeče je často neuvěřitelně pomalé kompilovat vše napsané v Javascriptu a musí se spoléhat na složité cykly kompilace-optimalizace-znovunačítání [12]. WebAssembly na druhé straně odstraňuje potřebu spoléhat se na složité spouštěcí motory prohlížeče tím, že poskytuje přenosný, modulární a snadno spustitelný jazyk assembleru. Navíc jako jazyk assembleru umožňuje WASM programátorům přímo psát úryvky kódu v C, C++, Rust, Java nebo Ruby, které běží nativně v prohlížeči. WASM se proto stal technologií volby pro „poskytování distribuovaných funkcí bez serveru“ [13].

Proč a jak se tedy zk-SNARKy dostávají do obrazu? WASM je unikátní v tom, že jde o technologii na straně klienta, která je schopna přímo interagovat s uživatelskými vstupy a daty. Protože to často zahrnuje citlivá data, jako jsou hesla a osobní údaje, potřebujeme technologii, která (1) zajistí, že se program spustí správně, a že (2) naše citlivé informace neuniknou. Jak je popsáno výše, zk-SNARK je dokonalým řešením pro vyřešení obou těchto problémů, a je tedy důležitým kouskem skládačky při zajišťování WASM [14].

Zatímco práce na vývoji zk-WASM jsou stále v rané fázi, nedávno se objevily některé projekty, které vydaly prototyp obvodů zk-SNARK pro WebAssembly. Například „ZAWA“ zk-SNARK Emulator společnosti Delphinus Lab představuje metodu kódování operandů a sémantiky virtuálního stroje WASM do aritmetického obvodu, což mu umožňuje provádět důkazy zk-SNARK [13]. Postupem času budou obvody zk-WASM nepochybně neustále optimalizovány, což umožní programům napsaným v obecných jazycích (jako je C, C++, Rust a Ruby) přijmout paradigma zk-Proofs.

Závěr

V této eseji jsme prozkoumali teoretické základy zk-ASM a také jsme prozkoumali dvě paradigmatické případové studie zk-ASM: Polygonové použití zk-ASM k vytvoření zk-EVM na úrovni operačního kódu a také aplikaci zk -SNARKs na WebAssembly k vytvoření zk-WASM. Příslibem zk-ASM je nakonec dát dohromady interoperabilitu a rozsah Web 2 s důvěryhodností a bezpečností Web 3.

Na jedné straně se blockchainy stále více snaží škálovat za hranice svých současných úzkých míst propustnosti a potenciálně podporovat provádění, zatímco na druhé straně jsou metody Web 2 stále více pod útoky kvůli nedostatečné ochraně uživatelských dat a soukromí. Vzhledem k tomu, že programátoři jsou schopni použít designová paradigmata Web 3 ve svém kódu Web 2 a zavést jazyky a kód Web 2 do blockchainu, mohou generické zk-ASM představovat slučovací bod ve světě Webu 2 a Webu 3 [15]. Právě v tomto smyslu nám zk-ASM může umožnit přetvořit si bezpečnější a důvěryhodnější internet.

🐦 @0xfishylosopher

📅 17. prosince 2022

Upozornění: výše uvedené informace jsou čistě vzdělávací, nepředstavují finanční poradenství a představují pouze názory autora. Delphinus Lab je portfoliovou společností společnosti Web3.com Ventures.

Reference

[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] Budování efektivních SNARKů: https://cs251.stanford.edu/lectures/lecture15.pdf

[5] Příklad z: 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] Seznam operačních kódů: 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/