Domov
Články
Zlepšenie transparentnosti kryptomien použitím dôkazu s nulovou znalosťou

Zlepšenie transparentnosti kryptomien použitím dôkazu s nulovou znalosťou

Stredne pokročilý
Zverejnené Feb 10, 2023Aktualizované Jan 5, 2024
10m

Zhrnutie

Dôkaz s nulovou znalosťou (ZKP) umožňuje jednej strane (overovateľovi) určiť platnosť vyhlásenia iného subjektu (dokazovateľa) bez toho, aby vedel čokoľvek o obsahu vyhlásenia. Napríklad Binance môže chcieť dokázať, že v plnej miere kryje prostriedky svojich používateľov v rezervách bez toho, aby odhalila všetky zostatky jednotlivých používateľov.

„Doklad o rezervách“ by mohol byť vytvorený pomocou stromu Merkle, ktorý chráni pred falšovaním jeho interných údajov, v tomto prípade jeho celkových čistých zostatkov zákazníkov, ktoré sú záväzkami burzy voči jej používateľom. Toto sa potom môže skombinovať s protokolom zk-SNARK (protokol dôkazu s nulovou znalosťou), ktorý zaisťuje, že používatelia môžu kontrolovať svoj zostatok ako súčasť celkového čistého zostatku aktív používateľov bez toho, aby poznali jednotlivé zostatky.

Úvod

Vo svetle udalostí na trhu sa bezpečnosť kryptoaktív v úschove stala mimoriadne dôležitou témou. Používatelia blockchainov vysoko oceňujú transparentnosť a otvorenosť, zároveň však podporujú súkromie a dôvernosť. Vzniká tak dilema pri preukazovaní rezerv finančných prostriedkov držaných správcami. Často je potrebný kompromis medzi transparentnosťou, dôverou a dôvernosťou údajov.

Nemusí to tak však byť. Kombináciou protokolov dôkazu s nulovou znalosťou (napr. zk-SNARK) so stromami Merkle môžeme nájsť riešenie, ktoré je efektívne pre všetky strany.

Čo je dôkaz s nulovou znalosťou?

Dôkaz s nulovou znalosťou umožňuje jednej strane (overovateľovi) určiť platnosť vyhlásenia iného subjektu (dokazovateľa) bez toho, aby vedel čokoľvek o obsahu vyhlásenia. Poďme sa pozrieť na jednoduchý príklad.

Máte zamknutý trezor. Kód na jeho otvorenie poznáte len vy. Trezor, pre tento príklad, nie je možné zdvihnúť, násilne doň vniknúť alebo ho otvoriť iným spôsobom, ako použitím správneho kódu. Túto skutočnosť potvrdzuje, overuje a pozná aj váš priateľ, ktorý sa zúčastňuje experimentu.

Svojmu priateľovi poviete, že kód poznáte, ale nechcete ho prezradiť ani otvoriť krabičku pred ním. V hornej časti krabičky je otvor, cez ktorý môže váš priateľ vložiť dovnútra poznámku. Aby išlo o dôkaz s nulovou znalosťou, váš priateľ by nemal mať žiadne ďalšie informácie o postupe okrem daného vyhlásenia.

Svojmu priateľovi môžete dokázať, že kód poznáte tak, že otvoríte krabičku, poviete mu, čo je napísané na lístku, a krabičku znova zatvoríte. V žiadnom momente ste však neprezradili kód.

Pokročilejší príklad nájdete v našom článku Čo je dôkaz s nulovou znalosťou a ako ovplyvňuje blockchain?.

Prečo používame dôkaz s nulovou znalosťou?

Dôkazy s nulovou znalosťou sú vhodné na dokázanie niečoho bez odhalenia citlivých informácií alebo detailov. Môže ísť napríklad o to, že nechcete odovzdať svoje finančné alebo osobné informácie, ktoré by mohli byť zneužité.

V kryptomenách môžete dokázať, že vlastníte súkromný kľúč bez toho, aby ste ho odhalili alebo niečo digitálne podpísali. Kryptoburza môže tiež chcieť preukázať stav svojich rezerv bez toho, aby odhalila dôverné informácie o svojich používateľoch vrátane ich individuálnych zostatkov na účtoch. 

