Autor: Omer Shlomovits, ZenGo.

Threshold Signature Scheme (TSS) to prymityw kryptograficzny służący do rozproszonego generowania i podpisywania kluczy. Zastosowanie TSS w klientach blockchain to nowy paradygmat, który może zapewnić liczne korzyści, szczególnie w zakresie bezpieczeństwa. W szerszym znaczeniu TSS może wpływać na projektowanie systemów zarządzania kluczami (takich jak portfele kryptowalutowe) i wyznaczać drogę natywnemu wsparciu w przypadkach użycia DeFi. Powiedziawszy to, TSS jest wciąż nową technologią, dlatego należy również wziąć pod uwagę ryzyko i ograniczenia.

W tym artykule omówimy, czym jest TSS, jakie potencjalne korzyści wnosi do przestrzeni blockchain, jak można go zaimplementować w kliencie blockchain, jak wypada w porównaniu z udostępnianiem sekretów Shamir i Multisig, jakie są różne sposoby użyj TSS do rozproszonego zarządzania kluczami i na koniec omówimy ryzyko i ograniczenia.


Siła kryptografii

Aby zrozumieć TSS, potrzebujemy najpierw podstawowej wiedzy na temat kryptografii. Od lat 70. XX wieku coraz więcej systemów internetowych (takich jak TLS i PGP) wykorzystuje kryptografię asymetryczną, znaną również jako kryptografia klucza publicznego (PKC). PKC korzysta z dwóch kluczy: publicznego i prywatnego. Chociaż klucz publiczny nie jest tajemnicą i może być publikowany i używany przez każdego, klucz prywatny to tajna informacja, która reprezentuje bezpieczeństwo systemu.

Szyfrowanie i podpisy cyfrowe to dwa najczęstsze zastosowania PKC. Zarówno schematy szyfrowania, jak i podpisów cyfrowych opierają się na zestawach trzech algorytmów. Pierwsza to generowanie pary kluczy prywatnych i publicznych, druga to generowanie zaszyfrowanego tekstu/podpisu, a trzecia to proces deszyfrowania/weryfikacji. W przypadku podpisów cyfrowych algorytm podpisywania wymaga klucza prywatnego, znanego tylko jego właścicielowi, do wygenerowania unikalnego podpisu. Podpis jest dołączany do danej wiadomości w taki sposób, aby każdy, kto posiada klucz publiczny, mógł zweryfikować jego autentyczność i poprawność.


Łańcuch bloków

Nie ma wątpliwości, że blockchain to bardzo potężna technologia. Zapewnia warstwę konsensusu, która organizuje i rejestruje zdarzenia. Taka infrastruktura daje nam, użytkownikom, potencjalną siłę do budowania zdecentralizowanych gospodarek, a nawet rządów. Co zaskakujące, kryptografia potrzebna do uruchomienia podstawowego łańcucha bloków może opierać się wyłącznie na podpisach cyfrowych. W kontekście łańcucha bloków klucze prywatne reprezentują tożsamości, podczas gdy podpis jest publicznym oświadczeniem lub oświadczeniem złożonym przez tożsamość. Blockchain uporządkuje wyciągi i zweryfikuje je zgodnie z zestawem reguł, które zapewniają m.in., że podpisy są niepodrabialne i prawidłowe.

W przeciwieństwie do bardziej klasycznej kryptografii wykorzystywanej w łańcuchu bloków, nowoczesny zestaw narzędzi kryptograficznych zawiera kilka niesamowitych magicznych sztuczek: dowody z wiedzą zerową, szyfrowanie homomorficzne i obliczenia wielostronne, żeby wymienić tylko kilka. Jak widzieliśmy w ciągu ostatniej dekady, badania nad blockchainem ogromnie rozwinęły kryptografię stosowaną, dzięki niedawnym przełomom we wszystkich powyższych i wielu innych obszarach.

W tym artykule skupimy się na jednym takim przełomie: wydajnych podpisach bezpiecznego progu (TSS).


RPP i schemat podpisu progowego (TSS)

