Co přidává Zcash?

Navažme na předchozí nit

Stránka o blockchainu skončila zádrhelem. Postavili jsme sdílenou účetní knihu, kterou nikdo neřídí a nikdo ji nemůže potichu přepsat — opravdu nová věc —, ale funguje tak, že činí vše veřejným. Každá platba, každá částka, každá adresa leží na očích, zkopírovaná napříč tisíci stroji, uchovaná navždy. Pro systém, jehož celým úkolem je, že nic nelze skrýt, je to přednost. Pro peníze je to problém: vyměnili jste důvěryhodnou banku za trvalý, celosvětově čitelný záznam o všem, co jste kdy zaplatili.

Otázka, na kterou tato stránka odpovídá, je tedy ta, kterou minulá stránka nechala viset: dá se zachovat ta dobrá část — účetní kniha, kterou nikdo neovládá a kde nikdo nemůže podvádět — a přitom vrátit zpět soukromí? Zcash je jedna odpověď, kterou lidé postavili. Tato stránka vysvětluje tvar toho, jak to dělá; samotná strojní mechanika je na další stránce.

Zcash vám dává dva druhy adres

První, co je třeba vědět, je, že Zcash vám nevnucuje jediný režim. Peněženka může držet dva druhy adres a vy si vyberete, který pro danou platbu použijete.

Obě žijí na stejném blockchainu, kontrolovaném stejnou sítí. Jediný rozdíl je v tom, kolik toho každá platba prozradí.

Co stíněná platba ve skutečnosti skrývá

Když platíte z jedné stíněné adresy na druhou, veřejná účetní kniha zaznamená, že proběhla nějaká platná platba — a téměř nic dalšího. Neukazuje, kdo ji poslal, kdo ji přijal, ani kolik se přesunulo. (Dokonce i krátká poznámka, kterou můžete k platbě připojit, je zašifrovaná.) Tři skutečnosti, které transparentní řetězec jako Bitcoin ve výchozím stavu zveřejňuje, v záznamu prostě chybějí.

Jedna poctivá výhrada, aby se to nepřeprodávalo: ono úplné skrytí platí, když jsou oba konce stíněné. Zcash také umožňuje přesouvat prostředky mezi transparentní a stíněnou stranou, a kdykoli hodnota tuto čáru překročí, je přesunutá částka veřejná — čistá hodnota přesunutá mezi stíněným a transparentním fondem se zaznamená otevřeně, přímo v samotné transakci. Nejsilnější soukromí získáte tím, že zůstanete stínění od začátku do konce — nikoli směrováním přes transparentní adresu po cestě.

Skutečná hádanka: jak zkontrolovat platbu, kterou nevidíte?

Skrýt podrobnosti zní snadno, dokud si nevzpomenete, proč blockchain vůbec všechno zveřejnil. V Bitcoinu vidí každý každou transakci, takže každý může potvrdit to, na čem záleží: utrácené mince opravdu existují, utrácející je skutečně vlastní a nebyly už utraceny jinde. Viditelnost je tou kontrolou.

Odeberte podrobnosti a zdá se, že se ta kontrola hroutí. Pokud nikdo nevidí odesílatele, částku ani to, které mince se přesouvají, jak si může být síť jistá, že platba není zfalšovaná nebo utracená dvakrát? Nemůžete ověřit, co nemůžete přečíst. Celým přínosem Zcashe je způsob, jak kontrolu zachovat a viditelnost zahodit, a spočívá na třech kouscích, které vybudujeme dál.

Kousek první: závazek — zapečetěná obálka

Místo zveřejnění platby otevřeně zveřejní stíněná transakce závazek k ní. Závazek je krátká kryptografická náhražka, vypočtená ze skrytých podrobností — částky, cíle — a zveřejněná v řetězci na jejich místě. Specifikace to říká jednoznačně: „ke každé notě je kryptograficky přidružen závazek noty" (nota je jen protokolové slovo pro balíček stíněných prostředků).

Představte si zapečetěnou obálku odolnou proti manipulaci, položenou do veřejného záznamu. Kdokoli může vidět, že byla obálka založena a kdy; nikdo nevidí dovnitř; a protože je náhražka vypočtena z přesného obsahu, nikdo nemůže onen obsah později vyměnit za něco jiného, aniž by se to projevilo. Každá stíněná platba přidá svou obálku na jeden dlouhý veřejný seznam. Tento seznam zapečetěných obálek — nikoli stoh otevřených stránek — je to, s čím síť musí pracovat.

Kousek druhý: nulifikátor — utrácení bez prozrazení, která obálka

Seznam zapečetěných obálek vyvolává zřejmou obavu: pokud nikdo nevidí dovnitř, co vám brání utratit tutéž dvakrát?

Odpovědí je nulifikátor. Když utratíte stíněné prostředky, vaše transakce zveřejní jedinou krátkou značku — nulifikátor — odvozenou z přesných utrácených prostředků. Plní dva úkoly najednou. Zaprvé je jedinečná pro tyto prostředky, takže jejich utracení podruhé by zveřejnilo úplně stejnou značku; síť si pamatuje každou značku, kterou viděla, a opakování odmítne. Přesně tak se zastaví dvojí utracení — specifikace poznamenává, že „nulifikátory ... jsou odhaleny (čímž je zabráněno jejich opětovnému utracení)" a že „nulifikátory jsou nezbytné k zabránění dvojího utracení." Zadruhé výpočet značky potřebuje váš tajný klíč a bez tohoto klíče ji nelze přiřadit k žádné obálce na seznamu. Nulifikátor tedy oznamuje „nějaké prostředky byly právě utraceny, nepovolte je znovu," aniž by kdy prozradil, které prostředky.

Kousek třetí: důkaz s nulovou znalostí — část, která prokazuje poctivost

Obálka a značka stále neukazují, že je platba poctivá — že prostředky existují, že je vlastníte, že nic nebylo vyčarováno z ničeho. Odhalení podrobností by to vše naráz dokázalo, ale odhalení je právě ta jediná věc, které se snažíme vyhnout. To je uzel, který rozplétá důkaz s nulovou znalostí (zero-knowledge proof).

Důkaz s nulovou znalostí je způsob, jak dokázat, že je tvrzení pravdivé, a přitom neprozradit nic kromě toho, že je pravdivé. Zcash jej připojuje ke každé stíněné platbě (konkrétní druh, který používá, je zk-SNARK — stručný neinteraktivní argument znalosti s nulovou znalostí). V jednom kroku a bez prozrazení odesílatele, příjemce či částky umožňuje důkaz síti potvrdit, že: utrácené prostředky odpovídají obálce, která už je na veřejném seznamu; utrácející je oprávněn je utratit; a nulifikátor byl z těchto prostředků vypočten správně. Doprovodná kontrola, prováděná spolu s důkazem, potvrzuje, že částky sedí, takže nic nevzniká z ničeho. Kdokoli může důkaz zkontrolovat oproti veřejnému záznamu a platba je přijata jen tehdy, pokud obstojí.

To je jádro věci. Normativní výklad nulifikátorů ve specifikaci to říká přesně: když je nota utracena, „utrácející vytvoří důkaz s nulovou znalostí, že zná [utrácecí tajemství], v souladu s veřejně odhaleným nulifikátorem a nějakým dříve zavázaným závazkem noty" — platná obálka je na seznamu, aniž by se prozradilo která. Důkaz je poctivý ohledně platnosti a mlčí o všem ostatním — žádné kouzlo, jen tvrzení dokázané bez svých podrobností.

Zapečetěná obálka, kterou přesto ověříte

Poskládejte tři kousky dohromady a ten trik přestane být tajemný. Stíněné prostředky vstupují do řetězce jako zapečetěné závazky. Utracení jednoho z nich zveřejní jednorázový nulifikátor, který blokuje druhé utracení, aniž by řekl, které prostředky se přesunuly. A důkaz s nulovou znalostí s doprovodnou kontrolou bilance ukáže, že je celá platba platná — peníze existují, jejich vlastník je schválil, součty sedí —, zatímco odesílatel, příjemce a částka zůstávají skryti. Veřejná účetní kniha zůstává plně kontrolovatelná; jen už nemusí být plně čitelná.

To je to, co Zcash přidává k blockchainu, který jsme postavili dříve: tentýž bezdůvěrný, nepřepsatelný sdílený záznam, s vráceným soukromím. Ta myšlenka nezačala u Zcashe — je to implementace dřívějšího výzkumného návrhu zvaného Zerocash (co Zcash dnes nazývá nulifikátor, ona práce nazývala sériové číslo), jak poznamenává sama specifikace: „Zcash je implementace schématu decentralizované anonymní platby Zerocash."

Popsali jsme tvar záměrně a zastavili se u dveří strojovny. Co nota ve skutečnosti obsahuje, jak se ony obálky ukládají, aby na jednu mohl důkaz ukázat, a jak se zk-SNARK doopravdy buduje (ten Zcashův používá systém zvaný Halo 2, bez důvěryhodného nastavení) — to je technická vrstva a tam míří další stránka.

Zdroje