Vysvětlení prahových podpisů
Domů
Články
Vysvětlení prahových podpisů

Vysvětlení prahových podpisů

Středně pokročilí
Zveřejněno Jul 21, 2019Aktualizováno Apr 29, 2021
12m

Autor: Omer Shlomovits, ZenGo

Schéma prahového podpisu je kryptografické primitivum pro distribuované generování a podepisování klíčů. Využití schématu prahového podpisu v blockchainových klientech je nový model, který může přinést řadu výhod, zejména z hlediska bezpečnosti. V širším slova smyslu může schéma prahového podpisu ovlivnit návrh klíčových systémů správy (jako jsou kryptoměnové peněženky) a ukázat cestu k nativní podpoře při využívání v oblasti DeFi. Schéma prahového podpisu je ale stále nová technologie, takže je třeba zvážit i její rizika a omezení.

V tomto článku se budeme zabývat tím, co je schéma prahového podpisu, jaké jsou jeho potenciální výhody, které blockchainovému odvětví přináší, jak je možné ho implementovat v blockchainovém klientovi, jak si vede ve srovnání se Šamirovým schématem pro sdílení tajemství a používáním více podpisů, jakými způsoby se může schéma prahového podpisu používat k distribuované správě klíčů a nakonec se podíváme na jeho rizika a omezení.


Síla kryptografie

Pochopení schéma prahového podpisu vyžaduje základní znalosti kryptografie. Od roku 1970 čím dál víc internetových systémů (například TLS a PGP) používá asymetrickou kryptografii, která je také známá jako kryptografie s veřejným klíčem. Kryptografie s veřejným klíčem využívá dva klíče: jeden veřejný a jeden soukromý. Veřejný klíč sice není žádným tajemstvím a zveřejnit a používat ho může kdokoli, ale soukromý klíč je část tajné informace, která představuje bezpečnost systému.

Kryptografie s veřejným klíčem se nejčastěji používá k šifrování a digitálním podpisům. Schémata šifrování a digitálních podpisů se opírají o soubory tří algoritmů. Prvním je generování páru soukromého a veřejného klíče, druhým je vygenerování šifrovaného textu/podpisu a třetím je dešifrování/ověření. Pokud jde o digitální podpisy, algoritmus podepisování vyžaduje, aby soukromý klíč, který zná pouze jeho vlastník, vytvořil jedinečný podpis. Podpis se pak k dané zprávě připojí takovým způsobem, aby kdokoli s veřejným klíčem mohl ověřit jeho pravost a správnost.


Blockchain

Není pochyb o tom, že blockchain je velmi mocná technologie. Jeho vrstva konsenzu organizuje a zaznamenává události. Taková infrastruktura nám, uživatelům, potenciálně umožňuje budovat decentralizované ekonomiky a dokonce i vlády. Kryptografie potřebná k provozu základního blockchainu může překvapivě stát výhradně na digitálních podpisech. V kontextu blockchainu soukromé klíče zastupují identity a podpis je veřejné prohlášení nebo nárok učiněný identitou. Blockchain seřazuje a validuje výroky podle souboru pravidel, která mimo jiné zajišťují, že podpisy nejsou padělatelné a jsou správné.

Na rozdíl od klasičtější kryptografie využívané blockchainy má moderní kryptografická sada nástrojů několik úžasných kouzelných triků: důkazy s nulovou znalostí, homomorfní šifrování nebo decentralizované výpočty. Jak jsme mohli v uplynulém desetiletí vidět, výzkum blockchainu ohromně posunul aplikovanou kryptografii a nedávno přinesl průlom ve všech výše uvedených a mnoha dalších oblastech. 

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


Decentralizované výpočty a schéma prahových podpisů

Decentralizované výpočty jsou odvětvím kryptografie, které svou klíčovou prací odstartoval Andrew C. Yao před téměř 40 lety. Decentralizované výpočty fungují tak, že se skupina stran, které si vzájemně nedůvěřují, snaží společně vypočítat funkci nad svými vstupy a přitom tyto vstupy udržet soukromé. 

Řekněme například, že n zaměstnanců společnosti chce vědět, kdo dostává nejvyšší mzdu, aniž by museli odhalit skutečný plat. V tomto případě jsou soukromými vstupy mzdy a výstupem bude jméno zaměstnance s nejvyšší mzdou. Když použijeme decentralizovaný výpočet, neunikne nám během výpočtu ani jedna mzda. 

