Domů
Články
Zlepšení transparentnosti kryptoměn pomocí důkazu s nulovou znalostí

Zlepšení transparentnosti kryptoměn pomocí důkazu s nulovou znalostí

Pokročilí
Zveřejněno Feb 10, 2023Aktualizováno Jan 5, 2024
10m

TL;DR

Důkaz s nulovou znalostí umožňuje jedné straně (ověřovateli) určit platnost výroku poskytnutého jinou stranou (dokazovatelem), aniž by znala obsah výroku. Binance tak může například dokázat, že má veškeré prostředky svých uživatelů uloženy v rezervách, aniž by při tom odhalila všechny zůstatky jednotlivých uživatelů.

Potvrzení o rezervách je možné vytvořit pomocí hashového stromu, který chrání před falšováním interních údajů – v tomto případě celkových čistých zůstatků zákazníků, což jsou závazky burzy vůči uživatelům. Hashový strom je pak možné zkombinovat s protokolem zk-SNARK (protokol důkazu s nulovou znalostí), který uživatelům dává možnost zkontrolovat, jestli je jejich zůstatek součástí celkového čistého zůstatku všech uživatelských aktiv, aniž by znali jednotlivé zůstatky.

Úvod

Ve světle nedávných událostí na trzích se bezpečnost kryptoměnových aktiv v úschově stala jedním z klíčových témat. Uživatelé blockchainu si cení transparentnosti a otevřenosti systému, zároveň ale podporují soukromí a důvěrnost. Tím vzniká dilema při prokazování rezerv finančních prostředků držených správci. Často tak dochází ke kompromisu mezi transparentností, důvěryhodností a důvěrností údajů.

Nemusí tomu tak ale být. Zkombinováním protokolů důkazů s nulovou znalostí, jako je zk-SNARK, a hashových stromů dokážeme vytvořit efektivní řešení pro všechny strany.

Co je důkaz s nulovou znalostí?

Důkaz s nulovou znalostí umožňuje jedné straně (ověřovateli) určit platnost výroku poskytnutého jinou stranou (dokazovatelem), aniž by znala obsah výroku. Ukážeme si to na jednoduchém příkladu.

Představte si, že máte zamčený trezor, ke kterému znáte kombinaci jen vy. Tento trezor nelze vypáčit, vyvrtat ani jinak otevřít. Musíte znát kombinaci. O této skutečnosti ví a ověřil si ji váš kamarád, který se experimentu účastní.

Svému kamarádovi řeknete, že znáte kombinaci, ale nechcete ji prozradit ani před ním trezor otevřít. V horní části trezoru je otvor, kterým může váš kamarád vložit vzkaz. Aby se jednalo o důkaz s nulovou znalostí, neměl by váš kamarád mít o celém procesu kromě daného výroku žádné další informace.

Svému kamarádovi můžete dokázat, že kombinaci znáte, tím, že krabičku otevřete, řeknete mu, co je napsáno na lístku, a znovu ji zavřete. Kombinaci mu ale přitom neprozradíte.

Podrobnější příklad najdete v našem článku Co je důkaz s nulovou znalostí a jaký má vliv na blockchain?

Proč důkazy s nulovou znalostí používáme?

Důkazy s nulovou znalostí jsou vhodné, když chcete něco dokázat, aniž byste odhalili citlivé informace nebo podrobnosti. Může to být například v situaci, kdy nechcete předávat své finanční nebo osobní údaje, které by mohl někdo zneužít.

Ve světě kryptoměn tak můžete například prokázat, že vlastníte soukromý klíč, aniž byste ho prozradili nebo jím něco digitálně podepsali. Kryptoměnová burza může chtít například prokázat stav svých rezerv, aniž by odhalila důvěrné informace o svých uživatelích, včetně zůstatků na jednotlivých účtech. 

V těchto situacích (a mnoha dalších) používá důkaz s nulovou znalostí algoritmy, které vezmou vstupní data a jejich výstupem je „true“ nebo „false“ (správně nebo špatně). 

Technická definice důkazů s nulovou znalostí

Důkaz s nulovou znalostí má z technického hlediska specifickou strukturu s určitými kritérii. Rolemi dokazovatele a ověřovatele jsme se už zabývali, ale důkazy s nulovou znalostí používají ještě další tři kritéria:

  1. Úplnost: pokud je výrok pravdivý, ověřovatel se o tom přesvědčí na základě poskytnutého důkazu, aniž by potřeboval další informace nebo ověření.

  2. Spolehlivost: pokud je výrok nepravdivý, ověřovatele poskytnutý důkaz o pravdivosti nepřesvědčí.

  3. Nulová znalost: pokud je výrok pravdivý, ověřovatel se nedozví žádnou jinou informaci, než že je výrok pravdivý.

Co je protokol zk-SNARK?

Zk-SNARK (zero-knowledge succinct non-interactive argument of knowledge) je důkazní protokol, který se řídí výše uvedenými principy s nulovou znalostí. Pomocí protokolu zk-SNARK můžete dokázat, že znáte původní zahashovanou hodnotu (o tom později), aniž byste ji prozradili. Můžete také prokázat platnost transakce, aniž byste museli odhalit jakékoli informace o konkrétních částkách, hodnotách nebo adresách.

