Co to jest MimbleWimble? | Więcej prywatności w blockchain
MimbleWimble to technologia, która została stworzona po to, aby hamować blockchain przed ujawnieniem pewnych informacji odnośnie prywatności. Możemy ją postrzegać jako protokół, który ma chronić użytkowników sieci blockchain przed ujawnianiem “sekretów” odnoszących się do ich prywatności. MimbleWimble jest w tym kontekście swoistym zaklęciem. Bohaterowie Harry’ego Pottera wymawiali je, aby związać język przeciwnika podczas magicznego pojedynku. Jaki rodzaj pojedynku toczy się w blockchain? Czym jest MimbleWimble i jakie spełnia zadania? Mam nadzieję, że po przeczytaniu tego tekstu wiele się Wam rozjaśni. Zapraszam do lektury.
Krótki rys historyczny
MimbleWimble to specjalistyczny protokół blockchain, który koncentruje się na zmienności, prywatności i skalowalności łańcucha bloków. Został przedstawiony światu w lipcu 2016 roku na kanale IRC #bitcoin-wizards przez Toma Elvisa Jedusora. W tekście towarzyszącym publikacji autor zaproponował zastosowanie nowatorskiego sposobu łączenia transakcji w celu poprawy prywatności w ramach publicznego blockchain.
Jedusor nie był jednak pionierem Mimblewimble. Jego opracowanie zostało stworzone na podstawie innej pracy, która została opublikowana anonimowo już w 2013 roku. Już wówczas zaproponowano wykorzystanie jednokierunkowych, zagregowanych podpisów (OWAS), który niestety nie znalazł aprobaty w środowisku. Zaproponowano rozwiązanie, które wymagało nowego algorytmu “kryptograficznego parowania”. To opracowanie posłużyło również jako źródło inspiracji dla Gregory Maxwell’a, który na jego podstawie wysnuł chociażby propozycję o nazwie CoinJoin.
Oryginalny whitepaper MimbleWimble wykorzystywał tę samą kryptografię o krzywej eliptycznej, z której korzysta Bitcoin, przyciągając uwagę wielu badaczy Bitcoinów, w tym Andrew Poelstry, matematyka i zastosowanego kryptografa w Blockstream, który dalej ulepszał MimbleWimble, wydając jego „precyzyjną” wersję w październiku 2016 r. Poelstra od dawna koncentruje się na prywatności, pracując nad transakcjami poufnymi i “skryptami bez skryptów” w ramach sieci Bitcoin.
Trudne wyzwanie
W pierwszej wersji zakładano, że MimbleWimble może być zintegrowany jako uaktualnienie do Bitcoin lub istnieć jako osobny sidechain, ale Pieter Wuille, współzałożyciel Blockstream i deweloper Bitcoin Core, wyjaśnił niektóre z wyzwań związanych z integracją go jako zmiany kompatybilnej wstecz w podcaście z 2016 roku:
„Wprowadzenie MimbleWimble do Bitcoina w sposób zgodny z poprzednimi wersjami byłoby trudnym wyzwaniem. To może nie być niemożliwe, ale byłoby trudne. Myślę, że gdyby ludzie eksperymentowali z tym, spodziewałbym się, że będzie to eksperymentalny oddzielny łańcuch lub łańcuch boczny. W łańcuchu bocznym nie wprowadzilibyśmy nowej kryptowaluty, ale byłby to oddzielny łańcuch. MimbleWimble ma pewne wady. W szczególności nie ma języka skryptowego… język skryptowy jest bardzo fajny, ale ma wadę prywatności. MimbleWimble przenosi to na drugą stronę, gdzie masz bardzo dobrą prywatność, ale kosztem żadnych innych funkcji. ”
Prywatność przede wszystkim – kontekst do rozważań o MimbleWimble
Manifest Satoshiego Nakamoto wyraźnie nakreślił wizję odnośnie ograniczeń prywatności w sieci. Czy zastanawialiście się kiedyś, jakie dane są tak naprawdę ujawniane w ramach blockchain Bitcoina? W kontekście każdej pojedynczej transakcji trzy aspekty są jawne zawsze i wszędzie. Są nimi adres, z którego wysłana została transakcja, ilość przesłanych monet oraz adres (klucz publiczny) odbiorcy.
Takie postawienie sprawy wypełnia znamiona każdego znanego systemu finansowego i nie można z tym dyskutować. Każdy taki system ma zatem dwa, ściśle regulujące go wymagania.
Pierwszym z nich jest możliwość zweryfikowania, czy ilość monet ramach transakcji wysłanej zgadza się z ilością monet po stronie odbierającej. Niemożliwe jest przecież do przyjęcia, aby wysłać 1 BTC a po drugiej stronie otrzymywać 2 BTC, a co gorsza w odwrotnej kolejności! Zasada jest zatem prosta. Jeżeli wysyłam Tobie 2 złote – Ty masz otrzymać dokładnie 2 złote – nie mniej, nie więcej. W takim systemie nic nie jest tworzone ad hoc, z powietrza. Nic też w takiej “przyrodzie” nie ginie.
Drugie wymaganie zdrowego systemu przepływu wartości odnosi się wprost do regulacji, według której każda zainicjowana przeze mnie transakcja zostaje zainicjowana z mojego konta – nie z Twojego. Możliwa jest przecież weryfikacja, z jakiego konta został wykonany przelew. W przypadku kryptowalut, narzędziem identyfikującym, że przesłane monety były w moim posiadaniu jest klucz prywatny.
Sieć Bitcoin spełnia w całości obydwa te wymagania. Posługujemy się bowiem kluczami publicznym i prywatnym. Klucz publiczny jest w tym przypadku adresem portfela, kluczem prywatnym podpisujemy transakcje. Każdy w sieci blockchain może sprawdzić, jaką ścieżką dane monety zmieniły właściciela. Stąd wiadomo na przykład, czy dany podpis pochodzi od nadawcy, który rzeczywiście miał prawo zainicjować transakcję.
MimbleWimble spełnia omówione powyżej dwa wymagania zdrowego systemu przepływu wartości. Jednocześnie nie ujawnia adresu nadawcy, ilości przesłanych monet ani adresu odbiorcy.
Beam, Grin i Mimblewimble
Aby móc kontynuować nasze rozważania, musimy na moment “skoczyć w bok” choć nie dosłownie i nie tak do końca:) Kompromis, który oddaje w nasze ręce MimbleWimble wyklucza ekspresyjny język skryptowy, który pozwala na innowacje, takie jak kanały płatności (np. Lightning Network) i cross-chain atomic swaps, które zostały wprowadzone w Bitcoin w 2017 roku. Od tamtej pory pojawiły się dwie wersje protokołu MimbleWimble. Różnią się od siebie pod względem społeczności, etosu, finansowania, jak i szczegółów technicznych.
Pierwsze implementacje
Pierwsza implementacja, Grin, która stała się synonimem MimbleWimble, została wydana zaledwie kilka dni po publikacji stanowiska Poelstry. Ignotus Peverell stworzył projekt ignopeverell/grin, w którym zadbał o implementację protokołu napisanego w Rust, a także opublikował swoją wizję etosu projektu.
Druga implementacja o nazwie BEAM to projekt, który rozpoczął się w marcu 2018 r. Co ciekawe, został oficjalnie ogłoszony w rocznicę pierwszego wydania manifestu MimbleWimble. BEAM został zaprezentowany w oddzielnym whitepaperze (wraz z w pełni funkcjonalnym węzłem górniczym i klientem portfela) i przybrał bardziej formalną strukturę podobną do Zcash, w przeciwieństwie do anarchicznego, otwartego etosu Grina.
Dzięki zdefiniowanemu zespołowi zarządzającemu / inżynierskiemu, przedsprzedażom, formalnej fundacji i podatkowi założycielskiemu, BEAM przyjął zupełnie inne podejście, aby przedstawić konkurencyjną alternatywę dla Grin na rynku. Oprócz tworzenia formalnej struktury wokół projektu, zespół BEAM dokonał zmiany różnych technicznych wyborów w ramach Grin, w tym decyzji związanych z polityką pieniężną i algorytmem mieszania. BEAM wystartował na początku stycznia 2019 r.
Zrozumieć UTXO – przeczytaj, zanim przejdziesz dalej
Prywatność była od samego początku jednym z głównych problemów w sieci Bitcoin. Na przestrzeni lat zaobserwowano wiele prób pozbawienia anonimowości transakcji, poprzez podejmowanie prób dotyczących analizy sieci i bloków. Z czasem przyjęło się sądzić, że takie projekty, jak chociażby Monero czy Zcash charakteryzują się znacznie większym poziomem prywatności i anonimowości. Z czasem również Bitcoin dostrzegł możliwości dokonania znacznych ulepszeń na tym polu zarówno w warstwie protokołu, jak i transakcji.
Zarówno Grin, jak i BEAM używają tego samego modelu wyjścia niewydanych transakcji (UTXO), którego używa Bitcoin, w przeciwieństwie do innych kryptowalut, takich jak na przykład Ethereum.
Źródło: Wizualizacja modelu UTXO Bitcoina z dokumentacji Bitcoin.org
Zauważ, że gdy wysyłane jest 90 tysięcy (90k) satoshi przez zainicjowane transakcje TX1 i TX2, tworzone są dwa wyjścia (outputy). Wynoszą one odpowiednio w wysokości 50 i 40 tys. satoshi i są skierowane na adres określony przez nadawcę.
Haszowanie wyższego poziomu
Mówiąc bardzo oględnie – Bitcoin, Grin i BEAM pozwalają na to poprzez użycie kryptograficznego mieszania (funkcji hashującej). Na bardzo wysokim poziomie funkcja mieszania pozwala na wprowadzenie danych wejściowych, zastosowanie kryptograficznej funkcji skrótu lub CHF (która jest standardową transformacją) i uzyskanie wyjścia o stałym rozmiarze (zwanego skrótem). Jest to zilustrowane poniżej.
Teraz najważniejsze. Cała magia CHF polega na oddaniu asymetrii między atakującym a broniącym się. Co to znaczy? Naprawdę łatwo jest zaimportować dane wejściowe, ale bardzo trudne jest odwrócić skrót, innymi słowy – uzyskanie oryginalnych dane wejściowych. Większość założeń bezpieczeństwa internetowego na całym świecie, od haseł do kluczy publicznych / prywatnych, jest haszowana, a bezpieczni jesteśmy do momentu, w którym będziemy dysponować potężnymi komputerami kwantowymi, aby ten proces odwrócić.
Diagram przedstawiający schemat działania kryptograficznej funkcji haszującej
W modelu UTXO Bitcoina jest oczywiste, że są trzy informacje publicznie widoczne i weryfikowalne. Są to: informacje wejściowe (input), informacje wyjściowe (output) i kwota transakcji. Żadna z tych informacji nie jest ukryta. Co więcej, pozwala na łatwą weryfikację, ile pieniędzy znajduje się w systemie. Wszystko dlatego, że wszystkie UTXO sumują się w oczekiwany zasób bitcoinów w systemie.
Należy jednak zwrócić uwagę, że wymienione własności są kompromisowe i w jakiejś mierze uznaniowe. Dzieje się tak dlatego, ze wszystkie te informacje wydają jak niezaszyfrowane dla zewnętrznego obserwatora (choć są poddane działaniu funkcji mieszania). Podczas gdy społeczność rozwinęła najlepsze praktyki, takie jak zniechęcanie do ponownego wykorzystywania adresów i zachęcanie do korzystania z „mikserów” (gdzie bitcoiny są obrzucane „świeżymi” UTXO zwróconymi użytkownikowi), działania dotyczące prywatności, takie jak CoinJoin i Confidential Transactions, zostały rozszerzone i zawierają bardziej niezawodne funkcje prywatności dla użytkowników.
Jak zatem MimbleWimble ulepsza prywatność w kontekście UTXO?
MimbleWimble wprowadza kilka zmian w modelu UTXO Bitcoin, aby umożliwić prywatne transakcje, oparte na transakcjach poufnych i połączeniach. W dokumentacji MimbleWimble czytamy, że:
- Nie ma adresów
- Nie ma kwot (ilości)
- 2 transakcje, z których jedna wydaje drugą, można połączyć w blok, tworząc tylko jedną, usuwając wszystkie informacje pośrednie.
Dwa pierwsze komponenty znajdują wyjaśnienie w modelu użycia Confidential Transactions. Został on zaproponowany przez byłego CTO Blockstream, który w celu ulepszenia modelu UTXO Bitcoina wykorzystuje zmienną kryptograficzną zwaną schematem zaangażowania Pedersona. Zastosowanie tej metodologii polega na tym, że w przypadku transakcji poufnych tylko uczestnicy transakcji mogą zobaczyć jej kwotę. Jest jednak jeden problem. Trzeba nie uczestniczyć w systemie, aby móc stwierdzić, kiedy transakcja jest fałszywa – aby zapobiec wydaniu przez użytkownika większej ilości pieniędzy niż się ma.
Jak to jest zrobione?
Na zasadzie “kryptograficznej “umowy” (“zobowiązania”). I choć brzmi to dość dziwnie, można by wytłumaczyć w następujący sposób:
„Udowadniam, że coś wiedziałem, zanim zmieszałem informacje, ponieważ nie mogę odwrócić skrótu, aby ujawnić to, co wiedziałem.”
W sieci Bitcoin, gdzie proste kryptograficzne funkcje mieszające są używane do realizacji zobowiązań transakcyjnych, niezbędne są kwoty wejściowe, wyjściowe i transakcyjne. Zobowiązanie Pedersona ulepsza ten model poprzez zapewnienie, że suma danych wejściowych i wyjściowych będą weryfikowalnie równe. Kryptograficzne dowody, które pozwalają na uzyskanie takiego poziomu pewności, wykraczają poza zakres tego artykułu, ale ujawnia to jeden kluczowy pogląd. Konkretne dane wejściowe i wyjściowe mogą pozostać tajemnicą. Bezpieczeństwo systemu (i weryfikowalność tego bezpieczeństwa w każdej transakcji przez osoby, które nie będą jej uczestnikami) pozostanie nienaruszona.
Ok ale przecież można postawić pytanie, co powstrzyma kogoś przed wprowadzeniem dwóch danych wejściowych w stylu 10 BTC i -10 BTC, używając 10 BTC jako wejścia w poufnej transakcji i pomijając -10BTC? Rozwiązaniem w transakcjach poufnych jest użycie innej zmiennej kryptograficznej zwanej dowodem zasięgu (range proof). Dowód ten sankcjonuje całkowitą podaż pieniądza, gwarantując, że dane wejściowe w systemie istnieją wyłącznie w pewnym zakresie (w naszym przypadku jako wartości dodatnie).
Żadnych adresów. Żadnych kwot. CoinJoin!
Wszystkie implementacje MimbleWimble wykorzystują transakcje poufne, aby upewnić się, że w systemie nie ma żadnych adresów ani kwot.
Trochę tego dużo, ale pamiętacie jeszcze trzeci postulat MimbleWimble (2 transakcje, z których jedna wydaje drugą, można połączyć w blok, tworząc tylko jedną, usuwając wszystkie informacje pośrednie)? To rozwiązanie znajduje uzasadnienie w użyciu CoinJoin, który notabene również stworzył Gregory Maxwell. Na czym to polega?
Ukrywanie informacji ujawnionych w transakcji jest kluczowe i dokonywane w transakcjach poufnych. Mimo to historia transakcji wciąż zawiera bogactwo ukrytych informacji. Pozwalają one komuś z wystarczającą ilością zasobów obliczeniowych na łatwą wizualizację i wnioskowanie o zależnościach między różnymi transakcjami w sieci.
Taka metodologia nie jest wcale bezprecedensowe – firmy takie jak Elliptic, Chainalysis (pamiętacie ten artykuł?), czy Coinfirm używają takich form dochodzeniowych w celu wykrywania oszustw i „nielegalnych transakcji” (np. prania pieniędzy, aktywności na czarnym rynku) i są dobrze finansowane przez użytkowników, począwszy od giełd kryptowalut na organizacjach rządowych kończąc.
Przykład takiego wykresu przedstawia się następująco:
Przykładowa wizualizacja transakcji Bitcoin autorstwa Benedicta Koehlera.
Realny problem = Realna potrzeba
Przedstawienie moralnego argumentu za zaletami pełnej prywatności wykracza poza zakres tego artykułu. Problem ten nie dotyczy tylko handlarzy narkotyków i osób zajmujących się praniem pieniędzy. Wykres, na podstawie którego można prześledzić wszystkie transakcje pozwala analitykom na wykrywanie zaburzeń w transakcjach. Utrzymanie prywatności na tym froncie pozostaje celem dla dobra nas wszystkich.
W modelu CoinJoin dane wejściowe od wielu użytkowników są łączone w tzw. zestaw anonimowości (anonymity set). Następnie są mieszane w celu zapewnienia, że wykres transakcji jest trudniejszy do śledzenia. Pokazuje to poniższy rysunek, na którym widać wejścia Alice i Boba 10BTC i 20BTC, które zostały połączone w transakcji CoinJoin.
Żródło: tutaj
Portfele bitcoin, takie jak portfel Wasabi i tumblery takie jak TumbleBit, wdrożyły CoinJoin, aby zapewnić prywatność warstwy transakcyjnej Bitcoinowi. Jednak są one w znacznym stopniu niezadowalające. Zestaw anonimowości tych produktów wydaje się być bardzo mały. Wszystko dlatego, że w każdej transakcji jest tylko kilku uczestników, a uzyskanie odpowiednich funduszy zajmuje zwykle dużo czasu. Naukowcom udało się nawet zdeanonimizować większość transakcji.
Implementacje MimbleWimble rozwiązują ten problem. CoinJoin staje podstawową częścią protokołu, a nie ulepszeniem prywatności warstwy transakcyjnej wdrażanym przez portfele i usługi innych firm. W MimbleWimble wszystkie transakcje w każdym bloku są automatycznie zwijane w pojedynczą transakcję. Większość informacji o transakcjach pośrednich jest ukryta.
Zrozumieć, co się robi
W tym momencie można się zastanawiać na jedną sprawą. Dane wejściowe, dane wyjściowe i kwoty transakcji są ukryte. Wykres transakcji wystarczająco zaciemniony. Czy są inne sposoby, aby zmotywowani uczestnicy sieci zrozumieli, co robię?
Ostatecznym potencjalnym punktem niepowodzenia jest zdolność pojedynczych węzłów do anonimizacji transakcji dzięki wykorzystaniu pierwotnego adresu IP.
Transakcja Bitcoin zostaje transmitowana do zestawu węzłów, które następnie szybko transmitują ją do swoich węzłów równorzędnych. Dzieje się to w ramach tak zwanej “sieci plotek” Bitcoin (gossip network). Ma to miejsce jeszcze zanim zostaną skonsolidowane w blok. Poszczególne transakcje są emitowane w kawałkach. Aktor, który chce zrozumieć twoje transakcje, może to zrobić, rejestrując transakcje i adresy IP, z których pochodzą. Pozostaje nadzieja na wykorzystanie tych informacji do uzyskania informacji o czyjejś aktywności.
Rozwiązanie tego problemu, które zostało zaproponowane w ramach MimbleWimble opiera się na innej propozycji ulepszeń (BIP), która została zaprojektowana dla Bitcoina. Jej nazwa do Dandelion. Jego autorem jest zespół naukowców z University of Illinois w Urbana-Champaign.
Jaki jest zatem cel Dandelion?
Zasadniczym celem Dandelion jest, krótko mówiąc, zaciemnienie adresu IP transakcji bitcoinowej. Polega to na rozgłoszeniu transakcji w sieci w podziale na dwie zasadnicze fazy: macierzystą (w której transakcja zostaje ”zaciemniona”) i fazę fluff, podczas której zostaje rozgłoszona w sieci.
W pierwszej kolejności transakcja zostaje przekazana do pojedynczego węzła, ten jest następnie przekazywany do kolejnego pojedynczego węzła i pozostaje tam do momentu, kiedy nie pojawi się wystarczająca liczba „przeskoków” z pierwotnego węzła równorzędnego. W tym momencie transakcja jest transmitowana do reszty gossip network. Wizualizację tego można zobaczyć poniżej, gdzie transakcja (w fazie 1) jest transmitowana do pojedynczego peera przed rozprzestrzenieniem się na pozostałą część sieci (faza 2). Taki spread działa trochę jak dmuchawiec (stąd nazwa:)).
Źródło: tutaj
Połączenie ulepszeń, takich jak poufne transakcje, CoinJoin i Dandelion, pozwala implementacjom MimbleWimble na odejście od tradycyjnych, dotychczasowych rozwiązań, takich jak adresy w rozumieniu zobowiązań podjętych przez ludzi generujących transakcje występujących w formie unii klucza publicznego/prywatnego wykorzystywanego w Bitcoin do przeprowadzenia transakcji. Umożliwia to MimbleWimble oferowanie ulepszeń dotyczących prywatności w porównaniu z Bitcoinem, oferując w pełni prywatną kryptowalutę.
Podsumowując
We współczesnym świecie coraz częściej mamy do czynienia z uczącymi się mechanizmami sztucznej inteligencji. Czasem chcemy znać nadawcę i odbiorcę, czasem nie chcemy pokazywać kwoty transakcji. Są również momenty, w których chcielibyśmy wiedzieć, co wydarzy się w niedalekiej przyszłości. Tak czy inaczej, prywatność jawi się jako niezbędna cecha wszystkich tworzonych w przyszłości systemów opartych o przekazywanie wartości.
Problem polega na tym, ze czasem z punktu widzenia prawa takie zniknięcie transakcji może powodować pewne podejrzenia, choć nie zawsze jest to wynikiem nieczystych intencji osób biorących udział w transakcji. Tak rozumiana prywatność powinna stać się zarówno wolnym wyborem jak i przywilejem.
Protokół MimbleWimble stanowi wspólny rdzeń dla różnych podejść w ramach problemu prywatności, znajdując odzwierciedlenie zarówno w implementacji BEAM jak i Grin. Nie sądzę, że te implementacje miałyby się ścigać w dążeniu o miano „lepszej”. Ważne, że obydwie chcą służyć wspólnemu dobru.