Dva hlavní atributy decentralizovaných výpočtů jsou správnost a soukromí:

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

  • Ochrana osobních údajů: tajná vstupní data, která každá strana drží, nejsou prozrazena ostatním stranám.

My decentralizovaný výpočet použijeme k výpočtu digitálního podpisu distribuovaným způsobem. Podívejme se, jak je možné výše uvedené atributy aplikovat na podpisy. Připomeňme si, že podpisy pracují se třemi kroky: 

  • Generování klíčů: první krok je zároveň ten nejsložitější. Musíme vygenerovat klíč, který bude veřejný a bude sloužit k ověřování budoucích podpisů. Musíme ale také pro každou stranu vygenerovat individuální tajnou část klíče. Z pohledu správnosti a soukromí, říkáme, že funkce vygeneruje stejný veřejný klíč všem stranám a každé z nich jinou tajnou část následujícím způsobem: 1) soukromí: mezi jednotlivými stranami neuniknou žádná data o tajných sdílených informacích a 2) správnost: veřejný klíč je funkcí tajných částí klíče.

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

  • Ověření: ověřovací algoritmus zůstává stejný jako v klasickém prostředí. K zajištění kompatibility s podpisy s jedním klíčem, by měl být podpisy schopen ověřit a potvrdit každý, kdo zná veřejný klíč. Přesně to na blockchainu dělají ověřovací uzly.

Schéma prahového podpisu je označení této skladby distribuovaného generování klíčů a distribuovaného podepisování schématu prahového podpisu.


Spojení schéma prahového podpisu s blockchainy

Přirozeným způsobem, jak schéma prahového podpisu využít na blockchainu, je změnou blockchainového klienta, aby klíče a podpisy generoval pomocí schéma prahového podpisu. Termínem blockchainový klient zde označujeme sadu příkazů realizovaných plným uzlem. V praxi nám schéma prahového podpisu umožňuje nahradit všechny příkazy související se soukromým klíčem distribuovanými výpočty.

Abychom si to mohli vysvětlit podrobněji, musíme nejdřív stručně popsat, jak se na klasickém blockchainu vytváří nové adresy.  Novou adresu můžeme vytvořit vygenerováním soukromého klíče a následným výpočtem veřejného klíče ze soukromého klíče. Blockchainová adresa se nakonec odvodí z veřejného klíče.

Když použijeme schéma prahového podpisu, budeme mít soubor n stran, které společně vypočítají veřejný klíč, přičemž každá z nich drží tajnou část soukromého klíče (jednotlivé části se ostatním stranám neprozrazují). Z veřejného klíče můžeme odvodit adresu stejným způsobem jako v tradičním systému, takže blockchain není závislý na tom, jak se adresa generuje. Výhodou je, že soukromý klíč už není jediným bodem selhání, protože každá strana drží jen jednu jeho část. 

To samé platí pro podepisování transakcí. V tomto případě akorát místo aby se jedna strana podepisovala svým soukromým klíčem, spustíme distribuované generování podpisu mezi několika stranami. Pokud se dostatečný počet stran chová čestně, může každá z nich vytvořit platný podpis. Opět jsme se posunuli od lokálního výpočtu (jediný bod selhání) k interaktivnímu.

Upozorňujeme, že distribuované generování klíče je možné provést způsobem, který umožňuje různé typy přístupových struktur: obecné nastavení „t z n“ dokáže odolat až t svévolným selháním v operacích souvisejících se soukromým klíčem, aniž by došlo k ohrožení bezpečnosti.


Schéma prahového podpisu vs. používání více podpisů

Některé blockchainy nabízí schéma prahového podpisu jako vestavěnou nebo programovatelnou součást softwaru. Tuto funkci označujeme jako používání více podpisů. Abychom lépe pochopili rozdíly, můžeme se na používání více podpisů podívat jako na schéma prahového podpisu v aplikační vrstvě blockchainu.

