Jak działa Monero? Czy naprawdę jest tak anonimowe?

Kontrowersyjna kryptowaluta Monero

Monero jest bardzo kontrowersyjną kryptowalutą. Jedni ją cenią i widzą w niej przyszłość, wolność i niezależność, a drudzy szkalują twierdząc że służy tylko do prania brudnych pieniędzy. Ale jak ona tak naprawdę działa? Dziś postaram się o tym trochę opowiedzieć.

W przeciwieństwie do Bitcoina, Monero zapewnia zwiększoną funkcjonalność i prywatność, dzięki kilku unikalnym technologiom kryptograficznym, które chronią użytkowników i ich aktywność przed publiczną widocznością. 

Powyższy rysunek pokazuje, jak te uzupełniające się funkcje współpracują ze sobą aby chronić wrażliwe szczegóły transakcji:

• RingCT ukrywa kwotę transakcji.

• Ring Signature chronią nadawcę poprzez „zaciemnianie” adresu wyjściowego.

• Stealth address (One-time Address) zapewnia, że adres odbiorcy nie jest rejestrowany na blockchainie.

• Dandelion++ odpowiada za ukrycie IP urządzenia z którego wychodzi transakcja.

RingCT czyli “mam, ale nie powiem ile”

RingCT to technologia kryptograficzna, która ukrywa ilość Monero, którą wysyłamy. W przypadku większości kryptowalut kwoty transakcji są wysyłane w postaci zwykłego tekstu, widocznego dla każdego obserwatora. RingCT utrzymuje poufne informacje w tajemnicy, zezwalając nadawcy, aby udowodnił, że ma wystarczającą ilość Monero na transakcję, bez ujawniania wartości o tej kwocie. Jest to możliwe dzięki zastosowanej zaawansowanej kryptografii opierającej się na tak zwanej technologii „range proofs”.

Wysyłając XMR, „zatwierdzasz” kwotę w prywatny sposób, ujawniając wystarczającą ilość informacji do potwierdzenia przez sieć legalności transakcji, bez publicznego ujawniania kwoty która znajduje się na twoim portfelu. Aby to lepiej zobrazować przypuśćmy że zamkniemy Pana Damiana w pokoju z zamkniętymi na kod drzwiami. Aby wyjść z niego będzie musiał znać kod do drzwi. Nie musi on go nam podawać, aby udowodnić że go zna. Wystarczy że wpisze kod, drzwi się otworzą, a on wyjdzie z pokoju udowadniając swoją wiedzę. Najważniejsze w tej technologii jest to, że gwarantuje ona, że transakcja nie tworzy, ani nie wydaje dodatkowych coinów.

monero-hardfork

Range Proof jest kolejnym ważnym mechanizmem w RingCT, jako metoda zapewniająca, że ​​wysyłana kwota jest większa od zera, oraz mniej niż „pewna”, określona liczba. Jest to konieczne, aby uniemożliwić nadawcy wysyłkę wydrukowanych „z powietrza”, lub niemożliwie wysokich ilości Monero. Razem RingCT i Range Proof chronią wysyłkę XMR przed oszukańczą manipulacją i próbami fałszerstwa.

Przed RingCT transakcje kryptowaluty Monero były podzielone na konkretne nominały (na przykład 12,5 XMR zostanie wysłane jako 10 XMR+ 2 XMR + 0,5 XMR), a kwoty transakcji były widoczne dla obserwatorów zewnętrznych. RingCT został aktywowany w styczniu 2017 roku i szybko nastąpiło powszechne przyjęcie. W ciągu 1 miesiąca od jego aktywacji, około 98% nowych transakcji już korzystało z protokołu RingCT.

Zgodnie z polityką Monero dotyczącą domyślnej ochrony prywatności, RingCT stał się obowiązkowy dla wszystkich transakcji Monero po wrześniu 2017 r. Aby wydać jakiekolwiek stare wyjścia sprzed RingCT, muszą najpierw być konwertowane na wyjścia RingCT z zamaskowanymi wartościami.

Stealth address, czyli jednorazowe adresy

Wszystkie transakcje Monero wykorzystują ukryte adresy w celu ochrony prywatności odbiorcy. Aby uniknąć zapisywania adresu portfela odbiorcy na blockchainie, każda transakcja Monero jest wysyłana do unikalnego, jednorazowego adresu. Odbiorca ma dostęp do środków przesłanych na ukryty adres, bez ujawniania żadnych połączeń do prawdziwego publicznego portfela i historii transakcji.

monero-malware

Aby zobrazować użycie losowych kodów jednorazowych w celu ochrony tożsamość odbiorcy, wyobraź sobie, że chcesz przekazać kilka książek swojemu koledze Radkowi. Niestety masz zamiar opuścić miasto, a Radek nie będzie w pobliżu w najbliższym czasie. Być może mógłbyś poprosić jego sąsiada, aby tymczasowo trzymał książki i przekazał je odbiorcy.

Jego sąsiad będzie musiał potwierdzić, że osobą uprawnioną do odbioru książek jest Radek. W celu zachowania prywatności twojego kolegi niewłaściwym byłoby powiedzieć, że po książki zgłosi się Radek. W jaki sposób mógłbyś zorganizować wymianę, zachowując prywatność Radka?

Możesz po prostu wymyślić jednorazowy kod losowy i podać go sąsiadowi, aby przekazał książki każdemu, kto przedstawi ten kod. Twój sąsiad będzie mógł śledzić książki i przekaże je Radkowi, nie dowiadując się niczego o odbiorcy. 

Kryptowaluta Monero używa systemu Stealth Address, aby uniemożliwić wyśledzenie odbiorcy. W jaki sposób generowane są te jednorazowe adresy? Kiedy ktoś prześle Ci fundusze, to portfel użyje klucza View Key wraz z niektórymi losowymi danymi do wygenerowania unikalnego jednorazowego klucza publicznego. Te jednorazowe klucze publiczne które są rejestrowane w transakcjach w łańcuchu bloków nazywane są stealth address, ponieważ sieć, lub zewnętrzny obserwator nie mogą połączyć tych losowych kodów z powrotem z portfelami, z których pochodzą.

Zauważ, że podadresy to nie to samo, co ukryte adresy. Podadresy to adresy portfeli publicznych wielokrotnego użytku, które nie są rejestrowane w łańcuchu bloków. Używa się ich, np gdy chcesz podać swój adres do wspierania swojej strony. Mimo, że wiele transakcji zostało wysłanych na jeden podadres, to i tak blockchain będzie wskazywać na różne i niemożliwe do połączenia stealth adresy.

Zwiększona prywatność dzięki nierejestrowaniu adresów portfeli w łańcuchu bloków to wyraźna korzyść z implementacji ukrytych adresów. Wniosek jest taki, że używanie tych unikalnych jednorazowych kluczy zapobiega połączenie wielu płatności z tym samym adresem.

Załóżmy, że tworzysz publiczne graffiti i wysyłasz adres do darowizn w kryptowalutach. Jeśli używasz monety z transparentnym łańcuchem bloków (np. Bitcoin), to każda transakcja przychodząca na ten adres jest trwale zapisana w formie pokazującej wszystkie informacje o tobie. Każdy może użyć eksploratora blockchain, aby zobaczyć, ile darowizn Bitcoin do Ciebie zostało wysłanych, ich kwotę oraz informację, czy środki zostały przeniesione. Każda przychodząca transakcja Bitcoin jest indeksowana w blockchainie przez adres, który udostępniłeś publicznie.

Jeśli zamiast tego podasz adres Monero, Twoje darowizny nie są podane publicznie.

Ring signature

Podpisy pierścieniowe to funkcja Monero zaprojektowana w celu ochrony nadawcy transakcji poprzez zaciemniane adresy z których wydaje się monero. Zanim przejdę do sygnatur pierścieni, przedstawię ogólną zasadę podpisów cyfrowych.

Podpisy cyfrowe to ogólna kryptograficzna metoda potwierdzania autentyczności i źródła danych lub wiadomości. Aby potwierdzić tożsamość osoby podpisującej sprawdza się czy podpisana wiadomość jest kompletna i niezmodyfikowana. Jeśli podpisana wiadomość zostanie zmieniono nawet o jeden znak podpis zostanie unieważniony.

Różnorodne implementacje podpisów cyfrowych są kluczowym elementem wszystkich kryptowalut. Aby wysłać jakąkolwiek kryptowalutę ze swojego portfela musisz wygenerować transakcje, a następnie ją podpisać swoim kluczem prywatnym. Przed wykonaniem transakcji sieć sprawdza poprawność podpisu potwierdzając, że wiadomość nie została zmieniona lub sfałszowana przez osobę trzecią, która nie posiada prawidłowego klucza prywatnego.

W przejrzystych kryptowalutach (np. Bitcoin) każda podpisana transakcja jawnie deklaruje, które wyjścia są zużyte. Jest to przydatne do łatwego prowadzenia księgowości, ponieważ sieć prowadzi rejestr niewykorzystanych danych wyjściowych transakcji (UTXO), które są uważane za ważne dane wejściowe dla nowych transakcji. Jeśli ktoś spróbuje wydać dwa razy to samo wyjście Bitcoin, fałszywa druga transakcja jest natychmiast odrzucana, ponieważ sieć wie, że właściciel już wydał te Bitcoiny. Niestety, ten prosty dowód własności jest wysoce szkodliwy dla prywatności, ponieważ definitywnie wskazuje źródło środków.

Monero używa innego schematu, zwanego sygnaturami pierścieniowymi. Ta metoda podpisywania grupy umożliwia jednemu członkowi cyfrowe podpisanie wiadomości w imieniu grupy, mieszając klucze publiczne pozostałych członków, więc nie jest jasne, kto aktywnie podpisał wiadomość. Podpisy pierścieniowe są używane wMonero do łączenia kluczy z wielu wyjść w łańcuchu bloków, aby zaciemnić które wyjście jest faktycznie wydawane.

Załóżmy, że Matylda chce wydać trochę Monero. Jej portfel częściowo losowo wybierze kilka innych przeszłych wyjść w łańcuchu bloków (nie należących do Matyldy) i wymiesza klucze publiczne do sygnatury pierścienia jako wabik. Sieć jest w stanie sprawdzić, czy wyjścia są poprawne, jednak wabiki i prawdziwi wydawcy są kryptograficznie nie do odróżnienia. Podpisy pierścieniowe chronią nadawcę we wszystkich transakcjach, ponieważ odbiorca i sieć Monero nie mogą ustalić, który podpis jest prawdziwym źródłem funduszy. Jeśli złośliwy użytkownik spróbuje dwukrotnie wydać te same dane wyjściowe, to wygeneruje ten sam kluczowy obraz za każdym razem, a sieć natychmiastowo odrzuci fałszywą drugą transakcję.

Dzięki tej technologii sieć może uniemożliwić ponowne wykorzystanie danych wyjściowych, mimo że nie wiadomo, które wyjścia są wydawane.

Sieć Monero pierwotnie nie wymagała podpisów pierścieniowych, co niestety pozwoliło na niszczące prywatność transakcje. Te wczesne transakcje miały taką samą strukturę i słabości jako przezroczyste łańcuchy bloków, poprzez jednoznaczną identyfikację zarówno nadawcy, jak i odbiorcy, wraz z ujawnieniem, kiedy wyjście jest wydawane. Od 2016 roku sieć zaczęła wymagać dwóch pierścieni dla każdego podpisu, wymuszając domyślną prywatność dlanadawcy. Potem zostało to podniesione do minimalnego rozmiaru pięciu pierścieni pod koniec 2017 roku, a obecnie ilość ta wynosi 11. W niedalekiej przyszłości za sprawą nowej technologii „Triptych” ilość ta zostanie zwiększona jeszcze bardziej do 50, a nawet ponad 100 pierścieni.

Należy pamiętać, że od 2016 do 2018 zasady dotyczące rozmiaru pierścienia były sformułowane jako minimalna liczba pomieszań, a użytkownicy mogli tworzyć transakcje z większą ilością pierścieniami, jeśli chcieli. Teoretycznie jeden może pomyśleć, że użycie większej liczby wabików w transakcji gwarantuje więcej prywatności. Należy jednak wziąć pod uwagę praktyczną kwestię gdy zdecydowana większość transakcji wykorzystuje minimalną ilość pierścieni, to większe, niestandardowe ilości pierścieni wyróżniają się jako niezwykłe, co jest szkodliwe dla prywatności.

Problem ten został rozwiązany w aktualizacji sieci pod koniec 2018 zamiast minimalnej ilości pierścieni, zasady sieciowe wymagają teraz stałej ilości pierścieni. 

Dandelion++, czyli co zrobić aby nikt nie wyśledził mojego IP

Dandelion++ jest technologią agregacji transakcji, która uniemożliwia wykrycie przez osoby trzecie z jakiego IP wyszła dana transakcja. Jest to niezwykle ważna rzecz, gdyż nikt z nas nie chciałby być namierzony w sieci po numerze IP swojego komputera, czy też smartfona. W tym celu każda transakcja jest przekazywana do węzłów w sposób całkowicie zaszyfrowany. Węzły dzielą się między sobą zaszyfrowanym plikiem, jednocześnie tworząc inne nieprawdziwe, również zaszyfrowane wiadomości. Po pewnym czasie, gdy transakcja zostanie przekazana przez wystarczającą ilość węzłów aktywuje się deszyfracja wiadomości, a transakcja może zostać zapisana w blockchainie.

Dandelion jest dość starą i znaną wielu osobą technologią, która pierwotnie kilka lat temu miała zostać zaimplementowana w Bitcoinie. Niestety wśród społeczności nie było wystarczającego konsensusu, dlatego do jej wdrożenia nie doszło. Na jej zaimplementowanie zgodziła się za to jako pierwsza kryptowaluta Zcoin, a od niedawna również Beam (o tej kryptowalucie możecie poczytać tutaj) z niej korzysta. 

Do implementacji Dandeliona++ w Monero doszło w lipcu 2020 roku. Do tej daty, osoby, które chciały zachować pełną prywatność swojego numeru IP, były zmuszone do rozpropagowania swoich transakcji za pomocą sieci TOR. Dziś nie jest to już konieczne właśnie dzięki technologii Dandelion++.

Co czeka nas w nadchodzącej przyszłości?

Jeszcze w tym roku wyjdzie aktualizacja, która wprowadzi między innymi technologię CLSAG, która jeszcze bardziej zmniejszy rozmiar transakcji o ~ 25%, a także poprawi wydajność weryfikacji transakcji przez węzły o ~ 20%

Prowadzone są również prace nad nową technologią Triptych, która wprowadzi wyraźnie większą prywatność wśród nadawców transakcji zwiększając wielokrotnie ilość sygnatur pierścieniowych, jednocześnie nie zwiększając diametralnie wielkości transakcji. Prace nad Triptych idą pełną parą i wkrótce zobaczymy ich efekty.

Ponadto deweloperzy Monero szukają i sprawdzają inne rozwiązania znane z wielu innych kryptowalut, które można byłoby zaimplementować w Monero. Jedną z takich technologii jest Lelantus, który działa już w Zcoinie, oraz od niedawna w Beamie. Daje on możliwość „spalenia” coinów, a następie wygenerowanie nowych na totalnie innym adresie. Dzięki temu transakcji nie można w żaden sposób ze sobą powiązać, co diametralnie zwiększa prywatność.

autor: Bioniczny Kogut

bioniczny-kogut2