Автор: Омер Шломовиц, ZenGo.

Схема пороговой подписи (TSS) — это криптографический примитив для распределенной генерации и подписания ключей. Использование TSS в клиентах блокчейна — это новая парадигма, которая может предоставить множество преимуществ, особенно с точки зрения безопасности. В более широком смысле TSS может влиять на дизайн систем управления ключами (таких как криптокошельки) и прокладывать путь к встроенной поддержке в случаях использования DeFi. При этом TSS по-прежнему является новой технологией, поэтому следует также учитывать риски и ограничения.

В этой статье мы расскажем, что такое TSS, каковы потенциальные преимущества, которые он приносит в пространство блокчейна, как его можно реализовать в клиенте блокчейна, как его сравнивать с обменом секретами Шамира и Multisig, каковы различные способы используйте 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 как встроенную или программируемую часть программного обеспечения. Мы называем эту функцию мультиподписью или мультиподписью. Чтобы лучше понять различия, мы можем рассматривать мультиподпись как TSS на прикладном уровне блокчейна.

Иными словами, и мультиподпись, и TSS, по сути, пытаются достичь схожих целей, но TSS использует криптографию вне цепочки, а мультиподпись происходит внутри цепочки. Однако блокчейну необходим способ кодирования мультиподписи, что может нанести ущерб конфиденциальности, поскольку структура доступа (количество подписывающих сторон) раскрывается в блокчейне. Стоимость транзакции с мультиподписью выше, поскольку информация о разных подписантах также должна передаваться в блокчейн.

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

Основное отличие состоит в том, что multisig зависит от конкретного блокчейна и его необходимо переопределять для каждого блокчейна, а в некоторых случаях он вообще не поддерживается. И наоборот, TSS полагается на чистую криптографию, поэтому поддержка всегда возможна. Большую статью с иллюстрациями различий можно найти здесь.


TSS против схемы обмена секретами Шамира

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

  • Генерация ключей: в SSSS есть одна сторона, называемая «дилер», которая отвечает за генерацию секретных акций закрытого ключа. Это означает, что во время генерации ключа закрытый ключ генерируется в одном месте, а затем распространяется дилером по разным местам. В TSS нет дилера, поскольку его роли распределены таким образом, что полный закрытый ключ никогда не находится в одном месте.

  • Подписание: в SSSS стороны должны восстановить полный закрытый ключ для подписи, что снова приводит к единой точке отказа каждый раз, когда требуется подпись. В TSS подписание осуществляется распределенным способом без восстановления секретных общих ресурсов.

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


Пороговые кошельки

Кошелек, основанный на технологии TSS, немного отличается от традиционных криптовалютных кошельков. Обычно обычный кошелек генерирует начальную фразу и использует ее для детерминированного получения адресов. Позже пользователь может использовать эту иерархическую детерминированную (HD) структуру, чтобы 1) получить закрытые ключи, соответствующие адресам кошельков, и подписать с ними транзакции, а также 2) восстановить все ключи кошелька, используя начальную фразу.

В пороговом кошельке дела обстоят сложнее. Хотя можно сгенерировать структуру HD, ее создание должно быть рассчитано распределенным образом, как еще один протокол MPC. Сторонам необходимо совместно решить, какой следующий ключ будет использоваться. Другими словами, у каждой стороны будет своя исходная фраза. Начальные фразы генерируются отдельно и никогда не объединяются, поэтому одна сторона в одиночку не может получить секретные ключи из своего начального числа.

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

Такая структура добавляет к безопасности временное измерение, а это означает, что злоумышленник должен находиться в нескольких местах одновременно, чтобы атаковать пороговый кошелек. Объединение секретных акций до и после ротации не даст злоумышленнику дополнительных возможностей, если он захочет подделать подпись.

Недостатком этого типа кошелька является то, что отсутствие исходной фразы делает его несовместимым с системами кошельков с одним ключом. Поэтому важно учитывать, какие стороны будут владеть секретными акциями.

Существует несколько возможных архитектур:

  • Аутсорсинг 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), которая представляет собой увлекательный криптографический примитив, который может существенно изменить способ использования блокчейна.

Поскольку в этой статье не обсуждался порог ECDSA, который можно использовать в Binance Chain и Bitcoin, заинтересованные могут обратиться к следующему списку недавних статей. Кроме того, если вы хотите поиграть с некоторыми реализациями TSS, вы можете найти код для двустороннего кошелька Binance Chain здесь или попробовать кошелек ZenGo, который использует гибридный метод для предоставления некастодиального двухстороннего кошелька Binance Chain.


Дальнейшее чтение:

  • Быстрое и безопасное двустороннее подписание ECDSA

  • Быстрое безопасное многостороннее ECDSA с практичной распределенной генерацией ключей и приложениями для хранения криптовалюты

  • Двухсторонняя ECDSA от систем хеш-доказательства и эффективных экземпляров

  • Быстрый многосторонний порог ECDSA с быстрой настройкой без доверия

  • Защита двустороннего порогового значения ECDSA на основе допущений ECDSA

  • Пороговое значение ECDSA на основе допущений ECDSA: многопартийный случай