Více podpisů i schéma prahového podpisu se v podstatě snaží dosáhnout podobných cílů, ale schéma prahového podpisu používá offchainovou kryptografii a používání více podpisů se odehrává na blockchainu. Blockchain ale potřebuje způsob, jak více podpisů kódovat, což může poškodit soukromí, protože se na blockchainu odhalí struktura přístupu (počet podepisujících). Náklady na vícepodpisovou transakci jsou vyšší, protože na blockchainu je nutné sdělovat i informace o různých podepisujících.

Schéma prahového podpisu skládá údaje o podepisujících do běžně vypadající transakce, což snižuje náklady a zachovává soukromí. Použití více podpisů ale zase může být neinteraktivní, což vám ušetří práci se zprostředkováním složité komunikační vrstvy mezi různými podepisujícími.

Hlavní rozdíl je, že použití více podpisů je specifické pro daný blockchain, je nutné ho u každého blockchainu znovu implementovat a v některých případech není podporované vůbec. Naopak schéma prahového podpisu se spoléhá na čistou kryptografii, takže podpora je vždy možná. Skvělý článek s ilustracemi o rozdílech najdete tady.


Schéma prahového podpisu vs. Šamirovo schéma pro sdílení tajemství

Šamirovo schéma pro sdílení tajemství nabízí způsob, jak uložit soukromý klíč distribuovaným způsobem, takže když se nepoužívá, je uložený na více místech. Mezi Šamirovým schématem pro sdílení tajemství a schématem prahového podpisu jsou dva rozdíly:

  • Generování klíčů: v Šamirově schématu pro sdílení tajemství existuje jediná strana zvaná „zprostředkovatel“, která má na starosti generování tajných částí soukromého klíče. To znamená, že v okamžiku generování klíčů je soukromý klíč vygenerován na jednom místě a zprostředkovatel ho pak distribuuje na různá místa. Schéma prahového podpisu žádného zprostředkovatele nemá, protože jeho role je distribuovaná tak, že úplný soukromý klíč není nikdy na jednom místě.

  • Podepisování: v Šamirově schématu pro sdílení tajemství musí jednotlivé strany před podpisem úplný soukromý klíč rekonstruovat, což opět vede k jedinému bodu selhání pokaždé, když je potřeba podpis. Schéma prahového podpisu provádí podepisování distribuovaným způsobem, aniž by došlo k rekonstrukci tajných částí.

Jak vidíte, schéma prahového podpisu nemá soukromý klíč (který představuje bezpečnost systému) po celou dobu používání nikdy na jednom místě.


Prahové peněženky

Peněženka používající schéma prahového podpisu se od tradičních kryptoměnových peněženek trochu liší. Běžná peněženka obvykle vygeneruje seed frázi, kterou používá k deterministickému odvození adres. Uživatel může tuto hierarchickou deterministickou strukturu později použít 1) k získání přístupu k soukromým klíčům, které odpovídají adresám peněženky, a podepsání transakcí a 2) k obnovení všech klíčů peněženky pomocí seed fráze.

S prahovou peněženkou je to složitější. I když je možné hierarchickou deterministickou strukturu vytvořit, její generování musí být vypočteno distribuovaným způsobem jako další protokol decentralizovaných výpočtů. Strany se musí společně rozhodnout, jaký další klíč se má použít. Jinými slovy, každá strana bude mít svou vlastní seed frázi. Seed fráze se generují samostatně a nikdy se nekombinují, takže jedna strana nemůže sama odvodit soukromé klíče ze své seed fráze.

Peněženky používající schéma prahového podpisu mají navíc dobrý bezpečnostní prvek, který umožňuje střídání soukromého klíče beze změny příslušného veřejného klíče a blockchainové adresy. Střídání soukromých klíčů, známé také jako proaktivní sdílení tajných částí, je další protokol decentralizovaných výpočtů, který přijímá tajné části klíče jako vstup a jeho výstupem je nová sada tajných částí. Staré tajné části klíče je možné odstranit a ty nové je možné použít stejným způsobem.

Taková struktura přidává k zabezpečení časový rozměr, takže útočník by musel být na několika místech současně, aby mohl na prahovou peněženku zaútočit. Kombinace tajných částí klíče před střídáním a po něm útočníkovi z pohledu o pokus zfalšování podpisu nic nepřináší. 

Nevýhodou tohoto typu peněženky je, že kvůli chybějící seed frázi není kompatibilní se systémy peněženek s jedním klíčem. Proto je důležité zohlednit, které strany budou tajné části klíče držet.

