Принцип работы пороговой подписи
Главная
Статьи
Принцип работы пороговой подписи

Принцип работы пороговой подписи

Профессионал
Опубликовано Jul 21, 2019Обновлено Apr 29, 2021
12m
Автор: Omer Shlomovits, ZenGo.
Пороговая подпись (Threshold Signature Scheme или TSS) - это простой криптографический метод генерации распределенного ключа и подписи к нему. Использование TSS в блокчейн-клиентах, это новая парадигма, которая может предоставить многочисленные преимущества, особенно в отношении безопасности. В более широком понимании, пороговая подпись может повлиять на вид ключевых систем управления (таких как крипто-кошельки) и ввести способ нативной поддержки для возможных вариантов использования DeFi. Поскольку TSS все еще является довольно новой технологией, следует учитывать все риски и ограничения, которые связаны с ее применением.

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

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

Чтобы понять значимость TSS, сперва необходимо поверхностно ознакомится с криптографией. С 1970-х годов все больше и больше интернет-систем (таких как TLS и OPG) начали использовать асимметричную криптографию, которая также известна как криптография с открытым ключом (PKC). В PKC используется два вида ключей: публичный и приватный. В то время как публичный ключ не является секретным и может быть опубликован или использоваться кем угодно, приватный ключ представляет собой часть секретной информации, которая отвечает за безопасную работу системы.
Шифрование и цифровые подписи являются двумя наиболее распространенными методами криптографии с открытым ключом. Формирование шифрования и цифровых подписей зависит от трех этапов работы алгоритмов. Сперва происходит генерация пары из приватного и публичного ключа, затем создается шифротекст и подпись, и после этого осуществляется процесс дешифрования и верификации. В отношении цифровых подписей алгоритм требует, чтобы приватный ключ, который известен только его владельцу, был сгенерирован для создания уникальной подписи. Подпись прикрепляется к определенному сообщению таким образом, чтобы любой у кого есть публичный ключ, мог проверить его подлинность и правильность.


Блокчейн

Блокчейн без сомнений является очень мощной технологией. Он обеспечивает работу консенсуса, который организовывает и обрабатывает порядок записи событий. Такая инфраструктура предоставляет всем пользователям и даже государствам возможность построения децентрализованной экономической сети. Довольно удивительный факт, что криптография необходимая для запуска базового блокчейна может основываться исключительно на цифровых подписях. В блокчейн, приватные ключи представляют собой вашу идентификацию, в то время как подпись является публичным заявлением или претензией, сделанными от вашего имени. Таким образом блокчейн упорядочивает информацию и проверяет ее в соответствии с предопределенным набором правил, которые в частности обеспечивают подлинность и правильность всех подписей.
В отличии от классической криптографии, используемой в блокчейне, современный набор криптографических методов включает в себя некоторые потрясающие магические преобразования данных: доказательства с нулевым значением, гомоморфное шифрование и протокол конфиденциального вычисления. Последнее десятилетие исследований блокчейн-технологий значительно продвинули развитие прикладной криптографии наряду с недавним прорывом во всех вышеперечисленных методах. 

Данная статья акцентирует ваше внимание на эффективность и безопасность пороговых подписей (TSS).


Протокол конфиденциального вычисления и пороговая подпись (TSS)

Протокол конфиденциального вычисления (multi-party computation или MPC) - это ветвь криптографии, которая взяла свое начало с работы Эндрю Яо Цичжи, около 40 лет назад. В MPC группа сторон, которые не доверяют друг другу, пытаются совместно вычислить функцию входных данным, сохраняя при этом приватность на выходе.  

В качестве примера давайте рассмотрим следующую ситуацию, представьте что n-ое количество работников компании хотят знать, кто получает больше, не раскрывая при этом свою реальную зарплату среди коллег. В таком случае, приватными входными данными являются зарплаты, а на выходе будет имя сотрудника с самой высокой зарплатой. Осуществляя расчеты с помощью МРС в результате у нас получается, что ни одна из зарплат не подходит для вывода.  

Из вышеперечисленных фактов следует, что MPC обладает двумя свойствами:

  • Правильность: результат работы алгоритма всегда является верным.

  • Приватность: входные данные хранится у одной из сторон и не могут передаваться другим.

Мы будем использовать MPC для расчета цифровой подписи распределенным способом. Давайте рассмотрим, как вышеперечисленные свойства могут быть применены к цифровым подписям. Вспомним, что подпись состоит из трех составляющих: 

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

  • Подпись: данный этап включает в себя функцию генерацию вашей подписи. Ввод данных от каждой из сторон является его секретной долей, созданной как выход от предыдущего этапа (генерации распределенного ключа). Также есть и всем известный публичный вход, что является сообщением, которое будет подписано. Результатом таких операций будет цифровая подпись, а конфиденциальность данных гарантирует, что во время ее генерации не произошло утечки секретной информации.

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

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


Комбинация технологий: TSS и блокчейн

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

Чтобы рассмотреть это более подробно, начнем с краткого описания того, как создаются новые адреса в классической блокчейн-сети. Изъясняясь в простой форме, мы можем создать новый адрес генерируя приватный ключ и затем на его основе создать публичный. Таким образом публичный адрес является производным публичного ключа.

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

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

Следует отметить тот факт, что генерация распределенного ключа может быть выполнена способом, который допускает различные виды структур доступа. Это можно представить следующим образом: “t из n”, где система сможет выдерживать до t произвольных перебоев в операциях с приватным ключом, без значительного ущерба безопасности.


Различия между TSS и мультиподписью

Для некоторых блокчейнов TSS предлагает свои преимущества в качестве встроенной или программируемой части софта. Мы называем эту функцию мультисиг или мультиподпись (от англ. multisig и multi-signature). Чтобы лучше понять разницу между ними, мы можем представить мультиподпись как TSS на уровне приложения на блокчейне.

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

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

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


TSS и схема шифрования секрета Шамира

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

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

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

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


Кошельки на основе пороговой подписи

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

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

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

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

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

Несколько возможных решений:

  • Аутсорсинг TSS: пользователь предоставляет разрешение "n-ому" количеству серверов производить вычисления от их имени для: эффективного аутсорсинга генерации ключа, управление и подписание поставщиков услуг, которые не являются владельцами активов, но обеспечивают определенный уровень безопасности в обмен на элементы стимулирования.
  • Использование нескольких девайсов: пользователь сможет запускать TSS для своих устройств. Например: одна сторона отвечает за IoT девайсы, другая за смартфон пользователя, третья за ноутбук и так далее.

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

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

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

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


TSS и смарт-контракты 

За прошедшие годы исследователи обнаружили множество видов применения для цифровых подписей и некоторые из них на удивление нетривиальные. Как уже упоминалось ранее, TSS является криптографическим примитивом, который может значительно повысить уровень безопасности. Если говорить о существующих блокчейнах, многие функциональные возможности можно заменить криптографией на основе TSS. Децентрализованные приложения, решения масштабируемости второго уровня, атомарные свопы, микширование, наследование и многие другие функции, которые могут быть реализованы в рамках фреймворка TSS. В конечном счете, это позволит заменить дорогостоящие и рискованные внутри цепные операции со смарт-контрактами на более дешевую и надежную альтернативу.
Приведем несколько конкретных примеров: в технологии multi-hop locks разумное применение двухсторонней подписи привело к тому, что она может использоваться в качестве альтернативы lightning network для биткоин и приватных сетевых платежных каналов, a ShareLock вероятнее всего является одним из самых дешевых решений микширования для сети эфириум, которое основано на проверке одной пороговой подписи.


Риски

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


Заключение

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

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


Рекомендуемая литература: