Poufne Transakcje w Kryptowalutach
Strona Główna
Artykuły
Poufne Transakcje w Kryptowalutach

Poufne Transakcje w Kryptowalutach

Zaawansowany
Opublikowane Feb 10, 2020Zaktualizowane Dec 28, 2022
6m

Spis treści


Wprowadzenie

Często uważa się, że kluczowym dla funkcjonowania blockchainów jest transparentność całego systemu. Oznacza to, że każdy węzeł w sieci jest w stanie przechowywać kopię danych transakcyjnych i na bieżąco weryfikować, czy nie zostały złamane reguły konsensusu. W wielu księgach rozproszonych każdy może stworzyć eksplorator bloków, umożliwiający mu przeszukiwanie bloków, transakcji oraz adresów.

Jeśli zależy nam na maksymalnej prywatności, nie jest to idealne rozwiązanie. W systemie takim jak Bitcoin każdą jedną transakcję można powiązać z poprzednią. Coiny nie są technicznie "czyste" (fungible), co oznacza, że każdy z nich może być powiązany z określonymi transakcjami. Nikt nie może ci przeszkodzić w wysyłaniu bitcoinów, lecz jest w stanie odmówić przyjęcia transakcji, jeśli monety te wcześniej przeszły przez adres z czarnej listy.

W najgorszym wypadku brak zamienności mógłby poważnie wpłynąć na fundamenty systemu. Cena giełdowa czystych monet może posiadać premium w stosunku do zwykłych starszych bitcoinów, z długą historią transakcji.

Prywatność w Bitcoinie jest często zawyżana. Można nie tylko prześledzić monety, ale także adresy ich użytkowników. Cieszą się oni pseudoanonimowością (widoczne są adresy publiczne zamiast nazw), ale taka sytuacja nie jest pozbawiona wad. Zaawansowane techniki analizy danych mogą, z rosnącą dokładnością, grupować adresy, próbując zdeanonimizować uczestników sieci kryptowalut.

Jednym z proponowanych ulepszeń mającym na celu zwiększyć prywatność transakcji jest system Poufnych Transakcji.


Czym są Poufne Transakcje?

Poufne Transakcje (z ang. CT) został po raz pierwszy zaproponowane przez prezesa firmy Blockstream - Adama Backa w 2013r. Ich koncepcja została później rozszerzona, dzięki pracy jednego z deweloperów Bitcoina, Gregorego Maxwella. Maxwell wyszczególnił problemy przedstawione w pierwszej sekcji (słaba zamienność i niska pseudoanonimowość) – proponując rozwiązanie. Dokładne informacje o przenoszonych kwotach można było ukryć przed szerszą siecią, tak aby jedynie strony transakcji wiedziały, ile bitcoinów zostało wysłanych.

W normalnych warunkach (z publicznie widocznymi transakcjami), węzeł z łatwością może sprawdzić czy otrzymana kwota nie przekracza wysłanej. Jeśli Alice pragnie wysłać 0.3 BTC do Boba, pobiera niewykorzystane dane wyjściowe (załóżmy, że jest to 1 BTC), po czym dzieli je na dwie równe części: 0.3 BTC do wysłania Bobowi i 0.69 z powrotem do siebie (reszta przeznaczona została na opłatę dla kopalni).

Są to proste obliczenia dla innych węzłów: 1 przekracza 0,3 + 0,69, wszystkie podpisy są poprawne, a dane wejściowe Alice nie zostały jeszcze wydane gdzie indziej. Oznacz to, że transakcja musi być ważna. Kiedy kwoty są prywatne, sprawy nie mają się już tak banalnie. Jak w ogóle węzeł ma zacząć oceniać, czy nieznana kwota jest równa lub przekracza sumę dwóch innych nieznanych kwot?


Zastosowana kryptografia

W celu ukrycia danych, wymagana jest pewna forma szyfrowania. Tradycyjne metody są podobne do umieszczania dokumentów w sejfie: po zamknięciu w środku stają się bezużyteczne, dopóki nie zostaną usunięte. Do działania Transakcji Poufnych potrzebujemy cyfrowego sejfu, bez ujawniania jego zawartości, przy jednoczesnej prostocie weryfikacji jego własności przez osoby z zewnątrz.

Odpowiedź leży w szyfrowaniu homomorficznym, w schemacie zwanym zobowiązaniem Pedersena. Ten typ szyfrowania pozwala osobie z zewnątrz na wykonywanie operacji na zaszyfrowanych danych, bez podglądania ich treści. 

Za pomocą zwykłej funkcji hashującej możesz zatwierdzać dane, które chcesz później ujawnić. Załóżmy, że ogłaszasz konkurs w mediach społecznościowych, w którym ten kto odgadnie twoją ulubioną giełdę, wygra nagrodę w wysokości 0,01 BTC. Uczestnicy mogą być sceptyczni co do Twoich intencji, gdyż po zakończeniu konkursu wystarczyłoby spojrzeć na udzielone odpowiedzi i wybrać giełdę, o której nie wspomniano.

Co możesz zrobić, aby wykazać Twoją uczciwość, to zapewnić swoim obserwatorom hash: ciąg pozornie losowych liczb i znaków, który mapuje określone dane wejściowe. Przekazujesz swoje informacje przez funkcję, aby uzyskać określony wynik. Zilustrujemy to za przykładzie algorytmu SHA256:


f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191


Patrząc na to, nie masz pojęcia, jakie były dane wejściowe. Nie ma również możliwości odwrócenia funkcji. Jeśli jednak wiesz, że dane wejściowe to “Binance”, możesz łatwo sprawdzić, czy ich skrót odpowiada powyższemu. W ten sposób Twoi obserwatorzy mają pewność, że nie zmienisz odpowiedzi pod koniec konkursu – zrobienie tego ujawniłoby Twoje oszustwo.

Jednak w rzeczywistości nie jest to zbyt bezpieczne. Chociaż Twoi obserwatorzy nie mogą poddać inżynierii wstecznej algorytmu, są w stanie zbudować listę możliwych hashów, sprawdzając każdy z nich, dopóki nie dopasują właściwego. Możemy zmniejszyć prawdopodobieństwo tego, dodając do danych, które będziemy mieszać, pewne losowe zmienne zwane ślepym czynnikiem. 

Jeśli wprowadzimy “Binance jest moją ulubioną giełdą, którą doceniam bardziej niż jakąkolwiek inną 2#43Wr ”, hash staje się o wiele trudniejszy do odgadnięcia (a dla 0,01 BTC z pewnością mało prawdopodobne jest, aby ktokolwiek nawet chciał tego spróbować).

Zobowiązanie Pedersen'a pozwala nam dodać dane wejściowe za zobowiązaniami. Jak ilustruje to Maxwell:


C(BF1 + D1) + C(BF2 + D2) = C(BF1 + BF2, D1 + D2)

Gdzie BF jest czynnikiem śledzącym, a D danymi


Istnieje jeszcze kilka kroków, angażujących kryptografię krzywych eliptycznych i dowody zasięgu, ale podstawową ideą jest to, że użytkownik ma zobowiązanie Pedersena do swojego adresu. Podczas wysyłania środków tworzone są dwa dodatkowe zobowiązania (jedno na adres zmiany, który ma zostać zwrócony użytkownikowi, a drugie na adres docelowy). 

Nikt nie wie, ile kryptowaluty jest wysyłane, ale może zweryfikować, czy zobowiązania dotyczące zmiany i miejsca docelowego (lewa strona równania Maxwella) sumują się do adresu początkowego (prawa strona równania). Jeśli to oceni poprawnie, transakcja użytkownika jest ważna, ponieważ można udowodnić, że dane wejściowe są równe wynikom.


Co możemy osiągnąć dzięki technologii Poufnych Transakcji?

Jeśli Poufne Transakcje miałyby zostać zaimplementowane w Bitcoinie, cieszylibyśmy się znacznie bardziej prywatnym systemem przesyłania wartości. Zarówno dane wejściowe, jak i wyjściowe byłyby maskowane, i ukrywane przed widokiem szerszej sieci, a wpisy w blockchainie byłyby zaciemnione. Dodatkowo węzły mogłyby nadal weryfikować ich autentyczność. Dzięki temu ogromnemu zwiększeniu prywatności bitcoiny mogłyby być skutecznie wymienialne, ponieważ analiza łańcucha nie ujawniałaby już historii danej jednostki. 

Jeśli chodzi o to, czy Transakcje Poufne zostaną włączone do protokołu, w chwili obecnej nie wydaje się to prawdopodobne. Dzięki tej dodatkowej funkcjonalności transakcje stałyby się znacznie większe niż standardowe - biorąc pod uwagę ograniczoną przestrzeń blokową, zwiększyłoby to tylko popyt na miejsce w blokach. Wymagałoby to również wyrażenia zgody na zmianę kodu przez społeczność i górników, co historycznie okazywało się niezwykle trudnym zadaniem.


Wnioski

Transakcje Poufne miały pewne iteracje w innych kryptowalutach i łańcuchach bocznych Bitcoina. Na przykład Monero używa ich w połączeniu z konstrukcjami zwanymi sygnaturami pierścieniowymi, aby uzyskać anonimowość i zamienność. Sidechain Liquid implementuje je dla większej prywatności, a MimbleWimble podąża podobną drogą.

Ze względu na korzyści, jakie przynoszą, Transakcje Poufne wiążą się z kompromisem o większym zasięgu. Kryptowaluty często borykają się ze skalowalnością i przepustowością w warstwie podstawowej, a większe rozmiary transakcji nie są atrakcyjne dla wszystkich. Powiedziawszy to, zwolennicy prywatności uważają, że ukrywanie kwot transakcji i uczestników ma kluczowe znaczenie, aby naprawdę pozwolić krypto przyjąć rolę cyfrowej gotówki.