Protokoly zk-SNARK se běžně používají ve světě blockchainu a kryptoměn, kde jsou i častým námětem diskuse. Možná si ale říkáte, proč by se někdo obtěžoval používat protokol zk-SNARK, když může k zabezpečení informací použít jednoduchou metodu páru veřejného a soukromého klíče. V takovém případě bychom ale nedokázali implementovat matematický důkaz, který by zajistil součet hashového stromu a to, že nebudou zahrnuty záporné zůstatky. 

V případě rezerv burzy chceme prokázat, že zůstatky zákazníků jsou kryty v poměru 1:1, aniž bychom zveřejnili identifikátory a zůstatky jednotlivých účtů. Technologie zk-SNARK navíc snižuje pravděpodobnost falšování dat.

Co je hashový (Merkleův) strom?

Prezentování součtu prostředků na účtech uživatelů Binance vyžaduje práci s velkým souborem dat. Jedním ze způsobů, jak takto velké množství dat prezentovat pomocí kryptografie, je použití hashového stromu. Dokážete v něm efektivně uložit obrovské množství informací a díky kryptografické povaze i snadno ověřit jeho integritu.

Hashovací funkce

Hashový strom vyžaduje k zhuštěnému zakódování vstupu hashovací funkce. Hashování je stručně řečeno vytváření výstupů s pevnou velikostí ze vstupů s velikostí proměnlivou. Jinými slovy, když vstup libovolné délky zahashujete algoritmem, dostanete zašifrovaný výstup s pevnou délkou.

Dokud je vstup stejný, zůstává stejný i výstup. To znamená, že můžeme vzít obrovské množství dat o transakcích a hashováním z nich vytvořit zvládnutelný výstup. Pokud se na vstupu změní jakákoli informace, výstup bude radikálně odlišný.

Můžeme vzít například obsah 100 knih a nechat ho projít hashovací funkcí SHA-256. Výstup by pak vypadal nějak takhle:

801a9be154c78caa032a37b4a4f0747f1e1addb397b64fa8581d749d704c12ea

Kdybychom pak na vstupu změnili v jedné ze 100 knih jediný znak, hash by se zcela změnil a vypadal by například takhle:

abc5d230121d93a93a25bf7cf54ab71e8617114ccb57385a87ff12872bfda410

Jedná se o důležitou vlastnost hashovacích funkcí, protože usnadňuje ověření přesnosti dat. Pokud někdo tento proces zopakuje a zahashuje pomocí algoritmu SHA-256 obsah stejných 100 knih, výstupem bude úplně stejný hash. Pokud je výstup jiný, můžeme s jistotou prohlásit, že došlo ke změně vstupu. To znamená, že není nutné jednotlivě nebo ručně kontrolovat rozdíly mezi vstupy (což může být pracné).

Hashové (Merkleovy) stromy ve světě kryptoměn

Při ukládání dat o transakcích na blockchain se každá nová transakce odesílá prostřednictvím hashovací funkce, která generuje jedinečné hashovací hodnoty. Představte si, že máme osm transakcí (A až H), které jednotlivě zahashujeme, abychom získali jejich hashové výstupy. Tyto výstupy označujeme jako Merklovy listy (uzly). Na obrázku můžete vidět jedinečnou hashovací hodnotu každého písmene: hA pro A, hB pro B, hC pro C atd.

Pak můžeme vzít dvojice zahashovaných výstupů, zkombinovat je a získat nový hashový výstup. Například zahashováním hA a hB dohromady vznikne nový hashový výstup hAB, který označujeme jako Merkleovu větev. Při každém generování nového výstupu získáte na základě použité hashovací funkce výstup s pevnou délkou a velikostí.

Teď jsme data dvou transakcí (např. A a B) spojili do jednoho hashe (hAB). Kdybychom změnili jakoukoli informaci o transakci A nebo B a proces zopakovali, hashový výstup hAB by byl zcela jiný.

Tento proces pokračuje kombinováním nových dvojic hashů, které opět zahashujeme (jako na obrázku níže). Zahashujeme hAB s hCD a získáme jedinečný hash hABCD. Totéž provedeme s hEF a hGH a získáme hEFGH. Nakonec dostaneme jediný hash, který zastupuje zahashované výstupy všech hashů předchozích transakcí. Jinými slovy, hashový výstup hABCDEFGH představuje všechny informace, které mu předcházely.

Vyobrazenému grafu se říká hashový (Merkleův) strom a hashový výstup hABCDEFGH je kořenový hash (Merkleův kořen). Kořenové hashe používáme v hlavičkách bloků, protože kryptograficky stručně shrnují všechna data o transakcích v bloku. Zároveň nám umožňují rychle ověřit, jestli s daty v bloku někdo nemanipuloval.

Omezení hashových stromů

Vraťme se k našemu příkladu s rezervami CEX. CEX chce prokázat, že všechna aktiva zákazníků jsou kryta v poměru 1:1, a tak vytvoří hashový strom, který zahashuje UID zákazníků a jejich čistá aktiva (započtením aktiv a pasiv) na úrovni tokenu. Po vydání (a podepsání za účelem prokázání vlastnictví poskytnutého kořenového hashe) by jednotliví uživatelé museli mít přístup ke všem vstupům hashového stromu, jinak by neměli možnost zkontrolovat, jestli je platný.

Burza by mohla zapomenout zařadit některé vstupy. Mohla by také vytvořit falešné účty se zápornými zůstatky, aby změnila celkový závazek. Aktiva zákazníků by mohla například činit 1 000 000 USD, ale burza by mohla přidat falešný účet se zůstatkem −500 000 USD. Díky tomu by cílová hodnota rezerv dosahovala pouhých 500 000 USD.

Potvrzení o rezervách se ale od kořenového hashe bloku liší v tom, že uživatelé si mohou všechny transakce obsažené v bloku prohlédnout v průzkumníku blockchainu. CEX ale nebude chtít z důvodu bezpečnosti a ochrany osobních údajů zveřejňovat zůstatky jednotlivých účtů. Ani zákazníci by nechtěli, aby někdo zveřejňoval jejich zůstatky. V tomto případě CEX nemůže bez zviditelnění zůstatků ostatních uživatelů prokázat, že zůstatky uživatelů vytváří správný součet.

Jedním z řešení může pro burzy být využití služeb důvěryhodného auditora třetí strany. Auditor může před konečným ověřením platnosti poskytnutého kořenového hashe zkontrolovat jednotlivé účty a rezervy. Uživatelé ale v tomto případě musí věřit auditorovi a poskytnutým datům. Pokud můžete důvěřovat datům, nemusíte se spoléhat na třetí stranu.

Spojení technologie zk-SNARK s hashovými stromy

Výše uvedený problém můžete vyřešit použitím technologie zk-SNARK. Chceme dokázat, že rezervy plně pokrývají závazky uživatelů a nejsou zfalšované. Z důvodu ochrany soukromí a bezpečnosti ale nechceme ověřovateli ukazovat přesné složení zůstatků uživatelů ani rezervy. 

Pomocí technologie zk-SNARK může kryptoměnová burza prokázat, že bilanční množiny všech listů Merkleova stromu (tj. zůstatky na uživatelských účtech) přispívají k deklarovanému celkovému zůstatku uživatelských aktiv na burze. Každý uživatel si může snadno ověřit, jestli byl do procesu zahrnutý jeho list. Technologie zk-SNARK zároveň zaručuje, že vygenerovaný hashový strom neobsahuje uživatele se záporným celkovým zůstatkem čistých aktiv (což by ukazovalo na falšování údajů, protože všechny půjčky jsou přezajištěné). 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é drží jednotliví zákazníci Binance.

Podívejme se, jak se k situaci staví společnost Binance. Pro začátek Binance definuje omezení prokazovaného výpočtu a definuje je jako programovatelný obvod. Níže najdete soubor tří omezení, která Binance ve svém modelu používá. 

U každé bilanční sady uživatele (listu Merkleova stromu) náš obvod zajišťuje, že:

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

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

  3. Změna kořenového hashe je po aktualizaci informací o uživateli v hashi Merkleova listu platná (tj. nepoužívá zfalšované informace).

Binance pak může vygenerovat důkaz zk-SNARK a podle obvodu zkonstruovat hashový strom. To znamená, že burza provede náročnou výpočetní operaci hashování ID a zůstatků uživatelů a zároveň zajistí, že důkaz vyhoví omezením.

Ověřovatel prozkoumá důkaz (a jeho veřejně dostupný opensourcový kód), aby se přesvědčil, že při výpočtu byla splněna všechna omezení. Doba ověřovacího výpočtu je v porovnání s dobou dokazování extrémně krátká.

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

1. Merkleův důkaz 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 kořenový hash) okruhu pro všechny uživatele.

Jednotliví zájemci mohou ověřit Merkleův důkaz a přesvědčit se, že jejich zůstatky jsou součástí kořenového hashe. Mohou také ověřit důkaz zk-SNARK, aby měli jistotu, že konstrukce hashového stromu splňuje omezení definovaná v okruhu. Podrobnější vysvětlení řešení zk-SNARK a jeho výkonnosti najdete v našem blogovém článku Jak technologie zk-SNARK na platformě Binance zlepšuje systém potvrzení o rezervách.

Závěrem

Řešení zk-SNARK poskytuje technologii potřebnou k současnému zajištění integrity dat i soukromí. Jeho využití k prokazování rezerv a zvýšení transparentnosti CEX by mělo pomoct vybudovat důvěru v blockchainové odvětví. Mnozí na tento vývoj dlouho čekali a přichází v klíčové době pro centralizované burzy.

Jedná se o první verzi našeho řešení zk-SNARK a těšíme se na zpětnou vazbu od komunity, která nám pomůže systém dál vylepšovat.

Související články: