Autor: Omer Shlomovits, ZenGo.

Threshold Signature Scheme (TSS) je kryptografické primitivum pro generování a podepisování distribuovaného klíče. Využití TSS v blockchain klientech je nové paradigma, které může poskytnout četné výhody, zejména pokud jde o bezpečnost. V širším slova smyslu může TSS ovlivnit návrh systémů správy klíčů (jako jsou kryptopeněženky) a vést cestu k nativní podpoře v případech použití DeFi. Přesto je TSS stále novou technologií, takže je třeba vzít v úvahu i rizika a omezení.

V tomto článku se budeme zabývat tím, co je TSS, jaké jsou potenciální výhody, které přináší do blockchainového prostoru, jak jej lze implementovat v blockchainovém klientovi, jak je ve srovnání s Shamir secret sharing a Multisig, jaké jsou různé způsoby používat TSS pro správu distribuovaných klíčů a nakonec diskutujeme o rizicích a omezeních.


Síla kryptografie

Abychom porozuměli TSS, potřebujeme nejprve nějaké základní znalosti kryptografie. Od 70. let 20. století stále více internetových systémů (jako TLS a PGP) používá asymetrickou kryptografii, která je také známá jako kryptografie s veřejným klíčem (PKC). PKC využívá dva klíče: jeden veřejný a jeden soukromý. Zatímco veřejný klíč není žádné tajemství a může být publikován a používán kýmkoli, soukromý klíč je část tajné informace, která představuje zabezpečení systému.

Šifrování a digitální podpisy jsou dvě nejběžnější použití pro PKC. Schémata šifrování i digitálních podpisů se spoléhají na sady tří algoritmů. Prvním je generování páru soukromého a veřejného klíče, druhým je generování šifrovaného textu/podpisu a třetím je proces dešifrování/ověření. Pokud jde o digitální podpisy, podepisovací algoritmus vyžaduje k vytvoření jedinečného podpisu soukromý klíč, který zná pouze jeho vlastník. Podpis je připojen k dané zprávě tak, že každý, kdo má veřejný klíč, bude moci ověřit jeho pravost a správnost.


Blockchain

Není pochyb o tom, že blockchain je velmi výkonná technologie. Poskytuje konsensuální vrstvu, která organizuje a zaznamenává události. Taková infrastruktura nám, uživatelům, dává potenciální sílu k budování decentralizovaných ekonomik a dokonce i vlád. Překvapivě může být kryptografie potřebná k provozování základního blockchainu založena pouze na digitálních podpisech. V kontextu blockchainu soukromé klíče představují identity, zatímco podpis je veřejným prohlášením nebo tvrzením identity. Blockchain bude objednávat výpisy a ověřovat je podle sady pravidel, která mimo jiné zajišťují, že podpisy jsou nefalšovatelné a správné.

Na rozdíl od klasičtější kryptografie využívané v blockchainu obsahuje moderní sada kryptografických nástrojů některé úžasné magické triky: důkazy s nulovými znalostmi, homomorfní šifrování a výpočty pro více stran, abychom jmenovali alespoň některé. Jak jsme viděli v posledním desetiletí, výzkum blockchainu ohromně posunul aplikovanou kryptografii, s nedávnými průlomy ve všech výše uvedených a mnohem více.

V tomto článku se zaměříme na jeden takový průlom: efektivní bezpečné prahové podpisy (TSS).


MPC a prahové podpisové schéma (TSS)

Multi-party computation (MPC) je odvětví kryptografie, které začalo s klíčovou prací Andrewa C. Yaa před téměř 40 lety. V MPC se skupina stran, které si navzájem nedůvěřují, pokouší společně vypočítat funkci přes své vstupy, přičemž tyto vstupy zůstávají soukromé.

Jako příklad řekněme, že n zaměstnanců společnosti chce vědět, kdo dostává nejvíce peněz, aniž by si navzájem prozradili svůj skutečný plat. Zde jsou soukromými vstupy platy a výstupem bude jméno zaměstnance s nejvyšší mzdou. Provedením tohoto výpočtu pomocí MPC dostaneme, že během výpočtu neunikne ani jeden plat.

Dvě hlavní vlastnosti MPC jsou správnost a soukromí:

  • Správnost: výstup vytvořený algoritmem je správný (podle očekávání).

  • Soukromí: tajná vstupní data, která má strana k dispozici, by nepronikla ostatním stranám.

K výpočtu digitálního podpisu distribuovaným způsobem použijeme MPC. Podívejme se, jak lze výše uvedené vlastnosti aplikovat na podpisy. Připomeňme, že pro podpisy máme tři kroky:

  • Generování klíčů: první krok je také nejsložitější. Potřebujeme vygenerovat klíč, který bude veřejný a bude se používat k ověřování budoucích podpisů. Musíme však také vygenerovat individuální tajemství pro každou stranu, které budeme nazývat tajné sdílení. Pokud jde o správnost a soukromí, říkáme, že funkce bude vydávat stejný veřejný klíč pro všechny strany a jiné tajné sdílení pro každou z nich, takže: (1) soukromí: mezi stranami neunikají žádná data tajných sdílení a (2) správnost: veřejný klíč je funkcí tajných akcií.

  • Podepisování: tento krok zahrnuje funkci generování podpisu. Vstupem každé strany bude její tajný podíl, vytvořený jako výstup předchozího kroku (generování distribuovaného klíče). Všem známý je také veřejný vstup, kterým je zpráva, která má být podepsána. Výstupem bude digitální podpis a vlastnost soukromí zajišťuje, že během výpočtu nedošlo k úniku tajných akcií.

  • Verifikace: ověřovací algoritmus zůstává stejný jako v klasickém nastavení. Aby byly kompatibilní s podpisy jedním klíčem, každý, kdo zná veřejný klíč, by měl být schopen podpisy ověřit a ověřit. Přesně to dělají uzly ověřující blockchain.

Schéma prahového podpisu (TSS) je název, který dáváme tomuto složení distribuovaného generování klíčů (DKG) a distribuovaného podepisování prahového podpisového schématu.


Kombinace TSS s blockchainy

Přirozeným způsobem, jak lze TSS použít v blockchainu, je změna blockchainového klienta tak, aby generoval klíče a podpisy pomocí TSS. Zde používáme termín blockchain klient pro označení sady příkazů prováděných úplným uzlem. V praxi nám technologie TSS umožňuje nahradit všechny příkazy související se soukromým klíčem distribuovanými výpočty.

Abychom to vysvětlili podrobněji, začneme tím, že stručně popíšeme, jak vznikají nové adresy na klasickém blockchainovém designu. Jednoduše řečeno, můžeme vytvořit novou adresu vygenerováním soukromého klíče a poté vypočítáním veřejného klíče ze soukromého klíče. Nakonec je blockchainová adresa odvozena z veřejného klíče.

Nyní bychom pomocí TSS měli sadu n stran, které společně počítají veřejný klíč, z nichž každá drží tajný podíl soukromého klíče (jednotlivá sdílení nejsou ostatním stranám odhalena). Z veřejného klíče můžeme odvodit adresu stejným způsobem jako v tradičním systému, čímž se blockchain stane agnostickým vůči tomu, jak je adresa generována. Výhodou je, že soukromý klíč již není jediným bodem selhání, protože každá strana drží pouze jednu jeho část.

Totéž lze provést při podepisování transakcí. V tomto případě místo toho, aby jedna strana podepsala svůj soukromý klíč, spustíme distribuované generování podpisu mezi více stranami. Každá strana tedy může předložit platný podpis, pokud dostatečný počet z nich jedná čestně. Opět jsme přešli od lokálního výpočtu (jediný bod selhání) k interaktivnímu.

Je důležité zmínit, že generování distribuovaného klíče lze provést způsobem, který umožňuje různé typy přístupových struktur: obecné nastavení „t z n“ bude schopno odolat až t libovolným selháním v operacích souvisejících se soukromým klíčem, aniž by ohrožení bezpečnosti.


TSS vs. Multisig

Některé blockchainy nabízejí funkcionalitu TSS jako vestavěnou nebo programovatelnou součást softwaru. Tuto funkci nazýváme multisig nebo multi-signature. Abychom lépe porozuměli rozdílům, můžeme se na multisig dívat jako na TSS v aplikační vrstvě blockchainu.

Jinak řečeno, jak multisig, tak TSS se v podstatě snaží dosáhnout podobných cílů, ale TSS používá kryptografii off-chain, zatímco multisig se děje on-chain. Blockchain však potřebuje způsob, jak kódovat multisig, což by mohlo poškodit soukromí, protože na blockchainu je odhalena přístupová struktura (počet signatářů). Náklady na multisig transakci jsou vyšší, protože informace o různých podepisujících musí být také sdělovány na blockchainu.

V TSS jsou detaily signatářů složeny do běžně vypadající transakce, což snižuje náklady a zachovává soukromí. Na druhou stranu, multisig může být neinteraktivní, což ušetří potíže s provozováním složité komunikační vrstvy mezi různými signatáři.

Hlavním rozdílem je, že multisig je specifický pro blockchain a je třeba jej znovu implementovat pro každý blockchain a v některých případech není podporován vůbec. Naopak TSS se spoléhá na čistou kryptografii, takže podpora je vždy možná. Skvělý článek s ilustracemi o rozdílech najdete zde.


Schéma tajného sdílení TSS vs. Shamir

Schéma tajného sdílení Shamir (SSSS) poskytuje způsob, jak uložit soukromý klíč distribuovaným způsobem, takže když je soukromý klíč v klidu, je uložen na více místech. Mezi SSSS a TSS jsou dva rozdíly:

  • Generování klíčů: v SSSS existuje jediná strana zvaná „dealer“, která má na starosti generování tajných akcií soukromého klíče. To znamená, že v době generování klíčů je soukromý klíč generován na jednom místě a poté distribuován prodejcem na různá místa. V TSS neexistuje žádný prodejce, protože jeho role je distribuována tak, že úplný soukromý klíč nikdy není na jednom místě.

  • Podepisování: v SSSS musí strany rekonstruovat úplný soukromý klíč, aby mohly podepsat, což opět vede k jedinému selhání pokaždé, když je podpis potřeba. V TSS se podepisování provádí distribuovaným způsobem, aniž by se kdy rekonstruovaly tajné akcie.

Jak vidíme, v TSS není soukromý klíč (který představuje bezpečnost systému) nikdy po celou dobu jeho životnosti na jednom místě.


Prahové peněženky

Peněženka založená na technologii TSS je trochu jiná než tradiční kryptoměnové peněženky. Běžná peněženka obvykle generuje počáteční frázi a používá ji k deterministickému odvození adres. Uživatel může později použít tuto hierarchickou deterministickou (HD) strukturu k 1) dosažení soukromých klíčů, které odpovídají adresám peněženky a podepsání transakcí s nimi, a 2) k obnovení všech klíčů peněženky pomocí počáteční fráze.

V prahové peněžence jsou věci složitější. I když je možné generovat HD strukturu, její generování musí být počítáno distribuovaným způsobem, jako další MPC protokol. Strany se musí společně rozhodnout, jaký klíč bude použit. Jinými slovy, každá strana bude mít vlastní počáteční frázi. Počáteční fráze jsou generovány samostatně a nikdy se nekombinují, takže jedna strana sama nemůže odvodit soukromé klíče ze svého semene.

Peněženky založené na TSS mají také příjemnou bezpečnostní funkci, která umožňuje rotaci soukromého klíče bez změny odpovídajícího veřejného klíče a adresy blockchainu. Rotace soukromých klíčů, známá také jako proaktivní sdílení tajných klíčů, je dalším protokolem MPC, který přijímá tajné sdílené položky jako vstup a vydává novou sadu tajných sdílení. Staré tajné sdílené položky lze smazat a nové použít stejným způsobem.

Taková struktura dodává zabezpečení časový rozměr, což znamená, že útočník musí být na více místech současně, aby mohl zaútočit na prahovou peněženku. Kombinace tajných akcií před rotací a po rotaci nedá útočníkovi žádnou extra sílu, pokud chce zfalšovat podpis.

Nevýhodou tohoto typu peněženky je, že nedostatek počáteční fráze ji činí nekompatibilní se systémy peněženek s jedním klíčem. Je tedy důležité zvážit, které strany budou držet tajné akcie.

Existuje několik možných architektur:

  • Outsourcing TSS: uživatel nechá „n“ serverů spustit výpočet jeho jménem. Efektivní outsourcing generování, správy a podepisování klíčů poskytovatelům služeb, kteří nejsou vlastníky aktiv, ale poskytují bezpečnostní vrstvu výměnou za určitou pobídku.

  • Použití více zařízení: Uživatel bude spouštět TSS mezi zařízeními, která vlastní. Například – jedna strana bude nějaké IoT zařízení, další strana bude uživatel mobilní, další strana jejich notebook a tak dále.

  • Hybridní: TSS bude fungovat tak, že některé strany budou řízeny externími poskytovateli služeb a některé strany budou fungovat na zařízeních vlastněných uživateli.

