benq pisze:Mógłbyś się podzielić jakimiś ciekawymi materiałami, które skłoniły Cię do takich przemyśleń? Szczególnie na temat koordynatora.
Dzięki. Właśnie z tym jest kurczę problem. Zawsze sobie obiecuję, że będę zbierał linki lub treści znaczących tekstów, artykułów, paperów, itp, ale ostatecznie nigdy tego nie robiłem, a listę miałbym już pokaźną. To pewnie wynika z tego, że czytam, szukam w różnych lokacjach - na komórce w podróży, w domu, w biegu, czasem nawet coś w pracy jak znajdę czas. Trochę też wiedzy można wyciągnąć od osób siedzących na Discordzie IOTA, trzeba tylko trafić na czas gdy mniej osób tam rozmawia i moderatorzy nie są zajęci ciągłym odpowiadaniem na pytanie "zreinstalowałem portfel i balans wskazuje 0i, gdzie jest mój hajs". Niedawno nawet udało mi się pogadać technicznie z jednym z członków ekipy. Pytałem go o proces budowania tego side-tangle i potencjalne zagrożenia z tego wynikające. Zasadniczo ten temat jest nawet powiązany ze wspomnianym koordynatorem. Dodatkowo grzebałem trochę w kodzie źródłowym IRI (full node) i pisałem jakieśtam pomniejsze projekty, które przechowują dane w tangle z raczej marnym powodzeniem z powodu braku czasu. Powiększyło to jednak moje rozumienie IOTA więc jakiś cel został osiągnięty.
Koordynator nie wpływa w ogóle na transakcje, które już istnieją w tangle. Jedyne co robi, to dostawia swoje transakcje. To zasadniczo nic nie zmienia w stanie kont żadnego z posiadaczy kasy. Każde wstawienie transakcji do tangle potwierdza inne transakcje. To on właśnie robi. Tylko po co, skoro każdy wysyłający przelew robi to samo? Otóż koordynator pracuje na wybranym zestawie adresów, który uważamy za zaufany (podpisany).
Transakcje podpisują się wzajemnie i jeśli choć jedna z nich po drodze była fałszywa (np. transakcja przelania mi miliardów z konta kogoś innego), żadnej kolejnej nie da się już pod nią podpiąć (nikt jej nie potwierdzi). Można jednak wyobrazić sobie sytuację, gdzie ktoś używa sfabrykowanego przez siebie IRI i klientów do niego podpiętych i wszystko to jest jakimś cudem wpięte do sieci node-ów IOTA. W ten sposób będzie niby-potwierdzał swoją fałszywa transakcję setkami innych. W ten sposób przeleje sobie kasę, nie? Nie. Zmarnuje tylko prąd, bo nie-fałszywe node-y sieci oleją wszystkie te transakcje, jako iż od momentu fałszywej wszystkie kolejne są złe. Nie ważne jaką moc CPU będzie miał atakujący, jedyne co może w ten sposób uzyskać to zalanie innych node-ów fałszywymi danymi, które zostaną odrzucone (czyli atak DDoS). Niektóre node-y mogą przez to przestać odpowiadać, ale kasa pozostanie nienaruszona. Właściciel nieodpowiadającego node-a w końcu zajrzy w logi co się dzieje, zobaczy atak od strony fałszywego node-a i go zbanuje. To zakończy historię. Inwestycja w komputer kwantowy nieudana.
No dobra, to po co nam te zaufane transakcje od koordynatora. Wyobraźmy sobie na powrót sytuację fałszywego (złego) node-a. Jako niczego nie przeczuwający użytkownik wchodzę sobie na
https://iota.dance/ i wyobraźmy sobie, że znajduję ten node, o którym nikt nie wie, że jest zły. Łączę się do niego portfelem i robię sobie przelewy. Potwierdzam jego fałszywe transakcje swoimi prawidłowymi, tak? Nie, nie potwierdzisz ich, bo hash nie będzie się zgadzał nawet jeśli tylko jedna transakcja w przeszłości była fałszywa i nawet miałby ktoś ją potwierdzić tylko pośrednio (po setkach innych, które już ją niby-potwierdziły). Czyli nie będzie się dało zrobić przelewu, wybierzesz inny node. A jeśli wszystkie transakcje, które zachodziły w złym node są dobre, a zły node jest wystawiony po to, aby przechwycić moje hasło (seed)? Będę robił swoje przelewy, potwierdzał normalne transakcje, aż w końcu zły node zostanie wyłączony, a jego właściciel ukradnie mój hajs, bo wyjawiłem klucze do swojego portfela robiąc przelewy? Nie. Podpisując transakcję nie wyjawiasz seed-a w ogóle, nic a nic. W związku z tym fałszywy node co najwyżej może nie zrealizować twojej transakcji (olać ją). Jeśli przestrzegasz reguły jednorazowych adresów jesteś więc bezpieczny (na jeden adres IOTA może przyjść wiele przelewów przychodzących, ale tylko jeden wychodzący, który zakończy jego użytkowanie).
No to po co koordynator?! Dobra, podejdźmy do tematu z innej strony. W świecie kryptowalut hasło "przelew został zrealizowany" czy też "transakcja doszła do skutku" to totalny relatywizm. Jeden sklep uznaje transakcję jako potwierdzoną, jeśli ma już trzy potwierdzenia (kolejne bloki), inny jeśli osiem. Giełda może wymagać 15 potwierdzeń od Bitcoin Gold a i tak to nie pomoże, bo w przypadku niedawnego ataku 51% udało się sfałszować transakcje. Kiedy coś jest już wystarczająco potwierdzone? To kwestia uznania. IOTA chce to lekko standaryzować. Transakcja jest już na bank potwierdzona, jeśli bezpośrednio lub pośrednio potwierdził ją koordynator. Już nie ma co czekać dłużej. Nikt nie zna klucza do adresów koordynatora, więc nikt go nie sfałszuje. Czy to jest potrzebne? W ogóle. Prawie wszystkie inne kryptowaluty działają bez tego. To tylko jakiś wyznacznik, czy też próba dodania wiarygodności transakcji w oczach potencjalnych inwestorów, którzy nie są gotowi na myśl, że "to się samo reguluje" i z uśmiechem patrzą jak pan z IOTA osobiście podbił pieczątkę pod transferem. To daje poczucie, że IOTA jest bezpieczniejsza od Bitcoin Gold. Marketing. IOTA jest już bezpieczniejsza i bez tego.
Koordynator jest tylko po to? Nie. Są jeszcze trzy inne rzeczy. Tym razem już ważne:
- Wyobraź sobie, że piszesz jakiś swój system oparty o IOTA. Potrzebujesz informacji, że transakcja jest zaufana, potwierdzona. Przez nieuwagę/niewiedzę/oszustwo łączysz się do złego node-a. Node obiecuje Ci, że transakcja zaszła. Nie weryfikujesz z innymi node-ami i ufasz mu. Tymczasem on może kłamać... W tym wypadku pewnym wyznacznikiem będzie sprawdzić (i zweryfikować podpisy), czy potwierdził ją koordynator. To jednak mało możliwy przypadek. Jeśli to jest poważny system postawisz własny full node, a nie połączysz się do przypadkowego innego na pałę.
- Hipotetycznie istnieje możliwość przejęcia sieci IOTA. Aby to zrobić trzeba postawić tyle złych node-ów aby przeważyły całą sieć i przekonać wszystkich, że to są te właściwe. Trzeba też mieć więcej mocy obliczeniowej niż 33% całości, aby potwierdzać swoje fałszywe transakcje szybciej. Dodatkowo trzeba sprawić, że wszystkie złe node-y będą łączyć się z innymi node-ami w taki sposób, że będą je otaczać, bo to coś nie wypali:
To ekstremalnie mało prawdopodobna sytuacja. Swój node z innym node nie można połączyć od tak. Właściciele node z obu stron muszą świadomie dodać się jako sąsiadów. Jest kanał na Discordzie do wymiany sąsiadami dla tych, którzy zakładają sobie nowy node. "Byle jakie" osoby nie połączą się nigdy do znanych node-ów aby stworzyć niebezpieczną sytuację.
Gdyby jednak do tego doszło koordynator nadal wskazywałby na pewno potwierdzone transakcje i używał dobrego node prowadzonego przez IOTA team. Rezygnacja z koordynatora jest więc tym bezpieczniejszym pomysłem, im więcej dobrych node już znajduje się w sieci. Przydało by się więcej full node niż teraz.
- Tips selection. To jest procedura wyboru dwóch innych transakcji do potwierdzenia. Trzeba je wybrać we właściwy sposób, aby transakcje, które już długo czekają nie czekały w nieskończoność (nie były zagłodzone). Optymalny wybór potwierdzanych transakcji skraca czas czekania na przelew w całej sieci. IRI ma zdefiniowany swój właściwy algorytm, ale nie ma nigdzie w kodzie miejsca, które weryfikuje, czy też wymusza, czy algorytm ten jest stosowany przez klientów czy też przez sąsiednie node-y. Tak powstał słynny "side tangle", czyli ten "pałąk" odchodzący od zwykłego tangle z setkami transakcji 0i, które ktoś sam sobie potwierdza (bo wybiera swoje własne transakcje do potwierdzenia). Tutaj więc zły node/zły klient to już nie klient oszukujący, a spowalniający sieć. Tangle kształtujący się w inny kształt niż ładny splot nie jest optymalny czasowo pod względem zatwierdzania transakcji. I tutaj mamy chyba jedyne przydatne już teraz użycie koordynatora. Koordynator zawsze wybiera transakcje do zatwierdzenia najlepiej jak się da (a przynajmniej jak teoretycy IOTA myślą, że się da najlepiej), więc "kieruje" tangle w dobry kształt. IRI wybierając niezatwierdzone transakcje (tips) preferują transakcje, w których gdzieś w historii pojawił się zatwierdzający koordynator, więc tangle "uprawidławia się" i czasy zatwierdzeń są lepsze. W związku z tym spamerzy sieci (wysyłający masę transakcji) używający prawidłowego algorytmu wyboru "tips" pomagają sieci przyspieszyć. Spamerzy używającego złego algorytmu spowalniają ją, bo tworzą coraz więcej rozwidleń i transakcji czekających do potwierdzenia, zamiast minimalizować ich liczbę. Każdy "dobry node" preferuje jednak transakcje, gdzie w historii pojawiał się koordynator, więc spamowe złe gałązki z czasem usychają, bo najnowszych zmianach w IRI za długie "badyle", które nie mają w historii koordynatora są olewane przez node-y. To jest realny problem i pewnie dało by się go rozwiązać poprzez jakieś wymuszenia wyborów transakcji do potwierdzenia na poziomie IRI (node-ów). Póki co IOTA team jest w tej sprawie raczej zachowawcza. Prawdopodobnie chcą obserwować jak "kształt" tangle zachowuje się w rzeczywistym przypadku przez długi czas, co na niego wpływa, jakie sposoby mają "źli spamerzy" itp. zanim podejmą akcje. Być może lekkomyślnie wprowadzone ograniczenia mogłyby być tu szkodliwe i spowolnić sieć.
TL;DR Koordynator przede wszystkim przyspiesza sieć. Teoretycznie zwiększa też bezpieczeństwo, ale tylko w mało prawdopodobnych przypadkach, które nie zajdą. Póki co nie zapowiada się, aby go mieli wyłączać.