Obliczenia wielostronne (MPC) to gałąź kryptografii, której początki sięgają przełomowej pracy Andrew C. Yao prawie 40 lat temu. W MPC zbiór stron, które sobie nie ufają, próbuje wspólnie obliczyć funkcję na podstawie swoich danych wejściowych, zachowując jednocześnie poufność tych danych wejściowych.

Załóżmy na przykład, że n pracowników firmy chce wiedzieć, kto zarabia najwięcej, ale nie zdradza sobie nawzajem swojego rzeczywistego wynagrodzenia. Tutaj prywatnymi danymi wejściowymi są wynagrodzenia, a danymi wyjściowymi będzie nazwisko pracownika z najwyższą pensją. Wykonując te obliczenia za pomocą MPC, otrzymujemy, że podczas obliczeń nie wyciekła ani jedna pensja.

Dwie główne właściwości MPC to poprawność i prywatność:

  • Poprawność: wynik wygenerowany przez algorytm jest poprawny (zgodnie z oczekiwaniami).

  • Prywatność: tajne dane wejściowe przechowywane przez jedną ze stron nie wyciekną do innych stron.

Będziemy używać MPC do obliczania podpisu cyfrowego w sposób rozproszony. Zobaczmy, jak powyższe właściwości można zastosować do podpisów. Przypomnijmy, że w przypadku podpisów mamy trzy kroki:

  • Generowanie klucza: pierwszy krok jest również najbardziej złożony. Musimy wygenerować klucz, który będzie publiczny i posłuży do weryfikacji przyszłych podpisów. Musimy jednak także wygenerować indywidualny sekret dla każdej ze stron, który nazwiemy udostępnieniem sekretu. Jeśli chodzi o poprawność i prywatność, mówimy, że funkcja wyśle ​​ten sam klucz publiczny wszystkim stronom i inny tajny udział dla każdej strony, tak aby: (1) prywatność: żadne tajne dane nie wyciekły pomiędzy stronami oraz (2) poprawność: klucz publiczny jest funkcją tajnych udziałów.

  • Podpisywanie: ten krok obejmuje funkcję generowania podpisu. Dane wejściowe każdej ze stron będą jej tajnym udziałem, utworzonym jako wynik poprzedniego kroku (rozproszone generowanie klucza). Istnieje również znany wszystkim wkład publiczny, który jest przesłaniem, które należy podpisać. Dane wyjściowe będą podpisem cyfrowym, a właściwość prywatności gwarantuje, że podczas obliczeń nie nastąpi wyciek tajnych udziałów.

  • Weryfikacja: algorytm weryfikacji pozostaje taki sam, jak w ustawieniu klasycznym. Aby podpisy jednokluczowe były kompatybilne, każda osoba posiadająca wiedzę o kluczu publicznym powinna być w stanie zweryfikować i zatwierdzić podpisy. Dokładnie to robią węzły sprawdzające blockchain.

Schemat podpisu progowego (TSS) to nazwa, jaką nadajemy tej kompozycji rozproszonego generowania kluczy (DKG) i schematu podpisu rozproszonego.


Łączenie TSS z blockchainami

Naturalnym sposobem wykorzystania TSS w łańcuchu bloków jest zmiana klienta łańcucha bloków w celu generowania kluczy i podpisów przy użyciu TSS. Tutaj używamy terminu klient blockchain w odniesieniu do zestawu poleceń wykonywanych przez pełny węzeł. W praktyce technologia TSS pozwala nam zastąpić wszystkie polecenia związane z kluczem prywatnym obliczeniami rozproszonymi.

Aby wyjaśnić to bardziej szczegółowo, zaczniemy od krótkiego opisu tworzenia nowych adresów w klasycznym projekcie blockchain. Mówiąc najprościej, nowy adres możemy utworzyć generując klucz prywatny, a następnie z klucza prywatnego wyliczając klucz publiczny. Wreszcie adres blockchain jest wyprowadzany z klucza publicznego.

