Автор: Омер Шломовиц, ZenGo.
Схемата за прагов подпис (TSS) е криптографски примитив за генериране и подписване на разпределен ключ. Използването на TSS в блокчейн клиенти е нова парадигма, която може да осигури множество предимства, особено по отношение на сигурността. В по-широк смисъл TSS може да окаже влияние върху дизайна на системите за управление на ключове (като крипто портфейли) и да проправи пътя за собствена поддръжка в случаите на използване на DeFi. Като се има предвид това, TSS все още е нова технология, така че рисковете и ограниченията също трябва да се вземат предвид.
В тази статия ще разгледаме какво представлява TSS, какви са потенциалните предимства, които носи в блокчейн пространството, как може да бъде внедрен в блокчейн клиент, как се сравнява с Shamir's Secret Sharing и Multisig, какви са различните начини за използване на TSS за управление на разпределени ключове и накрая ще обсъдим рисковете и ограниченията.
Силата на криптографията
За да разберем TSS, първо се нуждаем от някои основни познания по криптография. От 70-те години на миналия век все повече интернет системи (като TLS и PGP) използва асиметрична криптография, която е известна още като криптография с публичен ключ (PKC). PKC използва два ключа: един публичен и един частен. Въпреки че публичният ключ не е тайна и може да бъде публикуван и използван от всеки, частният ключ е част от тайна информация, която представлява сигурността на системата.
Криптиране и дигиталните подписи са двете най-често срещани приложения за PKC. Схемите както за криптиране, така и за дигитални подписи разчитат на набори от три алгоритъма. Първият е генерирането на двойка частен и публичен ключ, вторият е генерирането на шифров текст/подпис, а третият е процесът на дешифриране/проверка. По отношение на дигиталните подписи, алгоритъмът за подписване изисква частният ключ, който е известен само на неговия собственик, за да произведе уникален подпис. Подписът се прикрепя към дадено съобщение по начин, по който всеки, който притежава публичния ключ, ще може да провери неговата автентичност и коректност.
Блокчейн
Няма съмнение, че блокчейнът е много мощна технология. Той осигурява консенсусен слой, който организира и записва събития. Такава инфраструктура дава на нас, потребителите, потенциална власт за изграждане на децентрализирани икономики и дори правителства. Изненадващо е, че криптографията, необходима за функционирането на обикновен блокчейн, може да се основава единствено на цифрови подписи. В контекста на блокчейн частните ключове представляват самоличности, а подписът е публично изявление или твърдение, направено от дадена самоличност. Блокчейнът ще подрежда изявленията и ще ги валидира в съответствие с набор от правила, които гарантират, наред с други неща, че подписите са неподправени и верни.
За разлика от по-класическата криптография, използвана при блокчейните, съвременният криптографски инструментариум включва някои страхотни магически трикове: доказателства за нулево знание, хомоморфно криптиране и изчисления с участието на няколко страни, и така нататък. Както видяхме през последното десетилетие, изследванията в областта на блокчейна дадоха огромен тласък на приложната криптография, като наскоро бяха постигнати пробиви във всички горепосочени области и в много други.
В тази статия ще се съсредоточим върху един такъв пробив: ефективни сигурни прагови подписи (TSS).
MPC и схемата за прагов подпис (TSS)
Многостранното изчисление (MPC) е клон на криптографията, чието начало е поставено с фундаменталната работа на Андрю К. Яо преди почти 40 години. В MPC набор от страни, които нямат доверие една на друга, се опитват съвместно да изчислят функция върху своите входове, като същевременно запазват тези входове частни.
Като пример нека приемем, че n служители на дадена компания искат да знаят кой получава най-голяма заплата, но без да разкриват действителната си заплата един на друг. Тук частните входове са заплати, а изходът ще бъде името на служителя с най-висока заплата. Извършвайки това изчисление с помощта на MPC, получаваме, че по време на изчислението не е изтекла дори една заплата.
Двете основни свойства на MPC са коректност и поверителност:
Коректност: изходът, произведен от алгоритъм, е правилен (както се очаква).
Поверителност: тайните входни данни, които една страна държи, няма да изтекат към другите страни.
Ще използваме MPC за изчисляване на цифров подпис по разпределен начин. Нека да видим как горните свойства могат да бъдат приложени към подписи. Припомнете си, че за подписите имаме три стъпки:
Генериране на ключ: първата стъпка е и най-сложната. Трябва да генерираме ключ, който ще бъде публичен и ще се използва за проверка на бъдещи подписи. Но също така трябва да генерираме индивидуална тайна за всяка страна, която ще наречем таен дял. По отношение на коректността и поверителността казваме, че функцията ще изведе един и същ публичен ключ за всички страни и различен таен дял за всяка, така че: (1) поверителност: не са изтекли данни за тайни дялове между страните, и (2) коректност: публичният ключ е функция от тайните дялове.
Подписване: тази стъпка включва функция за генериране на подпис. Входът на всяка страна ще бъде нейният таен дял, създаден като изход от предишната стъпка (генериране на разпределен ключ). Има и публичен вход, известен на всички, което е съобщението, което трябва да бъде подписано. Резултатът ще бъде цифров подпис, а свойството за поверителност гарантира, че по време на изчислението не е възникнало изтичане на тайни дялове.
Проверка: алгоритъмът за проверка остава такъв, какъвто е в класическата среда. За да бъде съвместим с подписите с един ключ, всеки, който знае публичния ключ, трябва да може да проверява и потвърждава подписите. Точно това правят валидиращите възли на блокчейна.
Схемата за прагов подпис (TSS) е името, което даваме на тази композиция от генериране на разпределен ключ (DKG) и разпределено подписване на схема за прагов подпис.
Комбиниране на TSS с блокчейните
Естественият начин, по който TSS може да се използва в блокчейн, е чрез промяна на един блокчейн клиент така, че да генерира ключове и подписи с помощта на TSS. Тук използваме термина блокчейн клиент, за да обозначим набора от команди, изпълнени от пълен възел. На практика TSS технологията ни позволява да заменим всички команди, свързани с частен ключ, с разпределени изчисления.
За да го обясним по-подробно, ще започнем с кратко описание на начина, по който се създават нови адреси в класическия дизайн на блокчейн. Просто казано, можем да създадем нов адрес, като генерираме частен ключ и след това изчислим публичния ключ от частния ключ. И накрая, блокчейн адресът се извлича от публичния ключ.
Сега, използвайки TSS, ще имаме набор от n страни, които заедно изчисляват публичния ключ, като всяка притежава таен дял от частния ключ (индивидуалните дялове не се разкриват на другите страни). От публичния ключ можем да извлечем адреса по същия начин както в традиционната система, което прави блокчейн агностичен спрямо начина, по който се генерира адресът. Предимството е, че частният ключ вече не е единствена точка на неизправност, защото всяка страна държи само една част от него.
Същото може да се направи при подписване на трансакции. В този случай, вместо едностранно подписване с техния частен ключ, ние изпълняваме генериране на разпределен подпис между множество страни. Така че всяка страна може да създаде валиден подпис, стига достатъчно от тях да действат честно. Отново преминахме от локално изчисление (единична точка на неизправност) към интерактивно.
Важно е да се спомене, че генерирането на разпределен ключ може да се извърши по начин, който позволява различни видове структури за достъп: общата настройка „t от n“ ще може да издържи до t произволни неизправности в операции, свързани с частен ключ, без компрометиране на сигурността.
TSS срещу Multisig
Някои блокчейни предлагат TSS функционалност като вградена или програмируема част от софтуера. Ние наричаме това функционалност Multisig или с множество подписи. За да разберем по-добре разликите, можем да разгледаме Multisig като TSS в приложния слой на блокчейна.
Казано по различен начин, както Multisig, така и с TSS по същество се опитват да постигнат подобни цели, но TSS използва криптография извън веригата, докато Multisig се случва във веригата. Блокчейнът обаче се нуждае от начин за кодиране на Multisig, което може да навреди на поверителността, тъй като структурата на достъпа (брой подписващи) е изложена в блокчейна. Цената на Multisig трансакцията е по-висока, тъй като информацията за различните подписващи също трябва да се съобщава в блокчейна.
В TSS данните на подписващите се включват в обикновена трансакция, което намалява разходите и запазва поверителността. От друга страна, Multisig може да бъде неинтерактивен, което спестява труда при управлението на сложен комуникационен слой между различните подписващи лица.
Основната разлика е, че Multisig е специфичен за блокчейна и трябва да бъде внедрен отново за всеки блокчейн, а в някои случаи изобщо не се поддържа. Обратно, TSS разчита на чиста криптография, така че поддръжката винаги е възможна. Страхотна статия с илюстрации за разликите можете да намерите тук.
TSS срещу схемата Shamir Secret Sharing
Схемата Shamir Secret Sharing (SSSS) предоставя начин за съхраняване на частния ключ по разпределен начин, така че докато частният ключ е в покой, той се съхранява на множество места. Има две разлики между SSSS и TSS:
Генериране на ключове: в SSSS има една страна, наречена „дилър“, която е отговорна за генерирането на тайните дялове на частния ключ. Това означава, че по време на генериране на ключ, частният ключ се генерира на едно място и след това се разпространява от дилъра до различните местоположения. В TSS няма дилър, тъй като ролята му е разпределена така, че пълният частен ключ никога не е на едно място.
Подписване: в SSSS страните трябва да реконструират пълния частен ключ, за да подпишат, което отново води до една точка на неизправност всеки път, когато е необходим подпис. В TSS подписването се извършва по разпределен начин, без изобщо да се реконструират тайните дялове.
Както можем да видим, в TSS частният ключ (който представлява сигурността на системата) никога не е на едно място през целия си живот.
Прагови портфейли
Портфейлът, базиран на технологията TSS, е малко по-различен от традиционните портфейли за криптовалути. Обикновено конвенционалният портфейл генерира начална фраза и я използва за детерминистично извличане на адресите. Потребителят по-късно може да използва тази йерархична детерминистична (HD) структура, за да 1) достигне до частните ключове, които съответстват на адресите на портфейла, и да подписва трансакции с тях, и 2) да възстанови всички ключове на портфейла с помощта на тайната фраза.
При праговия портфейл нещата са по-сложни. Въпреки че е възможно да се генерира HD структура, нейното генериране трябва да бъде изчислено по разпределен начин, като друг MPC протокол. Страните трябва съвместно да решат кой е следващият ключ, който да се използва. С други думи, всяка страна ще има своя собствена тайна фраза. Тайните фрази се генерират отделно и никога не се комбинират, така че една страна сама да не може да извлече частните ключове от своята тайна фраза.
Портфейлите, базирани на TSS, също имат добра функция за сигурност, която позволява ротация на частен ключ, без да се променя съответният публичен ключ и блокчейн адрес. Ротацията на частния ключ, известна още като проактивно споделяне на тайни, е още един МРС протокол, който приема тайните дялове като входни данни и извежда нов набор от тайни дялове. Старите тайни дялове могат да бъдат изтрити и новите могат да се използват по същия начин.
Подобна структура добавя времево измерение към сигурността, което означава, че за да атакува прагов портфейл, нападателят трябва да се намира на няколко места по едно и също време. Комбинирането на тайни дялове преди ротацията и след ротацията няма да даде на нападателя допълнителна сила, ако иска да фалшифицира подпис.
Недостатък на този тип портфейли е, че липсата на тайна фраза го прави несъвместим със системи за портфейли с един ключ. Затова е важно да се прецени кои страни ще притежават тайните дялове.
Има няколко възможни архитектури:
Възлагане на TSS на външни изпълнители: потребителят позволява на „n“ сървъра да извършва изчисленията от негово име. По същество това е възлагане на генерирането, управлението и подписването на ключове на доставчици на услуги, които не са собственици на активите, но осигуряват ниво на сигурност в замяна на някакъв стимул.
Използване на множество устройства: Потребителят ще изпълнява TSS между устройствата, които притежава. Например, една страна ще бъде някакво устройство за Интернет на нещата, друга страна ще бъде потребителят на мобилен телефон, друга страна неговият лаптоп и т.н.
Хибриден: TSS ще работи така, че някои страни да се контролират от външни доставчици на услуги, а някои страни да работят на устройства, собственост на потребителите.
Първият метод разтоварва тежкото изчисление на TSS от страна на клиента потребител. От друга страна, доставчиците на услуги могат да се договорят (предполагаме, че достатъчно от тях не са атакувани едновременно, но на практика биха могли) и да откраднат активите на потребителя.
Вторият метод дава на потребителя пълен контрол, но прави тромаво извършването на трансакции, тъй като се нуждаете от множество устройства, за да влезете онлайн и да се ангажирате с изчислението на TSS.
Третата опция се счита за най-добрата от двата варианта, тъй като дава на потребителя лесен и бърз начин за извършване на трансакции, но без компромис с извършването на трансакции без разрешението на потребителя.
TSS и смарт договори
През годините изследователите са намерили много приложения на дигиталните подписи, като някои от тях са изненадващо нетривиални. Както споменахме, TSS е криптографски примитив, който може значително да увеличи сигурността. В контекста на блокчейните можем да кажем, че много функционалности могат да бъдат заменени с базирана на TSS криптография. Върху рамката на TSS могат да се изграждат децентрализирани приложения, решения за мащабиране от слой 2, атомни суапове, смесване, наследяване и много други. Това в крайна сметка ще позволи скъпите и рискови операции за смарт договори във веригата да бъдат заменени от по-евтини и по-надеждни алтернативи.
Нека дадем конкретни примера: Multi-Hop Locks използва по интелигентен начин двустранните подписи и може да се използва като алтернатива на мрежата Bitcoin lightning с по-сигурна и частна мрежа за платежни канали. ShareLock е може би най-евтиното решение за смесване по веригата за Ethereum, базирано на проверка на един прагов подпис.
Рискове
През последните няколко години имаше значително увеличение на приложенията на TSS. Въпреки това, като сравнително нова технология, тя все още има някои ограничения и проблеми. В сравнение с класическата криптография с публичен ключ, TSS протоколите могат да бъдат много сложни и тепърва ще бъдат тествани на практика. Обикновено TSS изисква допълнителни, по-слаби, криптографски предположения в сравнение с простите цифрови подписи. В резултат на това сега се откриват вектори за криптографски атаки, които не са съществували в традиционните среди (вижте тази презентация от Breaking Bitcoin Conference 2019). Инженерите по сигурността и приложните криптографи могат да помогнат за безопасното внедряване на TSS във вашата система.
Положителната страна е, че съществуващите и новите приложения стават все по-силни поради увеличаване на качествения принос, партньорски проверки, одити и подобрения на алгоритмичното представяне.
Заключителни мисли
В тази статия представихме основите на схемата за прагов подпис (TSS), която е завладяващ криптографски примитив, който има потенциала да промени значително начина, по който използваме блокчейна.
Тъй като тази статия не обсъжда праговия ECDSA, който може да се използва в BNB Chain и Биткойн. Тези, които се интересуват, могат да се обърнат към следния списък със скорошни статии. Също така, ако искате да си поиграете с някои реализации на TSS, можете да намерите код за двустранен портфейл на BNB Chain тук или да опитате портфейла ZenGo, който използва хибридния метод, за да осигури несеквестируем двустранен портфейл в BNB Chain.
Допълнителни статии: