TL;DR

Důkaz s nulovými znalostmi umožňuje jedné straně (ověřovateli) určit platnost prohlášení vydaného druhou stranou (dokazovatelem) bez znalosti obsahu prohlášení. Například Binance může chtít dokázat, že plně kryla prostředky svých uživatelů v rezervách, aniž by odhalila všechny zůstatky jednotlivých uživatelů.

„Doklad o rezervách“ by mohl být vytvořen pomocí stromu Merkle, který chrání před falšováním jeho interních dat, v tomto případě jeho celkových čistých zůstatků zákazníků, které jsou závazky burzy vůči jejím uživatelům. To pak lze zkombinovat s protokolem zk-SNARK (protokol s nulovými znalostmi), který zajišťuje, že uživatelé mohou zkontrolovat svůj zůstatek jako součást celkového čistého zůstatku uživatelských aktiv, aniž by znali jednotlivé zůstatky.

Úvod

Ve světle událostí na trhu se bezpečnost krypto aktiv v úschově stala kritickým tématem. Uživatelé blockchainu vysoce oceňují transparentnost a otevřenost, ale také podporují soukromí a důvěrnost. To vytváří dilema při prokazování rezerv finančních prostředků držených custodiany. Často dochází ke kompromisu mezi transparentností, důvěrou a důvěrností dat.

To však nemusí platit. Kombinací protokolů s nulovými znalostmi, jako jsou zk-SNARKs se stromy Merkle, můžeme najít efektivní řešení pro všechny strany.

Co je důkaz nulových znalostí?

Důkaz s nulovými znalostmi umožňuje jedné straně (ověřovateli) určit platnost prohlášení vydaného druhou stranou (dokazovatelem) bez znalosti obsahu prohlášení. Podívejme se na jednoduchý příklad.

Máte zamčený trezor, jehož řešení znáte jen vy. Trezor, pro příklad, nelze vybrat, vynutit nebo otevřít jiným způsobem, než že znáte kombinaci. Tuto skutečnost potvrzuje, ověřuje a zná i váš přítel účastnící se experimentu.

Prohlašujete, že kombinaci znáte svému příteli, ale nechcete ji prozradit nebo před nimi otevřít krabici. V horní části krabice je otvor, kterým může váš přítel vložit poznámku. Aby to byl důkaz s nulovými znalostmi, váš přítel by neměl mít žádné další informace o procesu kromě daného prohlášení.

Svému příteli můžete dokázat, že kombinaci znáte, tím, že otevřete krabici, řeknete jim, co bylo napsáno na poznámce, a znovu ji zavřete. V žádném okamžiku jste však neprozradili kombinaci.

Pokročilejší příklad najdete v našem Co je důkaz nulových znalostí a jak to ovlivňuje blockchain? článek.

Proč používáme důkaz s nulovými znalostmi?

Důkazy s nulovými znalostmi jsou vhodné k dokazování něčeho bez prozrazení citlivých informací nebo detailů. To může být případ, kdy nechcete předat své finanční nebo osobní údaje, které by mohly být nevhodně použity.

V kryptoměnách můžete prokázat, že vlastníte soukromý klíč, aniž byste jej prozradili nebo něco digitálně podepisovali. Směnárna kryptoměn může také chtít prokázat stav svých rezerv, aniž by odhalila důvěrné informace o svých uživatelích, včetně zůstatků na jejich jednotlivých účtech.

Pro tyto příklady (a mnoho dalších) by důkaz s nulovými znalostmi použil algoritmy, které vezmou datový vstup a vrátí „pravda“ nebo „nepravda“ jako výstup.

Definování důkazů o nulových znalostech v technických podmínkách

Důkaz nulových znalostí z technického hlediska sleduje specifickou strukturu s určitými kritérii. Role ověřovatele a ověřovatele jsme již probrali, ale existují také tři kritéria, která by důkaz s nulovými znalostmi měl pokrývat:

  1. Úplnost. Je-li tvrzení pravdivé, ověřovatel se přesvědčí poskytnutým důkazem, aniž by potřeboval další informace nebo ověření.

  2. Zdravost. Pokud je tvrzení nepravdivé, ověřovatele o pravdivosti tvrzení nepřesvědčí poskytnutý důkaz.

  3. Nulové znalosti. Pokud je tvrzení pravdivé, ověřovatel se nedozví žádné jiné informace, než je tvrzení, že je pravdivé.

Co je to zk-SNARK?

Zk-SNARK (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) je důkazní protokol, který se řídí dříve nastíněnými principy nulových znalostí. Pomocí zk-SNARK byste mohli prokázat, že znáte původní hashovanou hodnotu (o níž je řeč níže), aniž byste odhalili, co to je. Můžete také prokázat platnost transakce, aniž byste odhalili jakékoli informace o konkrétních částkách, hodnotách nebo adresách.

zk-SNARK se běžně používají a diskutují ve světě blockchainu a kryptoměn. Možná se ale divíte, proč by se někdo obtěžoval používat zk-SNARK, když mohl k zabezpečení informací použít jednoduchou metodu párování veřejného a soukromého klíče. Nebyli bychom však schopni implementovat matematický důkaz, abychom zajistili, že nebudou zahrnuty žádné záporné zůstatky a součet Merkleho stromu.