Teraz, korzystając z TSS, mielibyśmy zbiór n stron wspólnie obliczających klucz publiczny, z których każda posiadałaby tajny udział w kluczu prywatnym (poszczególne udziały nie są ujawniane innym stronom). Z klucza publicznego możemy wyprowadzić adres w taki sam sposób, jak w tradycyjnym systemie, dzięki czemu blockchain jest niezależny od sposobu generowania adresu. Zaletą jest to, że klucz prywatny nie jest już pojedynczym punktem awarii, ponieważ każda ze stron posiada tylko jedną jego część.

To samo można zrobić podczas podpisywania transakcji. W tym przypadku zamiast podpisywania klucza prywatnego przez jedną stronę, przeprowadzamy rozproszone generowanie podpisu pomiędzy wieloma stronami. Zatem każda ze stron może złożyć ważny podpis, o ile wystarczająca liczba z nich działa uczciwie. Ponownie przeszliśmy od obliczeń lokalnych (pojedynczy punkt awarii) do obliczeń interaktywnych.

Należy wspomnieć, że rozproszone generowanie klucza można przeprowadzić w sposób umożliwiający różne typy struktur dostępu: ogólne ustawienie „t z n” będzie w stanie wytrzymać do t dowolnych błędów w operacjach związanych z kluczem prywatnym, bez zagrażające bezpieczeństwu.


TSS kontra Multisig

Niektóre łańcuchy bloków oferują funkcjonalność TSS jako wbudowaną lub programowalną część oprogramowania. Nazywamy tę funkcjonalność multisig lub multisignature. Aby lepiej zrozumieć różnice, możemy spojrzeć na multisig jako TSS w warstwie aplikacji łańcucha bloków.

Inaczej mówiąc, zarówno multisig, jak i TSS zasadniczo starają się osiągnąć podobne cele, ale TSS korzysta z kryptografii poza łańcuchem, podczas gdy multisig odbywa się w łańcuchu. Jednakże łańcuch bloków potrzebuje sposobu na kodowanie multisig, co może zaszkodzić prywatności, ponieważ struktura dostępu (liczba sygnatariuszy) jest ujawniona w łańcuchu bloków. Koszt transakcji multisig jest wyższy, ponieważ informacje o różnych podpisujących również muszą być przekazywane w łańcuchu blokowym.

W TSS dane osób podpisujących są składane w regularnie wyglądającą transakcję, co pozwala obniżyć koszty i zachować prywatność. Z drugiej strony multisig może nie być interaktywny, co pozwala uniknąć kłopotów z prowadzeniem złożonej warstwy komunikacji pomiędzy różnymi sygnatariuszami.

Główną różnicą jest to, że multisig jest specyficzny dla blockchaina i wymaga ponownego wdrożenia dla każdego blockchaina, a w niektórych przypadkach nie jest w ogóle obsługiwany. Z drugiej strony TSS opiera się na czystej kryptografii, więc wsparcie jest zawsze możliwe. Świetny artykuł z ilustracjami różnic można znaleźć tutaj.


Schemat udostępniania sekretów TSS kontra Shamir

Schemat udostępniania sekretów Shamir (SSSS) umożliwia przechowywanie klucza prywatnego w sposób rozproszony, tak że gdy klucz prywatny jest w stanie spoczynku, jest on przechowywany w wielu lokalizacjach. Istnieją dwie różnice między SSSS i TSS:

  • Generowanie klucza: w SSSS istnieje jedna strona zwana „krupierem”, która jest odpowiedzialna za generowanie tajnych udziałów klucza prywatnego. Oznacza to, że w momencie generowania klucza klucz prywatny jest generowany w jednym miejscu, a następnie rozprowadzany przez dealera do różnych lokalizacji. W TSS nie ma dealera, ponieważ jego rola jest rozproszona w taki sposób, że pełny klucz prywatny nigdy nie znajduje się w jednym miejscu.

  • Podpisywanie: w SSSS strony muszą zrekonstruować pełny klucz prywatny, aby się podpisać, co ponownie skutkuje pojedynczym punktem awarii za każdym razem, gdy potrzebny jest podpis. W TSS podpisywanie odbywa się w sposób rozproszony, bez konieczności odtwarzania tajnych udziałów.

Jak widać, w TSS klucz prywatny (reprezentujący bezpieczeństwo systemu) nigdy nie znajduje się w jednym miejscu przez cały okres jego istnienia.


Portfele progowe

Portfel oparty na technologii TSS różni się nieco od tradycyjnych portfeli kryptowalutowych. Zwykle konwencjonalny portfel generuje frazę zarodkową i wykorzystuje ją do deterministycznego wyprowadzenia adresów. Użytkownik może później użyć tej hierarchicznej struktury deterministycznej (HD), aby 1) dotrzeć do kluczy prywatnych odpowiadających adresom portfeli i podpisać za ich pomocą transakcje oraz 2) odzyskać wszystkie klucze portfela za pomocą frazy początkowej.

W portfelu progowym sytuacja jest bardziej złożona. Chociaż możliwe jest wygenerowanie struktury HD, jej generację należy obliczyć w sposób rozproszony, jako kolejny protokół MPC. Strony muszą wspólnie zdecydować, jaki klucz będzie następny. Innymi słowy, każda ze stron będzie miała własną frazę zalążkową. Frazy początkowe są generowane oddzielnie i nigdy nie są łączone, tak że jedna strona nie może samodzielnie wygenerować kluczy prywatnych ze swoich nasion.

Portfele oparte na TSS mają również ciekawą funkcję bezpieczeństwa, która umożliwia rotację klucza prywatnego bez zmiany odpowiadającego mu klucza publicznego i adresu blockchain. Rotacja kluczy prywatnych, znana również jako proaktywne udostępnianie sekretów, to kolejny protokół MPC, który pobiera tajne udziały jako dane wejściowe i generuje nowy zestaw tajnych udziałów. Stare tajne udziały można usunąć, a nowe można wykorzystać w ten sam sposób.

Taka struktura dodaje bezpieczeństwu wymiar czasowy, co oznacza, że ​​osoba atakująca musi znajdować się w wielu lokalizacjach jednocześnie, aby zaatakować portfel progowy. Łączenie tajnych udziałów przed rotacją i po rotacji nie da atakującemu żadnej dodatkowej mocy, jeśli będzie chciał sfałszować podpis.

Wadą tego typu portfela jest to, że brak frazy początkowej powoduje, że jest on niekompatybilny z systemami portfeli z jednym kluczem. Dlatego ważne jest, aby rozważyć, które strony będą posiadać tajne udziały.

Istnieje kilka możliwych architektur:

  • Outsourcing TSS: użytkownik pozwoli „n” serwerom wykonywać obliczenia w jego imieniu. Skuteczny outsourcing generowania kluczy, zarządzania i podpisywania kluczy dostawcom usług, którzy nie są właścicielami aktywów, ale zapewniają warstwę bezpieczeństwa w zamian za pewną zachętę.

  • Korzystanie z wielu urządzeń: użytkownik będzie uruchamiał TSS pomiędzy posiadanymi urządzeniami. Na przykład – jedna strona będzie urządzeniem IoT, druga stroną będzie użytkownik mobilny, inna strona będzie laptopem i tak dalej.

  • Hybrydowy: TSS będzie działać w taki sposób, że niektóre strony będą kontrolowane przez zewnętrznych dostawców usług, a niektóre strony będą działać na urządzeniach będących własnością użytkowników.

Pierwsza metoda odciąża ciężkie obliczenia TSS po stronie klienta użytkownika. Z drugiej strony dostawcy usług mogą zmówić się (zakładamy, że wielu z nich nie zostaje zaatakowanych w tym samym czasie, ale w praktyce może) i ukraść aktywa użytkownika.

Druga metoda zapewnia użytkownikowi pełną kontrolę, ale utrudnia przeprowadzanie transakcji, ponieważ do połączenia z Internetem i wykonywania obliczeń TSS potrzebnych jest wiele urządzeń.