První metoda odlehčí náročné výpočty TSS ze strany uživatele a klienta. Na druhou stranu se poskytovatelé služeb mohou domlouvat (předpokládáme, že jich není současně napadeno dost, ale v praxi by mohli) a ukrást majetek uživatele.

Druhá metoda poskytuje uživateli plnou kontrolu, ale činí provádění transakcí těžkopádným, protože k připojení online a zapojení do výpočtu TSS potřebujete více zařízení.

Třetí možnost je považována za nejlepší z obou světů, protože poskytuje uživateli snadný a rychlý způsob provádění transakcí, ale bez kompromisů v provádění transakcí bez autorizace uživatele.


TSS a chytré smlouvy

V průběhu let výzkumníci našli mnoho využití digitálních podpisů a některé jsou překvapivě netriviální. Jak již bylo zmíněno, TSS je kryptografické primitivum, které může výrazně zvýšit bezpečnost. V kontextu blockchainů můžeme říci, že mnoho funkcí lze nahradit kryptografií na bázi TSS. Decentralizované aplikace, řešení pro škálování vrstvy 2, atomické swapy, míchání, dědění a mnoho dalšího lze postavit na rámec TSS. To by nakonec umožnilo nahradit drahé a riskantní operace inteligentních smluv v řetězci levnějšími a spolehlivějšími alternativami.

Abych uvedl nějaké konkrétní příklady: Multi-Hop Locks chytrým způsobem využívá podpisy dvou stran a lze je použít jako alternativu k bitcoinové bleskové síti s bezpečnější a privátnější sítí platebních kanálů. ShareLock je pravděpodobně nejlevnější on-chain míchací řešení pro Ethereum, založené na ověření jediného prahového podpisu.


Rizika

V posledních několika letech došlo k výraznému nárůstu implementací TSS. Jako relativně nová technologie má však stále určitá omezení a obavy. Ve srovnání s klasickou kryptografií veřejného klíče mohou být protokoly TSS velmi složité a musí být ještě „otestovány v bitvě“. TSS obvykle vyžaduje další, slabší, kryptografické předpoklady ve srovnání s jednoduchými digitálními podpisy. V důsledku toho se nyní objevují kryptografické útočné vektory, které v tradičních nastaveních neexistovaly (viz tato prezentace z konference Breaking Bitcoin Conference 2019). Bezpečnostní inženýři a aplikovaní kryptografové vám mohou pomoci s bezpečným nasazením TSS ve vašem systému.

Pozitivní je, že stávající a nové implementace jsou stále silnější díky nárůstu příspěvků na kvalitu, vzájemného hodnocení, auditů a zlepšení výkonu algoritmů.


Závěrečné myšlenky

V tomto článku jsme představili základy prahového podpisového schématu (TSS), což je fascinující kryptografické primitivum, které má potenciál výrazně změnit způsob, jakým používáme blockchain.

Vzhledem k tomu, že tento článek nepojednával o Threshold ECDSA, které lze použít v řetězci Binance a Bitcoinu, zájemci se mohou podívat na následující seznam posledních článků. Také, pokud si chcete hrát s některými implementacemi TSS, můžete zde najít kód pro dvoustrannou peněženku Binance Chain nebo vyzkoušet peněženku ZenGo, která využívá hybridní metodu k poskytnutí neopatrované dvoustranné peněženky Binance Chain.


Další čtení:

  • Rychlé bezpečné dvoustranné podepisování ECDSA

  • Rychlé bezpečné vícestranné ECDSA s praktickým generováním distribuovaných klíčů a aplikacemi pro úschovu kryptoměn

  • Dvoustranné ECDSA od Hash Proof Systems a Efficient Instantiations

  • Rychlý práh vícestran ECDSA s rychlým nastavením bez důvěry

  • Zabezpečení dvoustranného prahu ECDSA z předpokladů ECDSA

  • Prahová hodnota ECDSA z předpokladů ECDSA: Případ více stran