V případě rezerv burzy chceme prokázat zálohování zůstatků zákazníků 1:1, aniž by byly zveřejněny identifikátory a zůstatky každého účtu. Navíc technologie zk-SNARK činí falšování dat ještě nepravděpodobnějším.

Co je strom Merkle?

Prezentace sečtených prostředků účtů uživatelů Binance vyžaduje práci s velkým souborem dat. Jedním ze způsobů, jak prezentovat toto velké množství dat kryptograficky, je použít Merkleho strom. V něm lze efektivně uložit obrovské množství informací a jeho kryptografická povaha umožňuje snadno ověřit jeho integritu.

Hashovací funkce

Pro stručné zakódování vstupu závisí Merkle strom na použití hashovacích funkcí. Stručně řečeno, hashování je proces generování výstupu s pevnou velikostí ze vstupu proměnné velikosti. Jinými slovy, když je vstup libovolné délky zahašován pomocí algoritmu, vytvoří zašifrovaný výstup s pevnou délkou.

Dokud zůstane vstup stejný, výstup bude také. To znamená, že můžeme vzít obrovské množství transakčních dat a převést je do zvládnutelného výstupu. Výstup bude radikálně odlišný, pokud se na vstupu změní nějaká informace.

Například bychom mohli vzít obsah 100 knih a vložit je do hashovací funkce SHA-256. Jako výstup by to pak poskytlo něco takového:

801a9be154c78caa032a37b4a4f0747f1e1addb397b64fa8581d749d704c12ea

Pokud bychom pak změnili jediný znak vstupu (těch 100 knih), hash by byl úplně jiný, takto:

abc5d230121d93a93a25bf7cf54ab71e8617114ccb57385a87ff12872bfda410

To je důležitá vlastnost hashovacích funkcí, protože umožňuje snadné ověření přesnosti dat. Pokud někdo replikuje proces hašování stejných 100 knih pomocí algoritmu SHA-256, dostane přesně stejný hash jako výstup. Pokud je výstup jiný, můžeme s jistotou potvrdit, že vstup byl změněn. To znamená, že není potřeba jednotlivě nebo ručně kontrolovat rozdíly mezi vstupy, což může být pracné.

Merkle stromy ve světě kryptoměn

Při ukládání transakčních dat na blockchain je každá nová transakce odeslána prostřednictvím hashovací funkce, která generuje jedinečné hodnoty hash. Představte si, že máme osm transakcí (A až H), které individuálně hašujeme, abychom získali jejich hašované výstupy. Těmto uzlům říkáme Merkle listy. Na obrázku níže můžete vidět unikátní hash hodnotu každého písmene: hA pro A, hB pro B, hC pro C atd.

Poté můžeme vzít páry hašovaných výstupů, zkombinovat je a získat nový hašovaný výstup. Například hašování hA a hB dohromady by nám poskytlo nový hašovaný výstup hAB známý jako Merkleova větev. Všimněte si, že pokaždé, když je vygenerován nový výstup, přichází s pevnou délkou a velikostí podle použité hashovací funkce.

Nyní máme data dvou transakcí (např. A a B) sloučená do jednoho hashu (hAB). Všimněte si, že pokud změníme jakoukoli informaci z A nebo B a proces zopakujeme, náš hašovaný výstup hAB by byl úplně jiný.

Proces pokračuje, když kombinujeme nové páry hashů, abychom je znovu hašovali (viz obrázek níže). Hašujeme hAB pomocí hCD, abychom získali jedinečný hašovací hABCD, a totéž děláme s hEF a hGH, abychom získali hEFGH. Nakonec obdržíme jeden hash představující hashované výstupy všech předchozích transakčních hashů. Jinými slovy, hashovaný výstup hABCDEFGH představuje všechny informace, které mu předcházely.

Výše zobrazený graf se nazývá Merkleho strom a hašovaný výstup hABCDEFGH je Merkleův kořen. V hlavičkách bloků používáme kořeny Merkle, protože kryptograficky shrnují všechna transakční data do bloku stručným způsobem. Můžeme také rychle ověřit, zda v rámci bloku nebyla nějaká data zmanipulována nebo změněna.

Omezení stromů Merkle

Vraťme se k našemu příkladu rezerv CEX. CEX chce prokázat 1:1 podporu všech aktiv svých zákazníků a staví Merkle strom, který hashuje dohromady UID svých zákazníků s jejich čistými držbami aktiv (započtením aktiv a pasiv) na úrovni tokenů. Po uvolnění (a podepsání pro prokázání vlastnictví nad poskytnutým kořenem Merkle) by jednotlivý uživatel neměl žádný způsob, jak zkontrolovat, zda je strom Merkle platný, aniž by měl přístup ke všem jeho vstupům.

Výměna mohla chybět včetně některých vstupů. Mohlo by také vytvářet falešné účty se zápornými zůstatky, aby se změnila celková odpovědnost. Například, ačkoli aktiva zákazníků mohou dosahovat celkové výše 1 000 000 USD, lze přidat falešný účet se zůstatkem -500 000 USD. To by vytvořilo cílovou rezervu pouze 500 000 $.

