Автор: Omer Shlomovits, ZenGo.

Схема порогового підпису (TSS) – це криптографічний елемент для генерації і підпису розподілених ключів. Використання TSS у блокчейн-клієнтах – це нова парадигма, яка може надати численні переваги, особливо з точки зору безпеки. У ширшому сенсі TSS може впливати на дизайн систем управління ключами (наприклад,криптогаманців) і прокласти шлях до нативної підтримки у варіантах використання DeFi. З огляду на це, TSS все ще є новою технологією, тому ризики й обмеження також слід враховувати.

У цій статті ми розглянемо, що таке TSS, які потенційні переваги вона приносить блокчейн-простору, як її можна реалізувати в блокчейн-клієнті, чим вона відрізняється від схеми розподілу секретів Шаміра й мультипідпису, які існують різні способи використання TSS для управління розподіленими ключами, і, нарешті, ми обговоримо ризики та обмеження.


Сила криптографії

Щоб зрозуміти TSS, нам спочатку знадобляться базові знання з криптографії. З 1970-х років все більше і більше інтернет-систем (таких як 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 і Мультипідпис

Деякі блокчейни пропонують функціональність TSS як вбудовану або програмовану частину програмного забезпечення. Ми називаємо це функцією мультипідпису або multisig. Щоб краще зрозуміти відмінності, ми можемо розглядати мультипідпис як TSS на рівні програм блокчейну.

Тобто, і мультипідпис, і TSS, по суті, намагаються досягти схожих цілей, але TSS використовує криптографію офчейн, а мультипідпис – ончейн. Однак блокчейну потрібен спосіб кодування мультипідпису, що може зашкодити конфіденційності, оскільки структура доступу (кількість підписантів) розкривається в блокчейні. Вартість транзакції з мультипідписом вища, оскільки інформація про різних підписантів також повинна передаватись у блокчейн.

У TSS дані підписантів згортаються у звичайну транзакцію, що знижує витрати та зберігає конфіденційність. З іншого боку, мультипідпис може бути неінтерактивним, що позбавляє від проблем із забезпеченням складного рівня зв'язку між різними підписантами.

Основна відмінність полягає в тому, що мультипідпис залежить від блокчейну і потребує повторної реалізації для кожного блокчейну, а в деяких випадках він взагалі не підтримується. І навпаки, TSS покладається на чисту криптографію, тому підтримка завжди можлива. Ви можете знайти чудову статтю з ілюстраціями відмінностей тут.


TSS і схема розподілу секретів Шаміра

Схема розподілу секретів Шаміра (SSSS) надає спосіб розподіленого зберігання приватного ключа таким чином, що, поки приватний ключ знаходиться в спокої, він зберігається в декількох місцях. Існує дві відмінності між SSSS і TSS:

  • Генерація ключів: у SSSS є одна сторона, яка називається "дилер", яка відповідає за генерацію секретного ключа. Це означає, що під час генерації ключа приватний ключ генерується в одному місці, а потім розподіляється дилером у різні місця. У TSS немає дилера, оскільки його роль розподілена таким чином, що повний приватний ключ ніколи не знаходиться в одному місці.

  • Підписання: у SSSS сторони повинні реконструювати повний приватний ключ, щоб підписати, що знову призводить до однієї точки відмови щоразу, коли потрібен підпис. У TSS підписання здійснюється розподіленим способом без реконструювати секретних частин.

Як ми бачимо, у TSS приватний ключ (який представляє безпеку системи) ніколи не знаходиться в одному місці протягом усього терміну служби.


Порогові гаманці

Гаманець на основі технології TSS трохи відрізняється від традиційного криптовалютного гаманця. Як правило, звичайний гаманець генерує seed-фразу та використовує її для детермінованого отримання адрес. Пізніше користувач може використовувати цю ієрархічну детерміновану (HD) структуру, щоб 1) отримувати приватні ключі, які відповідають адресам гаманців, і підписувати ними транзакції, і 2) відновити всі ключі гаманців за допомогою seed-фрази.

З пороговим гаманцем усе складніше. Хоча можна згенерувати структуру HD, її генерація повинна обчислюватися розподіленим чином, як інший протокол MPC. Сторони повинні спільно вирішити, який наступний ключ буде використано. Тобто кожна сторона матиме власну seed-фразу. Seed-фрази генеруються окремо та ніколи не комбінуються, щоб одна сторона не могла отримати приватні ключі зі своєї seed-фрази.

Гаманці на основі TSS також мають хорошу функцію безпеки, яка дозволяє ротацію приватного ключа без зміни відповідного публічного ключа й адреси блокчейну. Ротація приватного ключа, також відома як проактивний обмін секретами, є ще одним протоколом MPC, який приймає секретні частки як вхідні дані та виводить новий набір секретних часток. Старі секретні ресурси можна видалити, а нові можна використовувати таким самим чином.

Така структура додає часовий вимір до безпеки, що означає, що зловмисник повинен перебувати в декількох місцях одночасно, щоб атакувати пороговий гаманець. Об'єднання секретних часток до і після ротації не дасть зловмиснику додаткових можливостей, якщо він захоче підробити підпис. 

Недоліком цього типу гаманців є те, що відсутність seed-фрази робить його несумісним із системами гаманців з одним ключем. Тому важливо враховувати, хто буде володіти секретними частками.

Існує кілька можливих архітектур:

  • Аутсорсинг TSS: користувач дозволяє "n" серверам виконувати обчислення від свого імені. Фактично передача генерації, управління і підпису ключів постачальникам послуг, які не є власниками активів, але надають рівень безпеки в обмін на певний стимул.

  • Використання декількох пристроїв: користувач запускає TSS між пристроями, які йому належать. Наприклад, одна сторона буде деяким пристроєм IoT, інша сторона – мобільний пристрій користувача, третя – його ноутбук тощо.

  • Гібридний: TSS буде працювати так, що деякі сторони контролюються зовнішніми постачальниками послуг, а деякі сторони працюють на пристроях, що належать користувачу.

Перший метод знімає важкі обчислення TSS зі сторони користувача-клієнта. З іншого боку, постачальники послуг можуть вступити в змову (ми припускаємо, що велика кількість з них не зазнає атаки одночасно, але на практиці вони можуть) і вкрасти активи користувача.

Другий метод дає користувачеві повний контроль, але ускладнює проведення транзакцій, оскільки вам потрібно кілька пристроїв для виходу в інтернет і участі в обчисленнях TSS.

Третій варіант вважається найкращим з обох світів, оскільки він дає користувачеві простий і швидкий спосіб проведення транзакцій, але без шкоди для транзакцій без авторизації користувача.


TSS і смартконтракти 

Протягом багатьох років дослідники винаходили безліч застосувань цифрових підписів, і деякі з них напрочуд нетривіальні. Як згадувалося, TSS – це криптографічний елемент, який може значно підвищити безпеку. У контексті блокчейнів можна сказати, що багато функцій можна замінити криптографією на основі TSS. Децентралізовані застосунки, рівень 2 рішення для масштабування, атомарні свопи, змішування, спадкування і багато іншого можна створити поверх фреймворку TSS. Це в результаті дозволить замінити дорогі та ризиковані ончейн-операції смартконтрактів на дешевші та надійніші альтернативи.

Ось кілька конкретних прикладів: Multi-Hop Locks розумно використовує двосторонні підписи і може використовуватися як альтернатива мережі Bitcoin Lightning з більш безпечною і приватною мережею платіжних каналів. ShareLock це, ймовірно, найдешевше рішення для ончейн-змішування на Ethereum, засноване на верифікації єдиного порогового підпису.


Ризики

За останні кілька років спостерігалося значне зростання кількості реалізацій TSS. Однак, будучи відносно новою технологією, вона все ще має деякі обмеження і проблеми. Порівняно з класичною криптографією з відкритим ключем, протоколи TSS можуть бути дуже складними і ще не пройшли "випробування в боях". Зазвичай TSS вимагає додаткових, слабших криптографічних припущень порівняно з простими цифровими підписами. У результаті тепер виявляються вектори криптографічної атаки, які не існували в традиційних налаштуваннях (див. цю презентацію з Breaking Bitcoin Conference 2019). Інженери з безпеки та прикладні криптографи можуть допомогти безпечно розгорнути TSS у вашій системі.

Позитивним моментом є те, що поточні та нові реалізації стають сильнішими завдяки збільшенню якості внесків, експертних оцінок, аудитів і покращення продуктивності алгоритмів.


Підсумки

У цій статті ми представили основи схеми порогового підпису (TSS), яка є захопливим криптографічним елементом, який може істотно змінити спосіб використання блокчейну.

Оскільки в цій статті не обговорювався Threshold ECDSA, який можна використовувати в BNB Chain і Bitcoin, зацікавлені можуть звернутися до наступного списку останніх статей. Крім того, якщо ви хочете пограти з деякими реалізаціями TSS, ви можете знайти код для двостороннього гаманця BNB Chain тут або спробувати гаманець ZenGo, який використовує гібридний метод для надання некастодіального двостороннього гаманця на BNB Chain.


Пов'язані статті:

  • Fast Secure Two-Party ECDSA Signing

  • Fast Secure Multiparty ECDSA with Practical Distributed Key Generation and Applications to Cryptocurrency Custody

  • Two-Party ECDSA from Hash Proof Systems and Efficient Instantiations

  • Fast Multiparty Threshold ECDSA with Fast Trustless Setup

  • Secure Two-party Threshold ECDSA from ECDSA Assumptions

  • Threshold ECDSA from ECDSA Assumptions: The Multiparty Case