Trzecia opcja jest uważana za najlepszą z obu światów, ponieważ zapewnia użytkownikowi łatwy i szybki sposób przeprowadzania transakcji, ale bez kompromisów w zakresie przeprowadzania transakcji bez autoryzacji użytkownika.


TSS i inteligentne kontrakty

Na przestrzeni lat badacze odkryli wiele zastosowań podpisów cyfrowych, a niektóre z nich są zaskakująco nietrywialne. Jak wspomniano, TSS jest prymitywem kryptograficznym, który może znacznie zwiększyć bezpieczeństwo. W kontekście blockchainów można powiedzieć, że wiele funkcjonalności można zastąpić kryptografią opartą na TSS. Zdecentralizowane aplikacje, rozwiązania skalowania warstwy 2, zamiany atomowe, miksowanie, dziedziczenie i wiele więcej można zbudować w oparciu o platformę TSS. Ostatecznie umożliwiłoby to zastąpienie kosztownych i ryzykownych operacji inteligentnych kontraktów w łańcuchu tańszymi i bardziej niezawodnymi alternatywami.

Aby podać kilka konkretnych przykładów: Multi-Hop Locks w sprytny sposób wykorzystuje podpisy dwustronne i może być stosowany jako alternatywa dla sieci błyskawicznej Bitcoin z bezpieczniejszą i prywatną siecią kanałów płatności. ShareLock to prawdopodobnie najtańsze rozwiązanie do miksowania on-chain dla Ethereum, oparte na weryfikacji podpisu jednoprogowego.


Ryzyko

W ciągu ostatnich kilku lat nastąpił znaczny wzrost wdrożeń TSS. Jednakże, jako stosunkowo nowa technologia, nadal ma pewne ograniczenia i obawy. W porównaniu z klasyczną kryptografią klucza publicznego, protokoły TSS mogą być bardzo złożone i nie zostały jeszcze „przetestowane w walce”. Zwykle TSS wymaga dodatkowych, słabszych założeń kryptograficznych w porównaniu do prostych podpisów cyfrowych. W rezultacie odkrywane są obecnie wektory ataków kryptograficznych, które nie istniały w tradycyjnych konfiguracjach (zobacz tę prezentację z konferencji Breaking Bitcoin Conference 2019). Inżynierowie bezpieczeństwa i kryptografowie mogą pomóc w bezpiecznym wdrożeniu TSS w Twoim systemie.

Pozytywną stroną jest to, że istniejące i nowe wdrożenia stają się coraz silniejsze dzięki wzrostowi wkładu jakościowego, wzajemnym recenzjom, audytom i ulepszeniom wydajności algorytmów.


Zamykanie myśli

W tym artykule przedstawiliśmy podstawy schematu podpisu progowego (TSS), który jest fascynującym prymitywem kryptograficznym, który może znacząco zmienić sposób, w jaki korzystamy z blockchain.

Ponieważ w tym artykule nie omówiono progu ECDSA, który można wykorzystać w Binance Chain i Bitcoinie, osoby zainteresowane mogą zapoznać się z poniższą listą najnowszych artykułów. Ponadto, jeśli chcesz pobawić się niektórymi implementacjami TSS, możesz znaleźć tutaj kod dla dwustronnego portfela Binance Chain lub wypróbować portfel ZenGo, który wykorzystuje metodę hybrydową, aby zapewnić dwustronny portfel Binance Chain bez nadzoru.


Dalsza lektura:

  • Szybkie, bezpieczne dwustronne podpisywanie ECDSA

  • Szybki, bezpieczny wielostronny ECDSA z praktycznym rozproszonym generowaniem kluczy i aplikacjami do przechowywania kryptowalut

  • Dwustronne ECDSA z systemów odpornych na hash i wydajnych instancji

  • Szybki próg wielostronny ECDSA z szybką konfiguracją bez zaufania

  • Zabezpiecz dwustronny próg ECDSA na podstawie założeń ECDSA

  • Próg ECDSA na podstawie założeń ECDSA: sprawa wielostronna