Pre tieto príklady (a mnoho ďalších) by dôkaz s nulovou znalosťou používal algoritmy, ktoré prijímajú vstup údajov a ako výstup dávajú tvrdenie „pravda“ alebo „nepravda“. 

Definovanie dôkazov s nulovou znalosťou technickou rečou

V technickej reči dôkaz s nulovou znalosťou postupuje podľa špecifickej štruktúry s určitými kritériami. Už sme si povedali o úlohách overovateľa a dokazovateľa, existujú však aj 3 kritériá, ktoré by dôkaz s nulovou znalosťou mal pokrývať:

  1. Úplnosť. Ak je tvrdenie pravdivé, overovateľa presvedčí poskytnutý dôkaz bez potreby ďalších informácií alebo overovania.

  2. Spoľahlivosť. Ak je tvrdenie nepravdivé, overovateľa nepresvedčí o pravdivosti tvrdenia poskytnutý dôkaz.

  3. Nulová znalosť. Ak je tvrdenie pravdivé, overovateľ sa nedozvie žiadne iné informácie okrem toho, že tvrdenie je pravdivé.

Čo je zk-SNARK?

zk-SNARK (súhrnný neinteraktívny dôkaz znalosti s nulovou znalosťou) je dôkazový protokol, ktorý sa riadi vyššie uvedenými princípmi nulovej znalosti. Pomocou protokolu zk-SNARK by ste mohli dokázať, že poznáte pôvodnú hašovanú hodnotu (o ktorej sa bude hovoriť nižšie) bez toho, aby ste odhalili, čo to je. Môžete tiež preukázať platnosť transakcie bez toho, aby ste prezradili akékoľvek informácie o konkrétnych sumách, hodnotách alebo adresách transakcie.

Protokoly zk-SNARK sa bežne používajú a hovorí sa o nich vo svete blockchainukryptomien. Možno sa však pýtate, prečo by sa niekto obťažoval používaním protokolov zk-SNARK, keď na zabezpečenie informácií by mohol použiť jednoduchú metódu párovania verejného a súkromného kľúča. Neboli by sme však schopní implementovať matematický dôkaz, aby sme zabezpečili, že v súčte stromu Merkle nebudú zahrnuté žiadne záporné zostatky. 

V prípade rezerv burzy chceme preukázať krytie zostatkov zákazníkov v pomere 1:1 bez toho, aby boli zverejnené identifikátory a zostatky každého účtu. Navyše, vďaka technológii zk-SNARK je falšovanie údajov ešte nepravdepodobnejšie.

Čo je strom Merkle?

Vykázanie súhrnu prostriedkov na účtoch používateľov Binance si vyžaduje prácu s veľkým súborom údajov. Jedným zo spôsobov, ako prezentovať toto veľké množstvo údajov kryptograficky, je použiť strom Merkle. V ňom možno efektívne uložiť obrovské množstvo informácií a vďaka kryptografickej povahe je jeho integrita ľahko overiteľná.

Hašovacie funkcie

Aby bolo možné stručne zakódovať vstup, strom Merkle závisí na používaní hašovacích funkcií. V krátkosti, hašovanie označuje proces generovania výstupu s pevnou veľkosťou zo vstupu s premenlivou veľkosťou. Inými slovami, keď je vstup akejkoľvek dĺžky hašovaný pomocou algoritmu, vytvorí sa šifrovaný výstup s pevnou dĺžkou.

Pokiaľ vstup zostáva rovnaký, rovnaký zostáva aj výstup. To znamená, že môžeme zobrať obrovské množstvo údajov o transakciách a zahašovať ich do zvládnuteľného výstupu. Ak sa na vstupe zmení akákoľvek informácia, výstup sa bude radikálne odlišovať.

Napríklad by sme mohli vziať obsah 100 kníh a vložiť ho do hašovacej funkcie SHA-256. Ako výstup by sme dostali niečo takéto:

801a9be154c78caa032a37b4a4f0747f1e1addb397b64fa8581d749d704c12ea

Ak by sme potom zmenili jeden znak vstupu (tých 100 kníh), haš by bol úplne iný, napríklad:

abc5d230121d93a93a25bf7cf54ab71e8617114ccb57385a87ff12872bfda410

To je dôležitá vlastnosť hašovacích funkcií, pretože umožňuje jednoduché overenie presnosti údajov. Ak niekto zopakuje proces hašovania tých istých 100 kníh pomocou algoritmu SHA-256, dostane presne rovnaký haš ako výstup. Ak je výstup iný, môžeme s istotou potvrdiť, že vstup bol zmenený. To znamená, že nie je potrebné individuálne alebo manuálne kontrolovať rozdiely medzi vstupmi, čo môže byť fyzicky veľmi náročné.

Stromy Merkle vo svete kryptomien

Pri ukladaní údajov o transakciách na blockchaine sa každá nová transakcia odošle prostredníctvom hašovacej funkcie, ktorá generuje jedinečné hašovacie hodnoty. Predstavte si, že máme osem transakcií (A až H), ktoré individuálne hašujeme, aby sme získali ich hašované výstupy. Toto nazývame uzly listov stromu Merkle. Na obrázku nižšie môžete vidieť jedinečnú hodnotu hašu každého písmena: hA pre A, hB pre B, hC pre C atď.

Potom môžeme vziať páry hašovaných výstupov, skombinovať ich a získať nový hašovaný výstup. Napríklad zahašovaním hA a hB hašovaných spoločne by sme získali nový hašovaný výstup hAB známy ako vetva stromu Merkle. Všimnite si, že zakaždým, keď sa vygeneruje nový výstup, jeho dĺžka a veľkosť sú pevné podľa použitej hašovacej funkcie.

Teraz máme údaje dvoch transakcií (napr. A a B) skombinované do jedného hašu (hAB). Všimnite si, že ak zmeníme akúkoľvek informáciu z A alebo B a proces zopakujeme, náš hašovaný výstup hAB by bol úplne iný.

Postup pokračuje, keď skombinujeme nové páry hašov, aby sme ich znova zahašovali (pozri obrázok nižšie). Zahašujeme hAB s hCD, aby sme získali jedinečný haš hABCD. To isté urobíme s hEF a hGH, aby sme získali hEFGH. Nakoniec dostaneme jeden haš predstavujúci zahašované výstupy hašov všetkých predchádzajúcich transakcií. Inými slovami, zahašovaný výstup hABCDEFGH predstavuje všetky informácie, ktoré mu predchádzali.

Vyššie znázornená schéma sa nazýva strom Merkle a zahašovaný výstup hABCDEFGH je koreň Merkle. Korene Merkle používame v hlavičkách blokov, pretože kryptograficky sumarizujú všetky údaje o transakcii do bloku stručným spôsobom. Môžeme tiež rýchlo overiť, či došlo k zásahu do údajov alebo zmene údajov v rámci bloku.

Obmedzenia stromov Merkle

Vráťme sa k nášmu príkladu rezerv CEX. CEX chce dokázať, že všetky aktíva jej zákazníkov sú kryté v pomere 1:1 a vytvorí strom Merkle, ktorý spojí identifikátory UID zákazníkov s ich držanými aktívami (započítanie aktív a pasív) na úrovni tokenov. Po zverejnení (a podpísaní na preukázanie vlastníctva poskytnutého koreňa Merkle) nebude mať individuálny používateľ možnosť skontrolovať, či je strom Merkle platný bez prístupu ku všetkým jeho vstupom.

Burza mohla vynechať niektoré vstupy. Mohla by tiež vytvoriť falošné účty so zápornými zostatkami na zmenu celkového záväzku. Napríklad, hoci aktíva zákazníkov môžu dosiahnuť hodnotu 1 000 000 USD, je možné pridať falošný účet so zostatkom -500 000 USD. Tým by sa vytvoril cieľ rezerv vo výške iba 500 000 USD.

Dôkaz o rezervách sa od koreňa Merkle líši, pretože používatelia môžu vidieť všetky transakcie, ktoré blok obsahuje, v prieskumníkovi blockchainu. Z dôvodov bezpečnosti a ochrany osobných údajov však CEX nebude chcieť zverejniť každý zostatok na účte. Ani zákazníci by neboli príliš nadšení so zverejnením ich zostatkov na účte. V tomto prípade CEX nemôže dokázať, že súčet zostatkov používateľov je správny bez toho, aby nezviditeľnila zostatky ostatných používateľov.

Jedným z riešení, ktoré môžu burzy zvážiť, je použitie dôveryhodného audítora tretej strany. Audítor môže skontrolovať jednotlivé účty a rezervy pred konečným potvrdením platnosti poskytnutého koreňa Merkle. Pre používateľov však táto metóda vyžaduje dôveru v audítora a údaje použité na audit. Keď môžete údajom dôverovať, nemusíte sa spoliehať na tretiu stranu.

Kombinácia protokolov zk-SNARK so stromami Merkle

Vyššie uvedený problém je dokonalým prípadom použitia protokolov zk-SNARK. Chceme dokázať, že rezervy plne pokrývajú záväzky používateľov a nie sú sfalšované. Z dôvodu ochrany osobných údajov a bezpečnosti však nechceme overovateľovi ukázať presné sumy zostatkov a rezerv používateľov. 

Použitím protokolu zk-SNARK môže kryptoburza dokázať, že všetky sady zostatkov uzlov listov stromu Merkle (t. j. zostatky na používateľských účtoch) sú súčasťou celkového zostatku používateľských aktív burzy. Každý používateľ má ľahký prístup k svojmu uzlu listu, ako keby bol zahrnutý do procesu. Protokol zk-SNARK tiež zaisťuje, že žiadny vygenerovaný strom Merkle neobsahuje používateľov so záporným celkovým čistým zostatkom aktív (čo by znamenalo falšovanie údajov, pretože všetky pôžičky sú nadmerne zabezpečené). Používa sa aj výpočet globálneho stavu Binance, t. j. zoznam celkového čistého zostatku každého aktíva, ktoré vlastní každý zákazník Binance.

Poďme sa pozrieť na to, ako k takejto situácii pristupuje Binance. Na začiatok Binance definuje ohraničenia výpočtu, ktoré chce dokázať, a definuje ich ako programovateľný obvod. Nižšie je uvedený súbor troch ohraničení, ktoré Binance používa vo svojom modeli. 

Pre zostavu zostatku každého používateľa (uzol listu stromu Merkle) náš obvod zaisťuje, že:

  1. Zostatky aktív používateľa sú zahrnuté do výpočtu súčtu celkových čistých zostatkov používateľov na Binance.

  2. Celkový čistý zostatok používateľa je väčší alebo sa rovná nule.

  3. Zmena koreňa stromu Merkle je platná (t. j. nepoužíva sfalšované informácie) po aktualizácii informácií používateľa na haš uzla listu.

Binance potom môže vygenerovať dôkaz zk-SNARK pre konštrukciu stromu Merkle podľa obvodu. To znamená, že burza uskutočňuje náročné výpočty hašovania identifikačných údajov používateľov a zostatkov, pričom zabezpečuje, aby dôkaz splnil ohraničenia.

Overovateľ preskúma dôkaz (a jeho verejne zverejnený otvorený zdrojový kód), aby sa presvedčil, že výpočet je vykonaný so splnenými všetkými ohraničeniami. V porovnaní s časom dokazovania trvá overovací výpočet extrémne krátko.

Pri každom vydaní dokladu o rezervách burza zverejňuje:

1. Dôkaz Merkle pre každého užívateľa.

2. Dôkaz zk-SNARK a verejný vstup (haš zoznamu celkového čistého zostatku každého aktíva a stromu Merkle) okruhu pre všetkých používateľov.

Zainteresované strany si môžu overiť dôkaz Merkle a presvedčiť sa, že ich individuálne zostatky sú súčasťou koreňa stromu Merkle. Môžu tiež overiť dôkaz zk-SNARK, aby zabezpečili, že konštrukcia stromu Merkle spĺňa obmedzenia definované v obvode. Podrobnejšie vysvetlenie riešenia zk-SNARK a jeho fungovania nájdete v našom blogu Ako protokoly zk-SNARK zlepšujú systém dôkazu o rezervách Binance.

Záverečné myšlienky

Protokoly zk-SNARK poskytujú technológiu potrebnú na zabezpečenie integrity údajov aj súkromia. Ich použitie na dokazovanie rezerv a zvyšovanie transparentnosti CEX by malo pomôcť vybudovať dôveru v odvetvie blockchainu. Pre mnohých bol takýto vývoj dlho očakávaný a prichádza v kľúčovom čase pre CEX.

Toto je prvá verzia nášho protokolu zk-SNARK. Tešíme sa na spätnú väzbu od komunity, aby sme mohli pokračovať vo vylepšovaní systému.

Prečítajte si tiež