TL;DR

Dowód z wiedzą zerową pozwala jednej stronie (weryfikatorowi) określić ważność twierdzenia podanego przez drugą stronę (weryfikatora) bez znajomości treści twierdzenia. Na przykład Binance może chcieć udowodnić, że w całości umieścił środki swoich użytkowników w rezerwach, bez ujawniania sald wszystkich indywidualnych użytkowników.

„Dowód rezerw” mógłby zostać skonstruowany za pomocą drzewa Merkle, które chroni przed fałszowaniem jego danych wewnętrznych, w tym przypadku całkowitych sald klientów netto, będących zobowiązaniami giełdy wobec jej użytkowników. Można to następnie połączyć z zk-SNARK (protokołem dowodu o zerowej wiedzy), który zapewnia, że ​​użytkownicy mogą sprawdzić, czy ich saldo stanowi część całkowitego salda aktywów użytkownika netto bez znajomości poszczególnych sald.

Wstęp

W świetle wydarzeń rynkowych bezpieczeństwo przechowywanych aktywów kryptograficznych stało się tematem krytycznym. Użytkownicy Blockchain wysoko cenią przejrzystość i otwartość, ale także wspierają prywatność i poufność. Stwarza to dylemat przy wykazywaniu rezerw środków przechowywanych przez depozytariuszy. Często istnieje kompromis pomiędzy przejrzystością, zaufaniem i poufnością danych.

Jednak nie musi tak być. Łącząc protokoły oparte na wiedzy zerowej, takie jak zk-SNARK, z drzewami Merkle, możemy znaleźć skuteczne rozwiązanie dla wszystkich stron.

Co to jest dowód wiedzy zerowej?

Dowód z wiedzą zerową pozwala jednej stronie (weryfikatorowi) określić ważność twierdzenia podanego przez drugą stronę (weryfikatora) bez znajomości treści twierdzenia. Spójrzmy na prosty przykład.

Masz zamknięty sejf i tylko Ty znasz rozwiązanie. Sejf, dla przykładu, nie może zostać złamany, wyważony ani otwarty w inny sposób niż poprzez znajomość szyfru. Fakt ten ustalił, zweryfikował i poznał także Twój znajomy biorący udział w eksperymencie.

Oświadczasz znajomemu, że znasz kombinację, ale nie chcesz jej zdradzać ani otwierać przed nim pudełka. Na górze pudełka znajduje się otwór, przez który przyjaciel może włożyć notatkę. Aby był to dowód o wiedzy zerowej, Twój znajomy nie powinien posiadać żadnych dodatkowych informacji na temat procesu poza podanym stwierdzeniem.

Możesz udowodnić znajomemu, że znasz kombinację, otwierając pudełko, informując go, co było napisane na notatce, i ponownie je zamykając. Jednakże w żadnym momencie nie ujawniłeś kombinacji.

Bardziej zaawansowany przykład można znaleźć w naszym artykule Co to jest dowód wiedzy zerowej i jaki ma wpływ na Blockchain? artykuł.

Dlaczego stosujemy dowód wiedzy zerowej?

Dowody z wiedzą zerową nadają się do udowodnienia czegoś bez ujawniania wrażliwych informacji lub szczegółów. Może się tak zdarzyć, jeśli nie chcesz przekazywać swoich danych finansowych lub osobistych, które mogłyby zostać niewłaściwie wykorzystane.

W kryptografii możesz udowodnić, że posiadasz klucz prywatny, nie ujawniając go ani nie podpisując niczego cyfrowo. Giełda kryptowalut może także chcieć udowodnić stan swoich rezerw, nie ujawniając przy tym poufnych informacji o swoich użytkownikach, w tym o stanach ich indywidualnych kont.

W przypadku tych przykładów (i wielu innych) dowód z wiedzą zerową wykorzystywałby algorytmy, które pobierają dane wejściowe i zwracają wartość „prawda” lub „fałsz” jako wynik.

Definiowanie dowodów z wiedzą zerową w kategoriach technicznych

Z technicznego punktu widzenia dowód wiedzy zerowej ma określoną strukturę i określone kryteria. Omówiliśmy już role sprawdzającego i weryfikatora, ale istnieją również trzy kryteria, które powinien spełniać dowód z wiedzą zerową:

  1. Kompletność. Jeżeli stwierdzenie jest prawdziwe, weryfikatora przekona dostarczony dowód, bez potrzeby stosowania jakichkolwiek innych informacji lub weryfikacji.

  2. Solidność. Jeśli stwierdzenie jest fałszywe, weryfikator nie będzie przekonany o prawdziwości stwierdzenia na podstawie dostarczonego dowodu.

  3. Wiedza zerowa. Jeżeli stwierdzenie jest prawdziwe, weryfikator nie otrzymuje żadnych informacji poza tym, że stwierdzenie jest prawdziwe.

Co to jest zk-SNARK?

Zk-SNARK (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) to protokół dowodowy zgodny z opisanymi wcześniej zasadami wiedzy zerowej. Za pomocą zk-SNARK możesz udowodnić, że znasz oryginalną wartość mieszaną (omówioną poniżej) bez ujawniania, co to jest. Możesz także udowodnić ważność transakcji bez ujawniania jakichkolwiek informacji na temat konkretnych kwot, wartości lub adresów.

Zk-SNARK są powszechnie używane i omawiane w świecie blockchain i kryptowalut. Ale możesz się zastanawiać, dlaczego ktoś miałby zawracać sobie głowę używaniem zk-SNARK, skoro mógłby użyć prostej metody pary kluczy publicznych i prywatnych do zabezpieczenia informacji. Nie bylibyśmy jednak w stanie wdrożyć dowodu matematycznego, aby upewnić się, że nie uwzględniono sald ujemnych i sumy drzewa Merkle'a.

W przypadku rezerw giełdowych chcemy udowodnić zabezpieczenie sald klientów w stosunku 1:1 bez upubliczniania identyfikatorów i sald każdego rachunku. Ponadto technologia zk-SNARK sprawia, że ​​sfałszowanie danych jest jeszcze bardziej mało prawdopodobne.

Co to jest drzewo Merkle?

Prezentowanie zsumowanych środków kont użytkowników Binance wymaga pracy z dużym zbiorem danych. Jednym ze sposobów kryptograficznego przedstawienia tak dużej ilości danych jest użycie drzewa Merkle. Można w nim efektywnie przechowywać ogromną ilość informacji, a jego kryptograficzny charakter sprawia, że ​​jego integralność jest łatwo weryfikowalna.

Funkcje mieszające

Aby zwięźle zakodować dane wejściowe, drzewo Merkle'a opiera się na użyciu funkcji skrótu. Krótko mówiąc, haszowanie to proces generowania wyniku o stałym rozmiarze z danych wejściowych o zmiennym rozmiarze. Innymi słowy, gdy dane wejściowe o dowolnej długości zostaną poddane haszowaniu za pomocą algorytmu, wygeneruje to zaszyfrowany wynik o stałej długości.

Dopóki dane wejściowe pozostają takie same, dane wyjściowe również takie będą. Oznacza to, że możemy pobrać ogromne ilości danych transakcyjnych i zamienić je w łatwy do zarządzania wynik. Wynik będzie radykalnie inny, jeśli jakakolwiek informacja zostanie zmieniona na wejściu.

Na przykład moglibyśmy pobrać treść 100 książek i wprowadzić ją do funkcji skrótu SHA-256. Następnie wyświetliłoby coś takiego jako wynik:

801a9be154c78caa032a37b4a4f0747f1e1addb397b64fa8581d749d704c12ea

Gdybyśmy następnie zmienili pojedynczy znak wejściowy (te 100 książek), skrót byłby zupełnie inny, na przykład:

abc5d230121d93a93a25bf7cf54ab71e8617114ccb57385a87ff12872bfda410

Jest to ważna właściwość funkcji skrótu, ponieważ pozwala na łatwą weryfikację dokładności danych. Jeśli ktoś powtórzy proces mieszania tych samych 100 książek przy użyciu algorytmu SHA-256, otrzyma dokładnie taki sam skrót jak wynik. Jeśli dane wyjściowe są inne, możemy z całą pewnością stwierdzić, że dane wejściowe zostały zmienione. Oznacza to, że nie ma potrzeby indywidualnego lub ręcznego sprawdzania różnic między danymi wejściowymi, co może być pracochłonne.

Drzewa Merkle w świecie kryptowalut

