Co to jest MimbleWimble – czyli sekret anonimowego pomysłodawcy

Mimblewimble to protokół zaproponowany (w 2016 roku) przez anonimowego użytkownika forum BitcoinTalk o ksywce Tom Elvis Jedusor (francuska nazwa fikcyjnej postaci z „Harry’ego Potter’a”, Voldemort). “Mimblewimble” to nazwa zaklęcia używanego do związania ofiar w „Harry’m Potter’ze”. Jedusor pozostawił link do “White Paper’a”, w którym podkreśla, że dzięki zastosowaniu protokołu Mimblewimble można znacznie zwiększyć skalowalność, a także prywatność sieci Bitcoin.

Społeczność szybko podchwyciła pomysł. Do pracy nad kryptowalutą podeszło kilku developerów, którzy, aby chronić swoją tożsamość po dziś dzień są nieznani z imienia i nazwiska. Na forach rozpoznawani są jedynie po nickach. Prace pod protokołem MimleWimble trwały dość długo, gdyż nie było jednoznaczego konsensusu czy za pomoca otrzymanego “daru” ulepszyć Bitcoina, czy też storzyć nowy projekt.
Ostatecznie na początku 2019 roku utworzone zostały dwie pierwsze kryptowaluty wykorzystujące protokół Mimblwimble: Grin i Beam. Sam protokół można zastosować również w innych kryptowalutach, ale tylko na zasadzie odrębnego sidechaina.

Co daje MimbleWimble?
Sam protokół można nazwać najprościej “Ulepszonym Bitcoinem”. A jego najważniejsze cechy to:

  • anominowość wszystkich transakcji
  • skalowalność Blockchaina

Co z tą anonimowością?

Na działanie anonimowości w MimbleWimble składają się następujące technologie:

  • Confidential Transaction (ukrywanie wartości transakcji portfela osoby przyjmującej I wysyłającej płatność)
  • CoinJoin (miksowanie transakcji)
  • Merkle Tree (łączenie transakcji ze sobą w jedną dużą, dzięki czemu można zaoszczędzić sporo miejsca na blockchainie)

Pierwszą sztuczką są Confidential Transaction (Transakcje Poufne), które zostaną również zastosowane w łańcuchu bocznym Blockstream dla Bitcoina. Transakcje poufne pozwalają użytkownikom ukryć kwoty związane z transakcją, tak aby tylko nadawca i odbiorca wiedzieli, ile coinów jest przesyłanych. Używając sztuczki kryptograficznej, każdy inny użytkownik sieci może potwierdzić prawidłowość transakcji bez posiadania wiedzy na temat szczegółów jej elementów. To pozwala nodom zweryfikować, czy kwota wysłana i odebrana jest równa, a zatem nie powstały żadne nowe monety w sieci. Całość opiera się na krótkim równaniu matematycznym określonym w pierwotnej Białej Księdze (White Paper):

Pod odpowiednie symbole należy podstawić konkretne liczby, zmienne i dane z klucza prywatnego wysyłającego. Dokładne dane dotyczące tych wyliczeń można znaleźć w jednym z objaśnień do którego serdecznie zapraszam:

https://medium.com/@brandonarvanaghi/grin-transactions-explained-step-by-step-fdceb905a853

Następuje tam szyfrowanie sumy wysyłanych środków, które są praktycznie niemożliwe do rozszyfrowania przez współczesne komputery i opierają się na tzw. potocznie mówiąc “magii wielkich liczb”.
Prościej: gdy mamy do obliczenia następujące działanie: 3x + 5 = 17 to możemy z łatwością wyliczyć nieznaną x. Trochę trudniej może być jeśli przyjdzie nam policzyć takie działanie: x * y =15489.
Poziom trudności wyliczenia zmiennych ulega gwałtownemu utrudnieniu gdy do wzoru dodamy więcej niewiadomych np: 15,254 * y / 18596 * x * 17516478,25 * z *52486 = 2536478965542 * k Rozumiem że dla większości osób może to być dość niezrozumiałe i dlatego proponuje zaznajomić się z odpowiednim artykułem, który jeszcze dokładniej opisuje trudność rozszyfrowania ukrytych informacji za pomocą Confidential Transaction:

https://medium.com/beam-mw/mimblewimble-explained-like-youre-12-d779a5bb483d

Ogólnie rzecz biorąc osoba tworząca transakcje pod zmiennie podkłada odpowiednie dane takie jak dane klucza prywatnego z krzywej eliptycznej, wartość coinów itd.

Drugą sztuczka to CoinJoin, pierwotnie zaproponowany przez współtwórcę Bitcoin Core, Gregory’ego Maxwella. CoinJoin łączy kilka transakcji w jedną dużą transakcję, w której wszyscy nadawcy wysyłają pieniądze do wszystkich odbiorców. Jeśli zostanie to zrobione poprawnie, to sprawia że, nie można jednoznacznie potwierdzić z którego adresu wejściowego wyszły środki do konkretnego adresu końcowego.

mimblewimble-coinjoin-transaction

Jest to sztuczka która jest już wykorzystywana w Bitcoinie od pewnego czasu i służy najprościej mówiąc do “miksowania coinów”. Dość znanym portfelem który to umożliwia jest Wasabi Wallet. A dużymi krokami nadciągające podpisy Schnorra to znacząco ułatwią.

Trzecią technologią jest Merkle Tree. Jest to technologia, która tak samo jak CT i CoinJoin ma zamiar zostać zaimplementowana do Bitcoina za pomocą sidechainów. Merkle Tree szyfruje transakcje na poziomie nodów w sieci, a następnie łączy transakcje ze sobą. Dzięki tej “sztuczce” oszczędzamy bardzo dużo cennego miejsca na blockchainie, a także szyfrujemy wszelkie informacje związane z adresem wysyłającego i odbiorcy.

Podsumowując, połączenie technologii Confidential Transaction, CoinJoin i Merkle Tree sprawia że anonimowość w protokole MimbleWimble stoi na bardzo wysokim poziomie. Jeśli dodamy do tego, że osoba wysyłająca środki będzie korzystała z sieci Tor, lub VPN eliminujemy wtedy również możliwość zlokalizowania IP odbiorcy.

Redukcja “wielkości” blockchaina

Konstrukcja protokołu MimbleWimble pozwala na anulowanie starych danych transakcji. Pozwala to na radykalną formę przycinania: większość starych danych transakcji można zapomnieć (oprócz tzw transakcji karnel, muszą one pozostać w blokach). Nowe węzły nie muszą być synchronizowane z całym łańcuchem bloków, a ilość danych, które muszą przechowywać węzły, powinna rosnąć znacznie wolniej niż w przypadku typowych łańcuchów bloków. Prawo własności do funduszy zapewnia jądro transakcji (karnel), które pozostaje na zawsze w bloku i jest nieusuwalne.

Ponadto można udowodnić, poprzez sumowanie liczby wejść i wyjść, że nie utworzono żadnych nowych funduszy z powietrza. Oznacza to, że blok Mimblewimble może po prostu zawierać tylko:

Nagłówek bloku
Lista danych wejściowych pozostałych po wycięciu
Lista wyników pozostałych po wycięciu
Jądro transakcji
Przesunięcie jądra

Aby lepiej zrozumieć możliwość bezkarnego niepobierania wszystkich transakcji najpierw należy uświadomić sobie, że w blokach zapisywane są ich 3 rodzaje:
-coinbase – transakcja która przydziela nowo wykopane coiny górnikom
-input/output – transakcja w której widnieje zaszyfrowana wiadomość zbiorcza o połączonych ze sobą transakcjach użytkowników
-karnel – transakcja, która ma za zadanie nadzorować transakcje input/output przed wytwarzaniem coinów “z powietrza”. Przechowuje ona również zaszyfrowane i sformatowane klucze użytkowników.

Gdy transakcja się już odbędzie i pozostanie potwierdzona przez sieć to informacje znajdujące się w transakcjach input/output są już zbędne, gdyż potwierdzenie prawidłowości transakcji znajduje się już w transakcji karnel.

Transakcje karnel w dodatku sa bardzo “lekkie” to znaczy zajmują bardzo nie wiele miejsca liczonego w bajtach w przeciwieństwie do standardowych transakcji. To właśnie dzięki temu “stare” i wykorzystane już portfele UTXO nie są potrzebne, aby były przechowywane na blockchainie.

Nowe osoby, które chcą pobrać “pełnego noda” nie pobierają już informacji o transakcjach input/output, gdyż jest to niepotrzebne. To właśnie dzięki temu sieć może rozrastać się o nowe nody w szybkim tempie, a sam blockchain może być kilkukrotnie lżejszy.

Przykładowo jeśli po jakimś czasie zainstalujemy ponownie portfel to pobierze on transakcje karnel i coinbase. Za pomocą swojego klucza prywatnego portfel sprawdzi po transakcjach karnel do których z nich ma dostęp i czy są w nich jakieś coiny, które do niego należą. Co ważne nie będziemy mieli już historii transakcji w portfelu, gdyż ta została usunięta wraz z niepobranymi transakcjami input/output.

“Luka” protokołu.

Na wstępie zaznaczę, że omówiona “luka” jest bardzo trudna do wykonania, wymaga znacznej centralizacji sieci. Co prawda transakcje są anonimowe na blockchainie lecz jest pewna “dziura”. A dokładniej moment w którym transakcje są wysyłane do nodów w celu ich połączenia ze sobą. Transakcje wtedy posiadają jedynie zaszyfrowane informacje o kwocie przelewu. Adresy natomiast są widoczne. Od razu gdy tylko taka transakcja trafi do kolejnego noda jest szyfrowana i łączona z kolejną transakcją itd.

Jeśli założymy że ktoś o niesłychanie dużej przepustowości łącza internetowego, z przeogromną dużą ilością własnych nodów będzie podsłuchiwał sieć to będzie w stanie wychwycić moment w którym widać jaki adres, do którego wysyła środki, lecz nie będzie w stanie wyśledzić jakiej wielkości to środki. Moim zdaniem jest to trudne do wykonania. Możliwe, że implementacje jak Beam czy Grin w przyszłości zniwelują, lub obejdą tę przypadłość. Obecnie developerzy rozumieją ten błąd, są jego świadomi i starają się go zredukować (odpowiednim przesunięciem transakcji), lub całkowicie usunąć.

Jednym z proponowanych rozwiązań jest łączenie transakcji między zaufanymi użytkownikami, zanim jeszcze trafią do reszty sieci, podobnie jak w przypadku rozwiązań związanych z prywatnością Bitcoin związanych z CoinJoin. Pomogłoby to zaangażowanym użytkownikom, ale miałoby to również wadę podobną do tej w przypadku Bitcoin: ci użytkownicy, którzy uważają, że nie mają nic do ukrycia, mogą nie chcieć zawracać sobie głowy dodatkowym kłopotem. To w efekcie osłabia prywatność dla wszystkich, a nawet może budzić podejrzenia u tych, którzy z niej korzystają.

Drugą propozycją jest dodanie do transakcji wyników „pozorowanych”, zawierających zero monet. Zaciemnia to miejsce, do którego naprawdę przeniesiono pieniądze. Ten manewr wiąże się również ze zwiększonym kosztem, jednak ryzykuje się, że nie wszyscy go użyją. (Należy pamiętać, że nie zaszkodzi to długoterminowej skalowalności Mimblewimble, ponieważ takie dane transakcji zostałyby anulowane po czasie i zniknęłyby).

Trzecią propozycją jest agregacja transakcji, gdy są one rozproszone w sieci, potencjalnie w połączeniu z techniką zaciemniania peer-to-peer typu Dandelion. Jeśli węzły dodają wcześniej wszystkie znane im transakcje do dużej transakcji podobnej do CoinJoin przekazując go, poprzez tzw. „efekt śnieżki” bardzo utrudni szpiegom wyciągnięcie interesujących ich danych. To rozwiązanie jest jednak dość trudne do wdrożenia i wprowadza kilka nowych problemów. Dobrze pokazuje tę kwestię następująca grafika:

Piersza faza to faza puchu. W której użytkownik najpierw wysyła transakcję do innego użytkownika, a dopiero wtedy jest ona wysyłana wraz z innymi do noda. Zmniejsza to możliwość wykrycia IP. W Mimblewimble, ze względu na specyficzną strukturę transakcji, puch można jeszcze ulepszyć, stosując tak zwaną sztuczkę „przesunięcia transakcji”, która pozwala na połączenie kilku transakcji i nieodwracalne połączenie ich nakładów i wyników. Oznacza to, że nawet jeśli węzeł wzdłuż fazy “trzonu” zostanie podsłuchiwany, nie będzie możliwe ustalenie, które dane wejściowe i wyjściowe zawierał początkowo. Zasadniczo Dandelion zapewnia znaczną poprawę poufności warstwy P2P kryptowaluty. Nie mniej jednak jak zaznaczyłem jest trudny w implementacji w kodzie kryptowaluty.

Prawda czy Mit?

Portfele muszą być Online
Dość głośno jest w internecie na temat pewnej niedogodności w MimbleWimble dotyczącej wykonywania transakcji. Otóż aby wykonać transakcje od jednej osoby do drugiej konieczne jest aby obydwie osoby miały włączony portfel i podłączony do sieci w momencie transakcji. Jest to zapis pochodzący z Whitepapera MW. Lecz kryptowaluta Beam już rozwiązała ten problem poprzez zastosowanie technologii: System Secure Bulletin Board (SBBS). Rozwiązuje on problem, umożliwiając jednostronne transakcje offline, dzięki czemu użytkownik Beama odczuwa prawie to samo, co w przypadku innych kryptowalut, takich jak Bitcoin, Litecoin, itd. Dzięki SBBS portfele klientów mogą wymieniać wiadomości według węzłów i przesyłać je dalej (więcej o SBBS w pliku z Beam’em).
Dzięki SBBS wiadomości są prywatne, gdy są adresowane do konkretnej osoby, takie wiadomości są szyfrowane za pomocą klucza publicznego osoby odbierającej przed wysłaniem, bez konieczności ufania węzłom przekazującym. Należy pamiętać że taka transakcja w MimbleWible zaczym zostanie potwierdzona przez odbiorce I zapisana w blockchainie znajduje się w sieci I po 12 godzinach zostaje usunięta, jeśli nikt się po nią nie zgłosi.

W MimbleWimble nie ma kluczy publicznych.

Jest to kolejny mit, a dokładniej nie zrozumienie wynikające z błednych informacji w sieci. Jak już wspomniałem w poprzednich wywodach na blockchainie Grina, czy Beama nie ma zapisanych bezpośrednio na blockchainie kluczy publicznych, ani też wartości przelewanych coinów. Zamiast tego jest odpowiednio zaszyfrowana wiadomość. Dzięki temu informacje są tajne, a sam blockchain nie waży tak dużo. Każdy użytkownik posiada w swoim portfelu pęk kluczy publicznych, którymi może się dzielić z innymi, gdy chce otrzymać płatność. Podsumowując, użytkownik ma klucze prywatne, lecz bezpośrednio na blockchainie są one niewidoczne.

autor: Bioniczny Kogut

Comments (No)

Leave a Reply