Případ pro prokázání rezerv se liší od kořenového adresáře bloku Merkle, protože uživatelé mohou vidět všechny transakce, které blok obsahuje, na průzkumníku blockchainu. CEX však nebude chtít zveřejnit každý zůstatek na účtu z důvodu bezpečnosti a ochrany osobních údajů. Zákazníci by také nebyli spokojeni se zveřejňováním zůstatků na jejich účtech. V tomto případě nemůže CEX prokázat, že se součet uživatelských zůstatků rovná správnému součtu, aniž by zviditelnil ostatní uživatelské zůstatky.

Jedním z řešení, jehož použití mohou burzy zvážit, je použití důvěryhodného auditora třetí strany. Auditor může zkontrolovat jednotlivé účty a rezervy před konečným potvrzením platnosti poskytnutého kořene Merkle. Pro uživatele však tato metoda vyžaduje důvěru v auditora a data použitá pro audit. Když údajům můžete důvěřovat, nemusíte se spoléhat na třetí stranu.

Kombinace zk-SNARKů se stromy Merkle

Výše uvedený problém je perfektní případ pro použití zk-SNARKů. Chceme dokázat, že rezervy plně pokrývají závazky uživatelů a nejsou padělané. Z důvodu ochrany soukromí a bezpečnosti však nechceme ověřovateli ukazovat přesné složení zůstatků a rezerv uživatelů.

Pomocí zk-SNARK může kryptoburza prokázat, že všechny sady zůstatků listových uzlů stromu Merkle (tj. zůstatky na uživatelských účtech) přispívají k celkovému zůstatku uživatelských aktiv burzy. Každý uživatel může snadno přistupovat ke svému koncovému uzlu, jako by byl zahrnut do procesu. Zk-SNARK také zajišťuje, že žádný vygenerovaný strom Merkle neobsahuje uživatele s negativním celkovým zůstatkem čistých aktiv (což by znamenalo falšování údajů, protože všechny půjčky jsou přezajištěny). Používá se také výpočet globálního stavu Binance, tj. seznam celkového čistého zůstatku každého aktiva, které každý zákazník Binance drží.

Podívejme se, jak k situaci přistupuje Binance. Pro začátek Binance definuje omezení výpočtu, který chce dokázat, a definuje je jako programovatelný obvod. Níže je uvedena sada tří omezení, která Binance používá ve svém modelu.

Pro sadu vyvážení každého uživatele (uzel listů stromu Merkle) náš obvod zajišťuje, že:

  1. Zůstatky aktiv uživatele jsou zahrnuty do výpočtu součtu celkových čistých uživatelských zůstatků na Binance.

  2. Celkový čistý zůstatek uživatele je větší nebo roven nule.

  3. Změna kořene stromu Merkle je platná (tj. nepoužívá falšované informace) po aktualizaci informací uživatele na hash uzlu listu.

Binance pak může vygenerovat důkaz zk-SNARK pro konstrukci stromu Merkle podle obvodu. To znamená, že burza provádí náročné výpočty hashovacích ID uživatelů a zůstatků a zároveň zajišťuje, že důkaz projde omezeními.

Ověřovatel prozkoumá důkaz (a jeho veřejně uvolněný kód s otevřeným zdrojovým kódem), aby se přesvědčil, že výpočet je proveden se splněnými všemi omezeními. Verifikační výpočet trvá extrémně krátkou dobu ve srovnání s dobou dokazování.

Při každém vydání dokladu o rezervách burza zveřejní:

1. Důkaz Merkle pro každého uživatele.

2. Důkaz zk-SNARK a veřejný vstup (hash seznamu celkového čistého zůstatku každého aktiva a Merkle root) okruhu pro všechny uživatele.

Zájemci si mohou ověřit důkaz Merkle a zajistit, aby jejich individuální zůstatky přispěly ke kořeni stromu Merkle. Mohou také ověřit důkaz zk-SNARK, aby zajistili, že konstrukce Merkleho stromu splňuje omezení definovaná v okruhu. Podrobnější vysvětlení řešení zk-SNARK a jeho výkonu najdete v našem blogu Jak zk-SNARKs zlepšit Binance systém Proof-of-Reserves System.

Závěrečné myšlenky

zk-SNARK poskytují technologii potřebnou k zajištění integrity dat i soukromí současně. Jeho aplikace pro prokazování rezerv a zvyšování transparentnosti CEX by měla pomoci vybudovat důvěru v blockchainový průmysl. Pro mnohé byl vývoj, jako je tento, dlouho očekávaný a přichází v klíčové době pro CEX.

Toto je první verze našeho zk-SNARK a těšíme se na zpětnou vazbu od komunity, abychom mohli pokračovat ve zlepšování systému.

Další čtení

  • (Blog) Jak zk-SNARK vylepšují systém Binance Proof-of-Reserves

  • (Akademie) Doklad o rezervách (PoR)

  • (Akademie) Co je Proof of Reserves a jak to funguje na Binance

  • (Oznámení)Binance uvolňuje systém Proof of Reserves