Przejdź do treści

Płatności kryptowalutowe non-custodial: jak działają portfele HD i pochodzenie xPub

Payora10 min czytaniaEN · RU · UK · ES · DE · FR · IT · PL · PT · HI · ZH

Największym ryzykiem bezpieczeństwa w każdym systemie płatności kryptowalutowych jest ujawnienie klucza prywatnego. Jeśli serwer monitorujący przychodzące płatności może również wydawać te środki, to jedno naruszenie oznacza całkowitą stratę. Architektura non-custodial całkowicie eliminuje to ryzyko — a mechanizm, który za tym stoi, czyli pochodzenie kluczy portfela HD, jest na tyle elegancki, że warto go zrozumieć.

Problem z gorącymi portfelami na serwerach

"Gorący portfel" to portfel, którego klucz prywatny znajduje się na maszynie podłączonej do internetu. Większość naiwna implementacja płatności kryptowalutowych działa w ten sposób: generuje portfel, umieszcza klucz prywatny w pliku konfiguracyjnym lub bazie danych i używa go do tworzenia adresów depozytowych oraz podpisywania transakcji wypłat.

Problem jest oczywisty w retrospektywie: każdy atakujący, który skompromituje serwer — poprzez niezałatane luki, atak łańcucha dostaw, wyciek danych uwierzytelniających lub źle skonfigurowany zaporę — zdobywa klucz prywatny i może opróżnić każdy portfel z nim powiązany. Historia włamań do giełd kryptowalutowych to w dużej mierze historia kompromitacji gorących portfeli.

Rozwiązaniem jest oddzielenie możliwości obserwacji płatności od możliwości wydawania środków.

Portfele HD i Rozszerzony Klucz Publiczny

BIP-32 (Hierarchiczne Portfele Deterministyczne) definiuje sposób pochodzenia nieskończonego drzewa par kluczy z jednego głównego ziarna. Kluczową cechą jest pochodzenie klucza publicznego: mając rozszerzony klucz publiczny (xPub) węzła rodzica, możesz wyprowadzić wszystkie klucze publiczne dzieci — a tym samym wszystkie adresy Bitcoin dzieci — nie widząc nigdy klucza prywatnego.

Jest to matematycznie możliwe dzięki arytmetyce krzywych eliptycznych: klucze publiczne są punktami na krzywej, a możesz dodać deterministyczny modyfikator, aby wyprowadzić klucze publiczne dzieci tylko z klucza publicznego rodzica.

W praktyce oznacza to:

  1. Generujesz główne ziarno offline — na komputerze odizolowanym od sieci, portfelu sprzętowym lub urządzeniu do podpisywania.
  2. Eksportujesz xPub (tylko klucz publiczny, bez materiału prywatnego) i przekazujesz go swojemu serwerowi płatności.
  3. Serwer wyprowadza adres #1 dla faktury #1, adres #2 dla faktury #2 i tak dalej — wszystkie unikalne, wszystkie twoje — nie znając nigdy klucza prywatnego.

Jak działa pochodzenie adresów w praktyce

Dla BIP-32 xPub na ścieżce pochodzenia m/44'/0'/0' (standardowy Bitcoin BIP-44), serwer wyprowadza adresy na m/44'/0'/0'/0/N, gdzie N to indeks faktury. Każde N produkuje unikalny adres. Adresy są deterministyczne — ten sam xPub + to samo N zawsze produkuje ten sam adres — więc możesz ponownie wyprowadzić dowolny adres w celu weryfikacji.

Dla łańcuchów UTXO (Bitcoin, Litecoin, Dogecoin, Bitcoin Cash) jest to standardowe podejście. Inne łańcuchy używają różnych, ale równoważnych mechanizmów:

  • TON i Tron: każda faktura otrzymuje świeżo wygenerowaną parę kluczy; tylko klucz publiczny (a tym samym adres) jest przechowywany na serwerze. Klucz prywatny jest albo odrzucany (do użytku tylko do obserwacji), albo przechowywany w offline'owej puli.
  • Solana: offline'owa pula wcześniej wygenerowanych kluczy publicznych (pochodzących z offline'owego ziarna) jest zużywana po jednym na fakturę.
  • Łańcuchy EVM (ETH, BSC, Polygon itd.): pochodzenie xPub za pomocą BIP-44, tak jak w Bitcoinie.
  • XRP i XLM: model wspólnego adresu z unikalnymi tagami docelowymi lub notatkami dla każdej faktury.

Pełny proces płatności non-custodial

  1. Faktura utworzona: twoja strona wywołuje API bramki. Bramki wyprowadza świeży adres depozytowy (lub przypisuje unikalny tag) używając tylko materiału publicznego.
  2. Klient płaci: środki są wysyłane na ten adres. Bramki wykrywa transakcję za pomocą API eksploratora blockchain.
  3. Potwierdzenie: po wymaganej liczbie potwierdzeń, bramka aktualizuje status faktury i wysyła podpisany webhook do twojego serwera.
  4. Środki przychodzą: do twoich własnych portfeli. Bramki nigdy ich nie przechowywały, nie mogą ich przenieść i nie mają klucza prywatnego, aby to zrobić.
  5. Wypłata: gdy chcesz przelać środki lub przetworzyć wypłatę, podpisujesz transakcję offline — na maszynie odizolowanej od sieci, portfelu sprzętowym lub dowolnym urządzeniu do podpisywania — i transmitujesz podpisaną transakcję. Serwer rejestruje hash transakcji, ale nie może zainicjować wydania.

Co to oznacza dla bezpieczeństwa

Całkowita kompromitacja serwera płatności w tym modelu jest, w najgorszym przypadku, naruszeniem danych — atakujący może zobaczyć historię zamówień i faktury w toku, ale nie może przenieść ani jednego satoshi. Środki znajdują się w portfelach kontrolowanych przez klucze, które nigdy nie dotknęły serwera.

Dlatego bramki non-custodial wymagają, abyś wyeksportował xPub (lub użył narzędzia do generowania kluczy offline) przed przetwarzaniem płatności. Nieco wyższy koszt konfiguracji zapewnia ci fundamentalnie inny profil ryzyka: kompromitacja serwera ≠ utrata środków.

Dla każdego operatora obsługującego znaczną ilość, ta architektura nie jest opcjonalna — to minimalna możliwa postawa bezpieczeństwa. Dowiedz się więcej o tym, jak Payora to wdraża w ponad 20 wspieranych sieciach.

Comments

Gotowy, aby zacząć?

Utwórz konto i wystaw pierwszą fakturę w mniej niż godzinę.

Na co odpowiada ta strona