Podczas przechowywania danych transakcyjnych w łańcuchu bloków każda nowa transakcja jest przesyłana za pośrednictwem funkcji skrótu, która generuje unikalne wartości skrótu. Wyobraź sobie, że mamy osiem transakcji (od A do H), które indywidualnie szyfrujemy, aby uzyskać ich zaszyfrowane dane wyjściowe. Są to tak zwane węzły liściowe Merkle. Na poniższym obrazku możesz zobaczyć unikalną wartość skrótu każdej litery: hA dla A, hB dla B, hC dla C itd.

Następnie możemy pobrać pary zaszyfrowanych wyników, połączyć je i otrzymać nowy zahaszowany wynik. Na przykład skróty hA i hB połączone razem dadzą nam nowy, zaszyfrowany wynik hAB, znany jako gałąź Merkle. Należy pamiętać, że za każdym razem, gdy generowane jest nowe wyjście, ma ono stałą długość i rozmiar, zgodnie z zastosowaną funkcją skrótu.

Teraz mamy dane dwóch transakcji (np. A i B) połączone w jednym haszu (hAB). Zauważ, że jeśli zmienimy jakąkolwiek informację z A lub B i powtórzymy proces, nasz zaszyfrowany wynik hAB będzie zupełnie inny.

Proces trwa, gdy łączymy nowe pary skrótów i ponownie je mieszamy (patrz obrazek poniżej). Mieszamy hAB z hCD, aby uzyskać unikalny skrót hABCD i robimy to samo z hEF i hGH, aby uzyskać hEFGH. Na koniec otrzymujemy pojedynczy skrót reprezentujący zahaszowane wyniki wszystkich poprzednich transakcji. Innymi słowy, zaszyfrowany wynik hABCDEFGH reprezentuje wszystkie informacje, które pojawiły się przed nim.

Wykres wyświetlony powyżej nazywa się drzewem Merkle'a, a zaszyfrowany wynik hABCDEFGH jest pierwiastkiem Merkle'a. W nagłówkach bloków używamy korzeni Merkle, ponieważ kryptograficznie podsumowują one wszystkie dane transakcji w bloku w zwięzły sposób. Możemy także szybko zweryfikować, czy w obrębie bloku dane nie zostały naruszone lub zmienione.

Ograniczenia drzew Merkle

Wróćmy do naszego przykładu z rezerwami CEX. CEX chce udowodnić wsparcie 1:1 dla wszystkich aktywów swoich klientów i buduje drzewo Merkle, które łączy identyfikatory UID klientów z ich zasobami aktywów netto (kompensując aktywa i pasywa) na poziomie tokena. Po zwolnieniu (i podpisaniu w celu potwierdzenia własności dostarczonego katalogu głównego Merkle) indywidualny użytkownik nie będzie miał możliwości sprawdzenia, czy drzewo Merkle jest ważne, bez dostępu do wszystkich jego danych wejściowych.

Wymiana mogła zostać pominięta, włączając niektóre dane wejściowe. Może również tworzyć fałszywe konta z ujemnym saldem, aby zmienić całkowite zobowiązanie. Na przykład, chociaż aktywa klientów mogą wynosić 1 000 000 USD, można dodać fałszywe konto z saldem w wysokości -500 000 USD. Stworzyłoby to docelowe rezerwy w wysokości zaledwie 500 000 dolarów.

Przypadek dowodu rezerw różni się od przypadku dotyczącego katalogu głównego Merkle bloku, ponieważ użytkownicy mogą zobaczyć wszystkie transakcje zawarte w bloku w eksploratorze blockchain. CEX nie będzie jednak chciał ujawniać salda każdego konta ze względów bezpieczeństwa i prywatności danych. Klienci również nie byliby zadowoleni, gdyby saldo ich kont zostało upublicznione. W takim przypadku CEX nie może udowodnić, że salda użytkowników sumują się do prawidłowej sumy, bez uwidocznienia sald innych użytkowników.

Jednym z rozwiązań, które giełdy mogą rozważyć, jest skorzystanie z usług zaufanego audytora zewnętrznego. Audytor może sprawdzić indywidualne konta i rezerwy, zanim ostatecznie potwierdzi ważność dostarczonego katalogu głównego Merkle. Jednak dla użytkowników metoda ta wymaga zaufania do audytora i danych wykorzystywanych do audytu. Nie musisz polegać na stronie trzeciej, jeśli możesz zaufać danym.

Łączenie zk-SNARK z drzewami Merkle

Powyższy problem jest idealnym przypadkiem użycia zk-SNARK. Chcemy udowodnić, że rezerwy w pełni pokrywają zobowiązania użytkowników i nie są zafałszowane. Jednakże ze względu na prywatność i bezpieczeństwo nie chcemy pokazywać weryfikatorowi dokładnego składu sald i rezerw użytkowników.

Korzystając z zk-SNARK, giełda kryptowalut może udowodnić, że zestawy sald wszystkich węzłów liścia drzewa Merkle (tj. salda kont użytkowników) przyczyniają się do deklarowanego całkowitego salda aktywów użytkownika giełdy. Każdy użytkownik może łatwo uzyskać dostęp do swojego węzła liścia, ponieważ został objęty procesem. Zk-SNARK zapewnia również, że żadne wygenerowane drzewo Merkle nie będzie zawierało użytkowników z ujemnym całkowitym saldem aktywów netto (co oznaczałoby fałszowanie danych, ponieważ wszystkie pożyczki są nadzabezpieczone). Stosowane jest również obliczenie globalnego stanu Binance, tj. lista całkowitego salda netto każdego aktywa posiadanego przez każdego klienta Binance.

Przyjrzyjmy się, jak Binance podchodzi do tej sytuacji. Na początek Binance definiuje ograniczenia obliczeń, które chce udowodnić, i definiuje je jako programowalny obwód. Poniżej znajduje się zestaw trzech ograniczeń, które Binance wykorzystuje w swoim modelu.

Dla każdego zestawu bilansowego użytkownika (węzeł liścia drzewa Merkle) nasz obwód zapewnia, że:

  1. Salda aktywów użytkownika są uwzględniane przy obliczaniu sumy całkowitych sald użytkowników netto w Binance.

  2. Całkowite saldo netto użytkownika jest większe lub równe zero.

  3. Zmiana korzenia drzewa Merkle jest ważna (tj. nie wykorzystuje sfałszowanych informacji) po zaktualizowaniu informacji użytkownika do skrótu węzła liścia.

Binance może następnie wygenerować dowód zk-SNARK dla konstrukcji drzewa Merkle zgodnie z obwodem. Wiąże się to z koniecznością wykonywania przez giełdę ciężkich obliczeń związanych z haszowaniem identyfikatorów i sald użytkowników, przy jednoczesnym zapewnieniu, że dowód spełnia ograniczenia.

Weryfikator sprawdzi dowód (i jego publicznie udostępniony kod źródłowy), aby upewnić się, że obliczenia zostaną wykonane przy spełnieniu wszystkich ograniczeń. Obliczenia weryfikacyjne trwają niezwykle krótko w porównaniu z czasem sprawdzania.

Przy każdym wydaniu dowodu rezerw giełda opublikuje:

1. Dowód Merkle dla każdego użytkownika.

2. Dowód zk-SNARK i publiczne wejście (skrót listy całkowitego salda netto każdego zasobu i pierwiastek Merkle) obwodu dla wszystkich użytkowników.

Zainteresowane strony mogą zweryfikować dowód Merkle, upewniając się, że ich indywidualne salda przyczyniły się do korzenia drzewa Merkle. Mogą również zweryfikować dowód zk-SNARK, aby upewnić się, że konstrukcja drzewa Merkle'a spełnia ograniczenia określone w obwodzie. Bardziej szczegółowe wyjaśnienie rozwiązania zk-SNARK i jego wydajności można znaleźć na naszym blogu Jak zk-SNARK usprawniają system dowodu rezerw Binance.

Zamykające myśli

Zk-SNARK zapewniają technologię niezbędną do zapewnienia jednocześnie integralności i prywatności danych. Jego aplikacja do potwierdzania rezerw i zwiększania przejrzystości CEX powinna pomóc w budowaniu zaufania do branży blockchain. Dla wielu takie wydarzenie było długo oczekiwane i nadeszło w kluczowym momencie dla CEX-ów.

To jest pierwsza wersja naszego zk-SNARK i nie możemy się doczekać opinii społeczności, abyśmy mogli w dalszym ciągu udoskonalać system.

Dalsze czytanie

  • (Blog) Jak zk-SNARK usprawniają system dowodu rezerw Binance

  • (Akademia) Dowód rezerw (PoR)

  • (Akademia) Co to jest dowód rezerw i jak to działa na Binance

  • (Ogłoszenie)Binance udostępnia system dowodu rezerw