Jak technicznie działa ukrywania transakcji w Monero?

Orator
Awatar użytkownika
Posty: 828
Rejestracja: 13 kwietnia 2011
Reputacja: 21
Reputacja postu: 
0
Napiwki za post: 0 BTC

Jak technicznie działa ukrywania transakcji w Monero?

Postautor: Frodo » wtorek, 24 listopada 2020, 19:31

Szczegóły zaszyfrowanej transakcji zna tylko nadawca i odbiorca , ale w jakiś sposób jest sprawdzana ich poprawność, czy nie są dwukrotnie wydane. Jak to technicznie wygląda?
Znalazłem
https://steemit.com/monero/@luigi1111/u ... troduction
https://steemit.com/monero/@luigi1111/u ... -addresses

Wygadany
Awatar użytkownika
Posty: 510
Rejestracja: 8 lutego 2020
Reputacja: 914
Reputacja postu: 
6
Napiwki za post: 0 BTC
Lokalizacja: ghidra-sre.org

Jak technicznie działa ukrywania transakcji w Monero?

Postautor: garlonicon » wtorek, 14 grudnia 2021, 20:20

Podobnie, jak poprzednio, przeklejam dyskusję z PW. Swoją drogą później opisałem to w osobnym temacie: viewtopic.php?f=45&t=35941
garlonicon pisze: wtorek, 24 listopada 2020, 21:12 Znowu temat w wiadomym dziale, więc znów nie mogę tam pisać. No trudno, niech będzie na PW. Jak będziesz miał dość tych wpisów, to nie krępuj się i daj znać, nie chcę się narzucać.

Niemal wszystkie kryptowaluty opierają się na krzywych eliptycznych, a konkretniej na ECDSA. Sama krzywa umożliwia zamianę klucza prywatnego w klucz publiczny poprzez mnożenie liczby przez punkt, szczegóły możesz znaleźć w wielu różnych źródłach, wraz ze wzorami. Daje to tyle, że jesteś w stanie wybrać sobie jakąś dużą liczbę, jakieś niemal 256 bitów (niemal, bo to musi być liczba pierwsza, deczko mniejsza od maksimum, techniczne szczegóły tutaj wchodzą, na razie to pominę) i schować ją przed widokiem innych, a jednocześnie udowodnić, że rzeczywiście ją znasz. Czyli: masz klucz prywatny, ujawniasz klucz publiczny, składasz sygnatury, to wystarczy, aby udowodnić, że masz klucz prywatny bez konieczności pokazywania jego wartości.

I teraz tak: sam klucz prywatny to niemal 256 bitów. Domyślnie taki klucz publiczny powinien być losowy, wtedy jego odgadnięcie jest prawie niemożliwe i całość jest dość bezpieczna. Klucze publiczne mają o tyle ciekawe właściwości, że można ich używać do rozproszonych obliczeń. Czyli: jesteś w stanie ukryć jakąś 256-bitową liczbę i pomnożyć ją przez dwa (modulo duża liczba pierwsza) znając jedynie klucz publiczny! Tak samo działa dodawanie znanej liczby do nieznanej wartości, ukrytej pod cudzym kluczem publicznym. Czyli: jesteś w stanie wykonywać operacje typu a+b, znając jedynie b. Jesteś w stanie wykonać też analogicznie a-b oraz a*b, jeśli znasz klucz publiczny a*G, ale nie znasz a. To daje już całkiem sporo.

Idąc dalej: skoro znasz już krzywe eliptyczne i wiesz dokładnie, jakie tam operacje są możliwe na tej krzywej, to teraz wiesz też, że nie tylko losowe liczby mogą być kluczami prywatnymi. Jesteś w stanie na przykład wyobrazić sobie, co by było, gdyby kwota też była ukryta pod kluczem prywatnym. Tylko, że to nie byłoby bezpieczne. Sama goła kwota miałaby maksymalnie 64 bity niezerowe, więc dałoby się sprawdzić najpierw te popularne wartości, a później nawet brute forcem jechać po wszystkim po kolei i odkrywać, jakie kwoty są przesyłane. Jeśli jednak dodasz do tego klucz publiczny, którego jedynym celem będzie ukrycie tejże kwoty, to nagle się okazuje, że samymi kluczami publicznymi jesteś w stanie ukrywać liczby!

Ale jak to może być bezpieczne? - pewnie zapytasz. Otóż: wszystko musi się sumować do zera. W tego typu monetach tak jest, że jeśli już chowamy kwoty, to musi być jakiś sposób na to, aby móc stwierdzić, że nic nie jest kreowane z powietrza. Z tego powodu trzeba również się zabezpieczyć przed tym, żeby wszelkie kwoty były jedynie podane w określonym zakresie.

Dobra, to teraz skoro na przykładzie krzywych eliptycznych masz jakieś mgliste pojęcie, jaka matematyka może za tym stać, to możesz spokojnie zajrzeć do źródeł i popatrzeć na niektóre wzory: https://www.getmonero.org/resources/about/.

Jeśli rozumiesz ECDSA, zrozumiesz również to, że w kluczach prywatnych może siedzieć coś więcej. Jeśli wiesz, jak tworzone są sygnatury, to wiesz, że to są pary (r,s), znasz również wzory pozwalające na ich obliczenie. Jeśli tyle wiesz, to masz wystarczające podstawy, aby czytać dalej w źródłach. A dalej, to już wchodzą konkretne wzory, które mówią o tym, jak mając jakiś klucz publiczny udowodnić, że właśnie w środku jest konkretna kwota, należąca do konkretnej osoby i żeby to było widoczne jedynie przez odpowiednie osoby, a nie przez wszystkich. Dalej znajdziesz wzory, które pozwalają udowodnić, że ta kwota należy do konkretnego zakresu i że nie ma monet kreowanych z powietrza, że to ten, kto składa sygnaturę, rzeczywiście jest posiadaczem tej monety, bez ujawniania jego adresu, i tak dalej, i tak dalej.

W skrócie: jakieśtam podstawy podstaw masz opisane, link do dalszego ciągu masz podany, żeby pójść dalej, potrzebne byłoby nieco lepsze pytanie niż zwykłe "jak to działa", bo nie wiadomo, którego dokładnie kawałka tej całej układanki nie rozumiesz i w który fragment rzeczywiście chcesz się zagłębić i jak bardzo szczegółowego opisu potrzebujesz, a może to wyżej to aż nadto?
Dodano po 23 sekundach:
Frodo pisze: środa, 25 listopada 2020, 08:33 Witam,
Właśnie zacznę czytać About.
Ciekawe że jest użyta inna krzywa eliptyczna niż secp256k o bardziej skomplikowanej definicji.
Piszę w tym dziale, bo to dział dla zaawansowanych, nie wiem, w którym innym dziale są sprawy techniczne. Jest jeden dział techniczny, ale dotyczy tylko Bitcoina.

Wróć do „Dla zaawansowanych - nowi tylko czytają”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość