Autor:
witcher_senseWątek oryginalny:
Silent payments
WprowadzenieW tym wątku chciałbym omówić interesującą propozycję Rubena Somsena o nazwie "Silent payments". Jest to technika zwiększająca prywatność, która ma na celu uczynienie płatności między dwiema stronami na blockchainie mniej przejrzystymi dla zewnętrznego obserwatora. Opiera się ona na koncepcjach takich jak "ukryte adresy" i "kody płatności wielokrotnego użytku" i zasadniczo próbuje rozwiązać ten sam problem, ale w bardziej elegancki sposób.
Podstawowa ideaPodstawowa idea jest następująca:
Użytkownik A publikuje
identyfikator (zazwyczaj klucz publiczny), a
Użytkownik B łączy swój klucz prywatny z opublikowanym kluczem
Użytkownika A i tworzy unikalny adres, z którego tylko
Użytkownik A może wydawać pieniądze.
Użytkownik C może również wysyłać pieniądze do
Użytkownika A, łącząc swój klucz prywatny z adresem
A i uzyskując kolejny unikalny adres.
Użytkownik A będzie wiedział, że dwaj użytkownicy
B i
C wysłali mu pieniądze, ale
B i
C nie będą nic o sobie wiedzieć. Tak więc
Użytkownik A może otrzymywać płatności na całkowicie odrębne adresy z tylko jednym adresem publicznym.
Jak to działaZałóżmy, że Bob chce wysłać cichą płatność (Silent payment) do Alice.
1) Alice tworzy unikalny identyfikator (np. klucz publiczny) przy użyciu standardowej matematyki krzywej eliptycznej:
A = a*G, przy czym
A - to klucz publiczny Alicji (punkt na krzywej eliptycznej),
a - to klucz prywatny Alicji (losowa liczba, która powinna być utrzymywana w tajemnicy), a
G - reprezentuje punkt generatora (predefiniowany punkt na krzywej eliptycznej).
2) Alice upublicznia ten identyfikator
A, aby Bob (i inni użytkownicy, tacy jak Carol) wiedzieli, gdzie wysyłać płatności.
3) Bob wybiera jedno z kontrolowanych przez siebie wejść, które zawiera klucz publiczny
B = b*G, przy czym
B - to klucz publiczny Boba (punkt na krzywej eliptycznej),
b - to klucz prywatny Boba (losowa liczba całkowita, którą zna tylko Bob), a
G - reprezentuje punkt generatora.
4) Bob pobiera klucz publiczny Alice
A i tworzy nowy klucz publiczny przy użyciu następującego wzoru:
A' = hash(b*A)*G + A, przy czym
A' - to klucz publiczny, którym Bob dokonuje płatności.
5) Bob dokonuje płatności na rzecz Alice i generuje wynik, który jest powiązany z wcześniej utworzonym kluczem publicznym
A'.
6) Biorąc pod uwagę, że
b*A = b*a*G = a*b*G = a*B, Alicja może zrekonstruować ten sam klucz publiczny
A' za pomocą swojego klucza prywatnego
a przy użyciu następującego wzoru:
A' = (hash(a*B) + a)*G, przy czym
hash(a*B) + a - to nowy klucz prywatny Alicji, który pozwala jej wydawać pieniądze z wyjścia odpowiadającego kluczowi publicznemu
A'.
Problem polega jednak na tym, że Alice musi znać klucz publiczny Boba
B, aby rozpoznać swoją płatność. Dlatego też nieustannie przeszukuje blockchain, aby dowiedzieć się, który z kluczy publicznych można połączyć z jej kluczem prywatnym
a w celu odtworzenia istniejących adresów Bitcoin.
Zalety:1) Nie jest wymagana żadna interakcja między nadawcami i odbiorcami. Aby nadawca mógł dokonać płatności, musi jedynie skonstruować adres z tajnego klucza publicznego odbiorcy.
2) Silent payments wykorzystują przestrzeń blokową bardziej efektywnie, ponieważ nie są wymagane "transakcje ogłaszające", jak w przypadku BIP47. Dlatego jedna transakcja równa się jednej płatności, co jest idealne dla jednorazowych darowizn.
3) Ciche transakcje są nieodróżnialne od zwykłych transakcji (np. brak wyjść OP_RETURN w celu udostępnienia efemerycznego klucza publicznego, jak w przypadku "ukrytych adresów"), co oznacza, że użytkownicy mogą łatwo ukryć się w tłumie - anonimowość to cały blockchain.
4) Adresy wyprowadzone z początkowego cichego klucza publicznego są zawsze deterministyczne i unikalne, ponieważ każdy nadawca używa własnych unikalnych kluczy do manipulowania cichym kluczem publicznym odbiorcy.
5) Ciche płatności (Silent payments) oferują odbiorcy środków zachętę do utrzymywania własnego węzła Bitcoin w pełni działającego, co automatycznie prowadzi do bardziej zdecentralizowanej sieci.
6) Nikt, poza nadawcą transakcji i odbiorcą, nie będzie wiedział, że płatność faktycznie miała miejsce.
7) Silent payments znacząco poprawiają zamienność transakcji Bitcoin.
Wady:1) Największą wadą tej technologii są stosunkowo wysokie koszty walidacji. Ponieważ odbiorca płatności nie wie z góry, które adresy Bitcoin mogą zostać wydane za pomocą kontrolowanego przez niego klucza prywatnego, musi sprawdzić każdy wpis każdej transakcji oraz obliczyć i porównać klucze publiczne w tym procesie.
2) Potencjał nadawcy do ponownego wykorzystania adresów. Jeśli nadawca ma wiele zgłoszeń, które używają tego samego klucza publicznego, każde z tych zgłoszeń będzie skutkować tym samym obliczonym adresem. Ponowne użycie adresu jest uważane za złą praktykę w zakresie prywatności i należy go unikać za wszelką cenę. Można to złagodzić poprzez uwzględnienie dodatkowych informacji w procesie obliczeniowym, ale jest to dodatkowe obciążenie, szczególnie dla prostych klientów. Alternatywnie, nadawca może wyprowadzić wszystkie dane wejściowe w pojedynczej transakcji, ale to również ujawnia współwłasność, co jest szkodliwe dla prywatności.
Referencje:1]
https://gist.github.com/RubenSomsen/c43b79517e7cb701ebf77eec6dbb46b82]
https://github.com/genjix/bips/blob/master/bip-stealth.mediawiki3]
https://github.com/bitcoin/bips/blob/master/bip-0047.mediawiki4]
https://en.m.wikipedia.org/wiki/Elliptic-curve_Diffie%E2%80%93Hellman5]
https://bitcoinops.org/en/newsletters/2022/04/06/6]
https://bitcoinmagazine.com/technical/bitcoin-silent-payments-secret-keys7]
https://bitcoinmagazine.com/technical/improving-bitcoin-privacy-with-silent-payments8]
https://gist.github.com/w0xlt/72390ded95dd797594f80baba5d2e6ee