Existuje několik možných architektur:

  • Outsourcing schéma prahového podpisu: uživatel nechá „n“ serverů provést výpočet za něj. Vytváření, správa a podepisování klíčů se tak v podstatě přenese na poskytovatele služeb, kteří nejsou vlastníky aktiv, ale výměnou za nějakou pobídku poskytují bezpečnostní vrstvu.

  • Používání více zařízení: uživatel bude schéma prahového podpisu provozovat mezi zařízeními, která vlastní. Například jedna strana bude nějaké zařízení internetu věcí, další strana bude telefon uživatele, jiná strana jeho notebook a tak dále.

  • Hybridní: schéma prahového podpisu poběží 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živatelem.

První metoda přenáší náročný výpočet schéma prahového podpisu pryč od uživatele. Na druhou stranu poskytovatelé služeb by se mohli domluvit (předpokládáme, že mnoho z nich nebude napadeno současně, ale v praxi se to stát může) a ukrást aktiva uživatele.

Druhá metoda dává uživateli plnou kontrolu, ale ztěžuje realizaci transakcí, protože potřebujete několik zařízení, které jsou online a mohou se zapojit do výpočtu schéma prahového podpisu.

Třetí možnost se považuje za to nejlepší z obou světů, protože uživateli poskytuje snadný a rychlý způsob realizace transakcí a zároveň uživatel nepřichází kontrolu.


Schéma prahového podpisu a chytré kontrakty 

V průběhu let našli vědci pro digitální podpisy mnoho využití a některé z nich jsou překvapivě netriviální. Jak už jsme zmiňovali, schéma prahového podpisu je kryptografické primitivum, které může výrazně zvýšit bezpečnost. V kontextu blockchainů se dá říct, že mnoho funkcí je možné nahradit kryptografií používající schéma prahového podpisu. Rámec schéma prahového podpisu je možné použít k realizaci decentralizovaných aplikací, řešení škálování druhé vrstvy, atomických výměn, kombinování, dědictví a mnoha dalších věcí. To by v konečném důsledku umožnilo nahradit nákladné a riskantní onchainové operace chytrých kontraktů levnějšími a spolehlivějšími alternativami.

Uveďme pár konkrétních příkladů: víceskokové zámky chytře využívají podpisy dvou stran a můžete je použít jako alternativu k řešení Lightning Network sítě Bitcoin, která nabízí bezpečnější a soukromější síť platebních kanálů. ShareLock je pravděpodobně nejlevnější onchainové řešení pro kombinování na Ethereu, které vychází z ověření jediného prahového podpisu.


Rizika

V posledních několika letech došlo k významnému nárůstu implementací schéma prahového podpisu. Je to ale relativně nová technologie, a tak s ní stále souvisí určitá omezení a obavy. V porovnání s klasickou kryptografií s veřejným klíčem mohou být protokoly schéma prahového podpisu velmi složité a teprve se musí osvědčit. Schéma prahového podpisu obvykle oproti jednoduchým digitálním podpisům vyžaduje další, slabší kryptografické předpoklady. V důsledku toho se teď objevují kryptografické vektory útoku, které tradičně neexistovaly (podívejte se na prezentaci z konference Breaking Bitcoin z roku 2019). Bezpečnostní inženýři a aplikovaní kryptografové ale mohou s bezpečným nasazením schématu prahového podpisu ve vašem systému pomoct.

Pozitivní je, že stávající a nové implementace jsou díky nárůstu kvalitních příspěvků, vzájemných hodnocení, auditů a zlepšení algoritmické výkonnosti stále lepší.


Závěrem

V tomto článku jsme si představili základy schématu prahového podpisu, 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 se tento článek nezabývá prahovým protokolem digitálního podpisu s využitím eliptických křivek (ECDSA), který je možné použít na sítích Binance Chain a Bitcoin, zájemci o toto téma si mohou projít následující seznam nedávných prací (v angličtině). Pokud si chcete pohrát s některými implementacemi schématu prahového podpisu, tady je kód pro peněženku na Binance Chainu se dvěma stranami. Nebo můžete vyzkoušet peněženku ZenGo, která k poskytování peněženky na Binance Chainu bez úschovy se dvěma stranami využívá hybridní metodu.


Související články: