Przez: Johan

tło

TON (The Open Network) to zdecentralizowana platforma blockchain, pierwotnie zaprojektowana i opracowana przez zespół Telegram. Celem TON jest zapewnienie wysokowydajnej i skalowalnej platformy blockchain do obsługi zdecentralizowanych aplikacji na dużą skalę (DApps) i inteligentnych kontraktów.

TON jest tak wyjątkowy, jest łatwy w użyciu, jest głęboko zintegrowany z Telegramem, co ułatwia zwykłym ludziom korzystanie z tokenów; jest również skomplikowany, ma zupełnie inną architekturę niż inne blockchainy i wykorzystuje FunC spoza głównego nurtu Inteligentny język kontraktowy. Dzisiaj omówimy charakterystykę TON i zagadnień związanych z bezpieczeństwem zasobów użytkownika z perspektywy kont, tokenów i transakcji.

Cechy TONA

Generowanie konta

Adres konta TON jest generowany inaczej niż większość łańcuchów bloków. Jest to adres inteligentnego kontraktu. Najpierw uruchom klucz prywatny. TON używa głównie algorytmu Ed25519 do wygenerowania klucza publicznego. Proces generowania jest następujący:

Istnieją dwie formy kluczy publicznych. Jedną z nich jest oryginalny klucz publiczny obliczany na podstawie klucza prywatnego, który wygląda następująco:

E39ECDA0A7B0C60A7107EC43967829DBE8BC356A49B9DFC6186B3EAC74B5477D

Drugi to „upiększony” klucz publiczny, który zawiera pewne informacje i cyfry kontrolne klucza publicznego, w postaci: Pubjns2gp7DGCnEH7EOWeCnb6Lw1akm538YYaz6sdLVHfRB2

Byłoby zbyt naiwnie sądzić, że adres konta można uzyskać tak samo jak Ethereum, zdobywając klucz publiczny. Samo posiadanie klucza publicznego użytkownika nie wystarczy do obliczenia adresu konta użytkownika. Właśnie powiedzieliśmy, że adres konta użytkownika jest adresem inteligentnego kontraktu, ale nawet nie mamy konta. Jak możemy wdrożyć inteligentny kontrakt? Prawidłowa sekwencja polega na tym, aby najpierw obliczyć adres, otrzymać początkową liczbę tokenów, a następnie można wdrożyć kontrakt. Proces obliczania adresu rachunku przedstawia poniższy rysunek:

Adres użytkownika również występuje w wielu formach. Pierwszą z nich jest forma oryginalna, która wygląda następująco:

0:b4c1b2ede12aa76f4a44353944258bcc8f99e9c7c474711a152c78b43218e296

i przyjazną dla użytkownika formę, taką jak:

Jeśli uważnie przyjrzysz się tym adresom, zobaczysz, że różnią się one tylko pierwszym i ostatnim znakiem, a `account_id` w środku jest taki sam, jednak nadal nie możemy zobaczyć związku pomiędzy kluczem publicznym a adresem konta. Tak naprawdę tajemnica kryje się w „danych początkowych”, które na początku zawierają klucz publiczny użytkownika, za pomocą którego użytkownik kontroluje własność kontraktu portfela. „workchainId” jest łatwe do zrozumienia. TON nie jest pojedynczym łańcuchem. Każdy fragment jest częścią całej sieci i obsługuje określony zestaw kont i transakcji. Aby zlokalizować i zarządzać inteligentnymi kontraktami, należy jasno wskazać, w którym shardu się one znajdują. Jaka jest różnica między „odbijalnym” a „nieodbijalnym”? Jest to związane z mechanizmem działania inteligentnych kontraktów. Przyjrzyjmy się dalej poniżej.

umowa portfelowa

Poniżej znajduje się kod źródłowy umowy portfela użytkownika. Możesz zobaczyć, że odczytuje on 4 parametry (stored_seqno, store_subwallet, public_key, plugins) po otrzymaniu wiadomości użytkownika:

portfel-v4-code.fc

Zgadza się, wdrażając umowę portfela tego użytkownika, musisz przekazać pewne parametry początkowe, które obejmują 256-bitową informację o kluczu publicznym. Dzięki temu każdy użytkownik będzie miał niezależną umowę, jeśli użyje tego samego adresu umowy. Wszystkie transakcje inicjowane przez użytkowników wymagają podpisu `in_msg`, a następnie po zweryfikowaniu podpisu (check_signature) poprzez własną umowę portfela, umowa wywoła wszystkie operacje w łańcuchu. Z tego możemy również wywnioskować, że klucz publiczny użytkownika może w rzeczywistości odpowiadać niezliczonej liczbie adresów portfeli. Wystarczy wdrożyć portfele z różnymi kodami źródłowymi lub różnymi danymi inicjującymi, aby uzyskać zupełnie inne adresy kontraktowe.

Żeton Jetton

Token reprezentuje zasoby w łańcuchu, więc jest to podstawowy element, który musimy zrozumieć. Jetton to standardowa forma tokena TON Jetton składa się z dwóch kontraktów, Jetton-minter i Jetton-wallet:

Po wydaniu tokena zostanie utworzony kontrakt Jetton-minter. Inicjalizacja kontraktu rejestruje całkowitą liczbę tokenów, administratorów, kody portfela i inne informacje.

Kiedy tokeny zostaną rozesłane użytkownikom, umowa Minter wdroży dla użytkownika umowę portfela i zapisze saldo użytkownika, własność, adres umowy tokena Minter, kod portfela użytkownika i inne informacje po zainicjowaniu umowy. Każdy użytkownik wdroży kontrakt niezależnie. Należy pamiętać, że utworzona tutaj umowa jest umową portfela używaną do zarządzania konkretnym tokenem Jetton, która różni się od umowy portfela konta użytkownika. Adres właściciela rejestruje adres portfela konta użytkownika.

Gdy użytkownik Alice przesyła pieniądze użytkownikowi Bob, relacja między połączeniami wygląda następująco:

Alicja podpisuje aplikację poza łańcuchem i wydaje instrukcje obsługi, dzwoniąc do umowy dotyczącej swojego portfela. Instrukcje te powodują dalsze wywołanie jej portfela tokenów w celu wykonania przelewu. Kiedy portfel tokenów Boba odbierze token, powiadomi o umowie portfela Boba (tj. o adresie właściciela portfela Bob Jetton). Jeśli w trakcie transakcji pozostanie Gaz, zostanie on zwrócony na adres zwrotny, zazwyczaj zgodnie z umową konta Alicji.

To jest transfer tokena Jetton analizowany przez przeglądarkę Tonviewer:

Przelew ERC20 wymaga jedynie wywołania co najmniej jednego kontraktu, natomiast transfer tokena Jetton wymaga wywołania co najmniej czterech kontraktów. Ma to na celu umożliwienie jednoczesnej realizacji przelewów w łańcuchu i poprawę efektywności transakcji.

handel

Kiedy coś dzieje się z kontem w TON, uruchamia to transakcję. Najczęstszym zdarzeniem jest „otrzymanie wiadomości”. Transakcja obejmuje:

  • Wiadomość przychodząca, która początkowo uruchamia kontrakt (istnieje specjalna metoda wyzwalania)

  • Działania związane z umową spowodowane przychodzącymi wiadomościami, takie jak aktualizacja pamięci umowy (opcjonalnie)

  • Wiadomości wychodzące do innych uczestników (opcjonalnie)

Jest kilka cech, na które należy zwrócić uwagę podczas handlu:

1. Asynchroniczny: transakcje TON nie są zakończone w jednym wywołaniu. Może być konieczne przesłanie komunikatów do wielu różnych inteligentnych kontraktów w celu wykonania serii wywołań. Ze względu na różne routingi w łańcuchach fragmentów, TON nie może zagwarantować kolejności dostarczania wiadomości pomiędzy wieloma inteligentnymi kontraktami.

2. Opłaty manipulacyjne: Problemem jest także asynchroniczny charakter, tzn. pobierane opłaty manipulacyjne są trudne do oszacowania. Dlatego inicjując transakcję, portfel zwykle wysyła trochę więcej tokenów jako opłatę manipulacyjną. Jeśli wywoływana umowa ma dobry mechanizm opłat manipulacyjnych, pozostałe opłaty manipulacyjne zostaną ostatecznie zwrócone do portfela użytkownika. Użytkownicy mogą zauważyć, że tokenów portfela nagle po kilku minutach jest mniej, a potem więcej. To jest powód.

3. Odbicie: Odbicie to mechanizm obsługi błędów kontraktu, gdy kontrakt wywołujący nie istnieje lub zostanie zgłoszony błąd, a dla transakcji ustawiono opcję zwrotną, odesłany komunikat zostanie odesłany z powrotem do kontraktu wywołującego. Na przykład, jeśli użytkownik zainicjuje przelew, a w procesie nawiązywania połączenia wystąpi błąd, konieczna jest wiadomość zwrotna, aby umowa portfela użytkownika mogła przywrócić saldo. Prawie wszystkie wiadomości wewnętrzne przesyłane pomiędzy inteligentnymi kontraktami powinny umożliwiać odbijanie, czyli należy ustawić ich bit „odbicia”.

Bezpieczeństwo majątku

TON ma wiele funkcji, które mogą powodować problemy z bezpieczeństwem, dlatego użytkownicy muszą również zdawać sobie sprawę z kilku typowych pułapek.

Atak przechwytujący opłaty

Jak wspomniano powyżej, portfele często muszą wysyłać więcej opłat manipulacyjnych, aby zapobiec niepowodzeniu realizacji transakcji, co pozwala atakującym znaleźć okazję do wyrządzenia zła. Jeśli jesteś użytkownikiem portfela TON, być może spotkałeś się z taką sytuacją. Zawsze otrzymujesz w swoim portfelu różne NFT lub tokeny. Myślałeś, że to tylko jakieś zrzuty tokenów-śmieci, ale kiedy sprawdziłeś informacje o transakcji, okazało się, że tak nie jest sprzedać je. Mniej pieniędzy? Jednak inicjując transakcję, okazuje się, że wymagana opłata manipulacyjna jest bardzo wysoka (1 TONA). W tym momencie należy zwrócić uwagę. Może to być oszustwo związane z opłatą manipulacyjną.

Osoba atakująca wykorzystała starannie skonstruowaną umowę tokenową, aby szacowana opłata za przelew portfela była niezwykle wysoka, ale w trakcie faktycznej realizacji jedynie wstrzymała opłatę i nie wysłała wiadomości o przelewie.

Pierwszy i ostatni numer łowienia

Phishing typu „head and tail” nie jest charakterystyczny dla TON. Ten rodzaj ataku phishingowego występuje we wszystkich głównych sieciach publicznych. Osoba atakująca wygeneruje konto o dużej liczbie imitacji z tymi samymi pierwszymi i ostatnimi numerami dla każdego adresu użytkownika w całej sieci. Gdy użytkownik wyśle ​​przelew, osoba atakująca użyje również konta o dużej liczbie imitacji, aby wysłać niewielki przelew na konto użytkownika. pokwitowanie. Zostaw zapis w rejestrze płatności. Gdy użytkownik odbierający będzie chciał przesłać token z powrotem, może skopiować adres z zapisu historycznego. W tym momencie prawdopodobnie zostanie on skopiowany na adres atakującego, co spowoduje przeniesienie na niewłaściwy adres zachowanie użytkownika.

komentuj wędkarstwo

TON może dodać komentarz podczas przesyłania pieniędzy, aby zanotować informacje o transakcji. Ta funkcja jest często używana podczas doładowań na giełdach. Giełdy zwykle wymagają od użytkowników zanotowania identyfikatora użytkownika podczas doładowania. Jednak funkcja ta jest często wykorzystywana w złośliwy sposób, a osoby atakujące oszukują użytkowników, zapisując fałszywe informacje w notatkach. Jak pokazano na rysunku:

Użytkownicy muszą zwrócić szczególną uwagę na anonimowy numer telegramu NFT. Jeśli użytkownik użyje anonimowego numeru telegramu do otwarcia konta TG, ale nie otworzy weryfikacji dwuetapowej, po wyłudzeniu NFT hakerzy będą mogli bezpośrednio zalogować się na docelowe konto TG. i prowadzić późniejszą kradzież mienia i oszukańcze zachowanie.

Luka w inteligentnych kontraktach

Luki w zabezpieczeniach inteligentnych kontraktów spowodują szkody w środkach użytkowników umieszczonych w inteligentnych kontraktach. Przy wyborze projektów użytkownicy muszą wybierać dobrze sprawdzone projekty. Inteligentne kontrakty TON są programowane głównie przy użyciu języka FunC, ale wykorzystują także bardziej zaawansowany Tact lub niższy poziom Fift, które są bardzo oryginalnymi językami. Nowe języki programowania niosą ze sobą nowe zagrożenia bezpieczeństwa Szczególnie dla programistów muszą oni posiadać dobre nawyki bezpiecznego programowania, opanować najlepsze praktyki bezpieczeństwa i przejść rygorystyczne audyty bezpieczeństwa przed wdrożeniem w środowisku produkcyjnym nie rozmawiamy na razie o bezpieczeństwie kontraktu. Zespół ds. bezpieczeństwa SlowMist uruchomił usługę audytu bezpieczeństwa inteligentnych kontraktów TON, a znajomi mający potrzeby audytu mogą o tym porozmawiać.

Fałszywy atak odnawiający

Użytkownicy portfela lub giełdy muszą zwracać uwagę na ataki na fałszywe depozyty. Zwykle wyróżnia się dwa rodzaje ataków na fałszywe depozyty:

  • W przypadku fałszywych monet osoba atakująca wydaje token z tymi samymi metadanymi, co token docelowy. Jeśli program automatycznego wprowadzania danych nie sprawdzi, czy jest to prawidłowa umowa mennicza, doprowadzi to do nieprawidłowego wpisu.

  • Bounce, proces transferu TON wymaga relacji wywoławczej pomiędzy umowami portfela dwóch użytkowników. Jeśli umowa portfela odbiorcy nie istnieje, a transakcja jest ustawiona na opcję Bounceable, wiadomość zostanie odesłana, a oryginalne środki zostaną odjęte od transakcji. opłata manipulacyjna. Zwrot do nadawcy. Znajomi, którzy są zainteresowani szczegółami, mogą zapoznać się z artykułem dotyczącym fałszywych doładowań, który ujawniliśmy wcześniej.

Streszczać

Artykuł ten przedstawia podstawowe zasady techniczne TON z punktu widzenia tworzenia klucza publicznego i prywatnego TON, umowy portfela, formy Tokena, charakterystyki transakcji itp., a także omawia możliwe problemy bezpieczeństwa w procesie korzystania z TON, mam nadzieję, że może to pomóc wszyscy się uczą.

Linki referencyjne:

https://docs.ton.org/

https://github.com/ton-blockchain/wallet-contract