Pedersen Commitments, czyli jak transakcje są ze sobą łączone
- Wygadany
- Posty: 593
- Rejestracja: 8 lutego 2020
- Reputacja: 1114
- Lokalizacja: 7-bit secp256k1
Reputacja postu: 
0
Napiwki za post:
0 BTC
Pedersen Commitments, czyli jak transakcje są ze sobą łączone
Postautor: garlonicon » piątek, 6 sierpnia 2021, 12:21
Na stronie Monero https://www.getmonero.org/resources/mon ... ingCT.html możemy przeczytać coś takiego: "rct=xG+aH(G)". Oprócz krótkiego filmu mamy także link do https://eprint.iacr.org/2015/1098.pdf, gdzie jest techniczny opis. Idąc po kolei: "rct" jest tym, co obliczamy, to jest właśnie tytułowe "Pedersen Commitment", właśnie to możemy łączyć i właśnie taka wartość jest używana przy składaniu podpisów pod transakcjami. Dzięki temu gdy mamy "rct_1" jednej transakcji oraz "rct_2" drugiej, to wykonujemy sumę tworząc "rct_n=rct_1+rct_2". Tak można składać transakcje bez naruszania sygnatur.
Idźmy dalej: "x" jest kwotą, którą chcemy przesłać. Jak wiadomo, klucze publiczne można sumować bez znajomości kluczy prywatnych. Dlatego każdy górnik po wykonaniu "rct_1+rct_2" uzyskuje "x_1*G+a_1*H(G)+x_2*G+a_2*H(G)". Po uproszczeniu tego wyrażenia widać, że wynikiem jest "rct_n=(x_1+x_2)*G+(a_1+a_2)*H(G)". Łatwo zauważyć, że taki podpis "rct_n" może z powodzeniem zastąpić podpisy pod "rct_1" oraz "rct_2", gdzie przesyłana kwota będzie wynosiła "x_1+x_2", czyli będzie zwykłą sumą wartości z obu transakcji.
Patrząc po kolei mamy literę "G", oznacza to po prostu punkt bazowy krzywej eliptycznej, analogicznie do punktu bazowego w secp256k1 w Bitcoinie, różnica jest taka, że w Monero obowiązuje ed25519, więc ten punkt jest inny, ale matematyka stojąca za krzywymi eliptycznymi wygląda identycznie.
Kolejnym symbolem jest "a", czyli wartość, która umożliwia zasłonięcie przesyłanej kwoty. Gdybyśmy mieli samo "rct=xG", to wtedy moglibyśmy założyć, że na przykład ilość przesyłanych monet jest wartością 64-bitową i spróbować ją odgadnąć. Co więcej, moglibyśmy zrobić tablicę tęczową, która natychmiast by nam zamieniła taki klucz publiczny na kwotę kryjącą się pod nim. Zakładając, że ludzie przesyłają równe kwoty lub że taka kwota jest równa w dolarach, euro, złotówkach, bądź innej lokalnej walucie, bylibyśmy w stanie odgadywać przesyłane kwoty. Dlatego tak ważna jest unikalność "a", podobnie jak ważna jest unikalność "k" w przypadku sygnatur w Bitcoinie, znajomość tej wartości umożliwia tutaj ustalenie przesyłanej kwoty, co więcej, o ile znajomość "aH(G)" pozwala jedynie na podgląd (to jest część tak zwanego "view key"), o tyle znajomość samego "a" pozwala na zmianę przesyłanej kwoty!
Dalsza część, czyli "H(G)" oznacza hash punktu bazowego zamieniony na klucz publiczny. O co chodzi: mamy punkt bazowy i jesteśmy w stanie obliczyć jego hash. Następnie taką wartość zamieniamy na klucz publiczny, do którego klucz prywatny jest nieznany. Istnieje możliwość tworzenia takich kluczy publicznych, do których nikt nie zna pasującego klucza prywatnego, na przykład w Bitcoinie może to być 020000000000000000000000000000000000000000000000000000000000000001. Zamiast ciągu zer i jedynki na końcu, po prostu wstawiamy tutaj ten hash, dzięki czemu nikt nie jest w stanie obliczyć takiego "h", gdzie "h*G" byłoby równe "H(G)". Dlaczego to jest takie ważne? Otóż dlatego, że gdybyśmy mieli "rct=xG+aG", czyli gdybyśmy używali punktu bazowego bezpośrednio, to wtedy dałoby się zmieniać przesyłaną kwotę bez naruszania sygnatury i mógłby to zrobić każdy obserwator mempoola, wystarczyłoby dodać lub odjąć taki punkt, o ile chcielibyśmy tą kwotę zmienić. Na szczęście jednak nikt nie zna klucza prywatnego do "H(G)" i zakładając, że użyta funkcja skrótu jest bezpieczna, to powinno wystarczyć do przekonania innych co do bezpieczeństwa systemu.
Oprócz tego warto wiedzieć, że wyżej opisany schemat obowiązuje nie tylko w Monero, ale także w monetach opartych na protokole MimbleWimble, takich jak Grin. Poza tym, w najbliższym czasie LTC planuje wprowadzenie takich udoskonaleń.
Idźmy dalej: "x" jest kwotą, którą chcemy przesłać. Jak wiadomo, klucze publiczne można sumować bez znajomości kluczy prywatnych. Dlatego każdy górnik po wykonaniu "rct_1+rct_2" uzyskuje "x_1*G+a_1*H(G)+x_2*G+a_2*H(G)". Po uproszczeniu tego wyrażenia widać, że wynikiem jest "rct_n=(x_1+x_2)*G+(a_1+a_2)*H(G)". Łatwo zauważyć, że taki podpis "rct_n" może z powodzeniem zastąpić podpisy pod "rct_1" oraz "rct_2", gdzie przesyłana kwota będzie wynosiła "x_1+x_2", czyli będzie zwykłą sumą wartości z obu transakcji.
Patrząc po kolei mamy literę "G", oznacza to po prostu punkt bazowy krzywej eliptycznej, analogicznie do punktu bazowego w secp256k1 w Bitcoinie, różnica jest taka, że w Monero obowiązuje ed25519, więc ten punkt jest inny, ale matematyka stojąca za krzywymi eliptycznymi wygląda identycznie.
Kolejnym symbolem jest "a", czyli wartość, która umożliwia zasłonięcie przesyłanej kwoty. Gdybyśmy mieli samo "rct=xG", to wtedy moglibyśmy założyć, że na przykład ilość przesyłanych monet jest wartością 64-bitową i spróbować ją odgadnąć. Co więcej, moglibyśmy zrobić tablicę tęczową, która natychmiast by nam zamieniła taki klucz publiczny na kwotę kryjącą się pod nim. Zakładając, że ludzie przesyłają równe kwoty lub że taka kwota jest równa w dolarach, euro, złotówkach, bądź innej lokalnej walucie, bylibyśmy w stanie odgadywać przesyłane kwoty. Dlatego tak ważna jest unikalność "a", podobnie jak ważna jest unikalność "k" w przypadku sygnatur w Bitcoinie, znajomość tej wartości umożliwia tutaj ustalenie przesyłanej kwoty, co więcej, o ile znajomość "aH(G)" pozwala jedynie na podgląd (to jest część tak zwanego "view key"), o tyle znajomość samego "a" pozwala na zmianę przesyłanej kwoty!
Dalsza część, czyli "H(G)" oznacza hash punktu bazowego zamieniony na klucz publiczny. O co chodzi: mamy punkt bazowy i jesteśmy w stanie obliczyć jego hash. Następnie taką wartość zamieniamy na klucz publiczny, do którego klucz prywatny jest nieznany. Istnieje możliwość tworzenia takich kluczy publicznych, do których nikt nie zna pasującego klucza prywatnego, na przykład w Bitcoinie może to być 020000000000000000000000000000000000000000000000000000000000000001. Zamiast ciągu zer i jedynki na końcu, po prostu wstawiamy tutaj ten hash, dzięki czemu nikt nie jest w stanie obliczyć takiego "h", gdzie "h*G" byłoby równe "H(G)". Dlaczego to jest takie ważne? Otóż dlatego, że gdybyśmy mieli "rct=xG+aG", czyli gdybyśmy używali punktu bazowego bezpośrednio, to wtedy dałoby się zmieniać przesyłaną kwotę bez naruszania sygnatury i mógłby to zrobić każdy obserwator mempoola, wystarczyłoby dodać lub odjąć taki punkt, o ile chcielibyśmy tą kwotę zmienić. Na szczęście jednak nikt nie zna klucza prywatnego do "H(G)" i zakładając, że użyta funkcja skrótu jest bezpieczna, to powinno wystarczyć do przekonania innych co do bezpieczeństwa systemu.
Oprócz tego warto wiedzieć, że wyżej opisany schemat obowiązuje nie tylko w Monero, ale także w monetach opartych na protokole MimbleWimble, takich jak Grin. Poza tym, w najbliższym czasie LTC planuje wprowadzenie takich udoskonaleń.
garlonicon
Posty: 1
• Strona 1 z 1
Przejdź do
- Bitcoin
- Bezpieczeństwo
- Giełdy i serwisy - zagrożenia
- Anonimowość i bezpieczeństwo w sieci
- Piramidy i scamy
- Bitcoin
- Rozwój projektu
- Twój wkład w rozwój projektu
- Przedszkole
- Pomoc techniczna
- Generowanie monet
- Pomoc
- Ogólnie o miningu
- Mining pools
- Kopacze (miners)
- Sprzęt (hardware) do miningu
- Bitcoin w mediach
- Projekty związane z Bitcoin
- Imprezy, spotkania, konferencje
- Kwestie prawne
- Ciekawostki
- Organizacje charytatywne, zbiórki, dotacje
- Programowanie i wdrożenia
- Ankiety
- Portfele bitcoin
- Dla zaawansowanych - nowi tylko czytają
- Ekonomia
- Rozważania ekonomiczne
- Ankiety ekonomiczne
- Analiza techniczna
- Tutaj zapłacisz bitcoinami
- Polska
- Świat
- Tablica ogłoszeń
- Towary
- Sprzedam
- Kupię
- Zamienię
- Udziały
- Usługi
- Wymiana walut
- Komentarze
- Nagrody
- Wymiana Face-to-Face
- Dolnośląskie
- Kujawsko-pomorskie
- Lubelskie
- Lubuskie
- Łódzkie
- Małopolskie
- Mazowieckie
- Opolskie
- Podkarpackie
- Podlaskie
- Pomorskie
- Śląskie
- Świętokrzyskie
- Warmińsko-mazurskie
- Wielkopolskie
- Zachodniopomorskie
- Cała Polska
- Szukam/dam pracę
- Boty i strategie
- Giełdy, kantory, bitomaty
- Kantory
- Bitomaty
- Inwestycje
- Metale szlachetne
- ICO
- Forki i Alternatywne kryptowaluty
- LiteCoin
- Ekonomia
- Mining
- Ustawienia i konfiguracje
- Linki
- Dogecoin
- Ekonomia
- Mining
- NameCoin
- Ekonomia
- Mining
- Pozostałe
- Scrypt
- SHA256
- Dash
- Ethereum
- ETC
- Lisk
- Bitcoin Cash
- Kopanie kryptowalut
- Kopanie GPU
- Kopanie CPU
- Kopanie ASIC/FPGA
- Kopalnie kryptowalut
- IOTA
- NEO
- Chia
- SCAMY
- Inne
- Linki
- Faucety, kraniki, gry
- Księga skarg i zażaleń
- AMA
- Strona i forum
- Administrator mówi
- Opinie, propozycje, uwagi
- Propozycje banów
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 19 gości
- Strefa czasowa UTC+02:00
- Na górę
- Zmień szerokość ekranu
- Usuń ciasteczka witryny
O Polskim Forum Bitcoin
Polskie Forum Bitcoin skupia miłośników Bitcoina w Polsce. Tu możesz zadać pytania odnośnie Bitoina lub podyskutować na ciekawe tematy.
Polecamy
Treści na tym forum mają charakter wyłącznie informacyjno-edukacyjny, a posty są wyrazem osobistych poglądów ich autorów. Treśći na forum ani w całości ani w części nie stanowią "rekomendacji" w rozumieniu przepisów Rozporządzenia Ministra Finansów z dnia 19 października 2005 r. w sprawie informacji stanowiących rekomendacje dotyczące instrumentów finansowych, lub ich emitentów (Dz.U. z 2005 r. Nr 206, poz. 1715).
Powered by phpBB ® | phpBB3 theme by KomiDesign