В настоящей статье мы рассмотрим, что такое Схема пороговой подписи (Threshold Signature Scheme, TSS), какие преимущества она может дать блокчейн-пространству, как её можно реализовать в блокчейн-клиенте, как она сопоставима со схемой разделения секрета Шамира и мультиподписями, какие возможны способы использования TSS для распределённого управления ключами и, наконец, какие есть риски и ограничения.
Схема пороговой подписи (Threshold Signature Scheme, TSS) – это криптографический примитив для распределённой генерации ключей и подписания транзакций. Использование TSS в блокчейн-клиентах – это новая парадигма, имеющая много преимуществ, особенно по части безопасности. В более широком смысле TSS может повлиять на проектирование систем управления ключами (таких как криптокошельки) и проложить путь к встроенной поддержке различных реализаций децентрализованных финансов. Тем не менее TSS пока новая технология, поэтому стоит также учитывать риски и ограничения.
Сила криптографии
Для того чтобы понять TSS, необходимы некоторые базовые познания в криптографии. Начиная с 1970-х интернет-системы (такие как TLS и PGP) всё чаще использовали асимметричную криптографию, также известную как криптография с открытым ключом (public key cryptography, PKC). PKC использует два ключа: открытый (публичный) и закрытый (приватный). Открытый ключ не является секретным и может обнародоваться и использоваться кем угодно, но закрытый ключ – это секретная информация, от которой зависит безопасность системы.
Интересное по теме: Неизвестная история человека, благодаря которому стало возможным шифрование каким мы его знаем
Шифрование и цифровые подписи – два главных применения PKC. Схемы шифрования и цифровых подписей полагаются на набор из трёх алгоритмов. Первый генерирует пару из открытого и закрытого ключа, второй генерирует шифротекст или подпись, а третий осуществляет расшифровку или верификацию. Если говорить о цифровых подписях, то алгоритм подписания требует закрытого ключа, известного только его владельцу, чтобы сгенерировать уникальную подпись. Подпись прикрепляется к сообщению так, что любой, у кого есть открытый ключ, сможет подтвердить её подлинность и верность.
Блокчейн
Блокчейн – это, несомненно, очень мощная технология. Он предоставляет консенсусный уровень, где организовываются и записываются события. Такая инфраструктура позволяет нам – пользователям – строить децентрализованные экономики и даже правительства. Как ни удивительно, криптография, необходимая для работы простейшего блокчейна, может быть основана исключительно на цифровых подписях. В контексте блокчейна приватные ключи представляют идентичность, а подписи – публичное заявление этой идентичности. Блокчейн упорядочивает заявления и проверяет их в соответствии с набором правил, которые, среди прочего, гарантируют, что подписи неподдельны и верны.
В сравнении с более традиционной криптографией, используемой в блокчейне, современный криптографический инструментарий включает ряд впечатляющих методов: доказательство с нулевым разглашением, гомоморфное шифрование, многостороннее вычисление и т. д. За последнее десятилетие исследования блокчейна сильно продвинули вперёд прикладную криптографию, включая недавние прорывы во всём вышеперечисленном.
Настоящая статья посвящена одному из таких прорывов – безопасным пороговым подписям (TSS).
Читать по теме: BLS-подписи: лучшая альтернатива подписям Шнорра
Многостороннее вычисление и пороговые подписи
Многостороннее вычисление (Multi-party computation, MPC) – это направление в криптографии, восходящее к знаковой работе Эндрю Яо, которой вот уже почти 40 лет. В MPC несколько сторон, которые не доверяют друг другу, пытаются совместно вычислить определённую функцию на основе их входных данных, при этом не раскрывая эти данные.
Допустим, n сотрудников компании хотят узнать, кто из них зарабатывает больше, не раскрывая фактический размер своей зарплаты. Здесь конфиденциальные входные данные – это зарплаты, а выход – имя сотрудника с самой высокой зарплатой. Если использовать MPC, то ни одна зарплата не будет раскрыта.
Два главных свойства MPC – это корректность и конфиденциальность:
Рассмотрим, как эти свойства применимы к распределённому созданию цифровых подписей с помощью MPC. Напомним, что в случае подписей имеется три шага:
Такое сочетание распределённой генерации ключей и распределённого подписания и называется схемой пороговой подписи (TSS).
Сочетание TSS с блокчейнами
Самый очевидный способ применения пороговых подписей в блокчейне – это изменить блокчейн-клиент так, чтобы он генерировал ключи и подписи с помощью TSS. Здесь под блокчейн-клиентом понимается набор команд, выполняемых полным узлом. На практике технология TSS позволяет все команды, связанные с приватными ключами, заменить распределёнными вычислениями.
Чтобы объяснить подробнее, для начала опишем, как создаются новые адреса в классическом блокчейне. Попросту говоря, создать новый адрес можно, сгенерировав приватный ключ и затем вычислив для него публичный ключ. Наконец, адрес в блокчейне получается из публичного ключа.
При использовании TSS у нас будет n участников, которые совместно вычисляют публичный ключ и у каждого из которых есть секретная доля приватного ключа (не раскрываемая другим участникам). Из публичного ключа можно получить адрес точно так же, как в традиционной системе, причём для блокчейна метод генерации ключа не имеет значения. Преимущество в том, что приватный ключ больше не является единой точкой отказа, потому что каждый участник держит лишь его часть.
Так же можно подписывать транзакции. В этом случае вместо того, чтобы транзакцию своим приватным ключом подписывала одна сторона, используется распределённая генерация подписи несколькими участниками. Каждый участник может предоставить действительную подпись, если достаточное их число поступает честно. Опять же, мы перешли от локального вычисления (единой точки отказа) к интерактивному.
Важно упомянуть, что распределённая генерация ключей может допускать разные структуры доступа: общее условие типа «t из n» сможет выдержать до t произвольных отказов в операциях, связанных с приватными ключами, не скомпрометировав безопасность.
TSS и мультиподписи
Некоторые блокчейны предлагают функционал TSS как встроенную или программируемую часть своего программного обеспечения. Мы называем это мультиподписями. Чтобы понять, в чём различие, можно рассматривать мультиподписи как TSS на прикладном уровне блокчейна.
Другими словами, мультиподписи и TSS, в сущности, имеют похожие цели, но TSS использует криптографию вне блокчейна (офчейн), а мультиподписи – в блокчейне (ончейн). Однако блокчейну нужен способ, чтобы зашифровать мультиподпись, что может навредить конфиденциальности, потому что структура доступа (число подписантов) доступна в блокчейне. Стоимость транзакции с мультиподписью выше, потому что информация о подписантах также должна передаваться в блокчейне.
В TSS информация о подписантах заключается в транзакцию, которая выглядит как обычная, что снижает стоимость и сохраняет конфиденциальность. С другой стороны, мультиподписи могут быть неинтерактивными, что избавляет от необходимости использовать сложный уровень коммуникации подписантов.
Основное различие в том, что мультиподписи зависят от конкретного блокчейна и для каждого блокчейна должны реализовываться заново, а в некоторых случаях и вовсе не поддерживаются. В то же время TSS полагается на чистую криптографию, поэтому поддержка всегда возможна.
Читайте интересное по теме: Подписи Шнорра и неизбежность конфиденциальности в Биткойне
TSS и схема разделения секрета Шамира
Схема разделения секрета Шамира (Shamir secret sharing scheme, SSSS) предоставляет способ распределённого хранения приватного ключа, так что когда он не используется, он хранится в нескольких местах. Между SSSS и TSS есть два различия:
Как можно видеть, в TSS приватный ключ (отвечающий за безопасность системы) вообще никогда не находится в одном месте.
Пороговые кошельки
Кошелёк, основанный на технологии TSS, немного отличается от традиционных криптовалютных кошельков. Как правило, традиционный кошелёк генерирует seed-фразу и использует её для детерминистического получения кошельков. Пользователь может затем использовать эту иерархическую детерминистическую (ИД) структуру, чтобы: 1) получить приватные ключи, соответствующие адресам кошелька, и подписывать ими транзакции; и 2) восстановить все ключи кошелька с помощью seed-фразы.
В пороговом кошельке всё сложнее. Хотя можно сгенерировать ИД-структуру, это должно происходить распределённым способом, с помощью отдельного MPC-протокола. Участники совместно решают, какой ключ будет использоваться следующим. Другими словами, у каждого участника есть своя seed-фраза. Seed-фразы генерируются отдельно и никогда не совмещаются, так что один участник не может получить из своей seed-фразы приватные ключи.
Кошельки на основе TSS также имеют полезную опцию безопасности: возможность ротации приватных ключей без изменения соответствующего публичного ключа и адреса в блокчейне. Ротация приватных ключей, также известная как проактивное разделение секрета, – это ещё один MPC-протокол, в котором в качестве входа используются доли секрета, а на выходе получается новый набор долей секрета. Старые доли секрета можно удалить и вместо них использовать новые.
Такая структура добавляет к безопасности временное измерение, то есть злоумышленник, чтобы атаковать пороговый кошелёк, должен одновременно находиться в нескольких местах. Объединение долей секрета до и после ротации не даст злоумышленнику дополнительного преимущества, если он хочет подделать подпись.
Недостаток такого кошелька в том, что отсутствие seed-фразы делает его несовместимым с кошельками с одним ключом. Поэтому важно учитывать, кто будет держать доли секрета.
Есть несколько возможных архитектур:
Первый метод избавляет пользователя от громоздких вычислений. Но, с другой стороны, поставщики услуг могут вступить в сговор (мы предполагаем, что одновременно не будет атаковано достаточное их число, хотя на практике это возможно) и похитить активы пользователя.
Второй метод даёт пользователю полный контроль, но затрудняет проведение транзакций, так как нужно, чтобы сразу несколько устройств были онлайн и проводили вычисления.
Третий вариант считается лучшим, так как он позволяет пользователю легко и быстро проводить транзакции, причём они не могут проводиться без его авторизации.
TSS и смарт-контракты
Исследователи нашли цифровым подписям множество применений, и некоторые из них на удивление нетривиальны. Как уже упоминалось, TSS – это криптографический примитив, способный значительно повысить безопасность. В контексте блокчейнов можно сказать, что криптографией на основе TSS можно заменить многие функциональные возможности. Над каркасом TSS можно надстраивать децентрализованные приложения, решения масштабирования второго уровня, атомарные свопы, перемешивание монет, механизмы наследования и многое другое. В конечном счёте это позволит заменить дорогие ончейн-операции со смарт-контрактами более дешёвыми и надёжными альтернативами.
Если привести конкретные примеры, то многоскачковая блокировка (Multi-Hop Locks) изобретательным образом использует двусторонние подписи и может служить альтернативой сети Lightning Биткойна с более безопасными и конфиденциальными платёжными каналами. ShareLock, пожалуй, самое дешёвое решение по перемешиванию монет для Эфириума, основанное на верификации лишь одной пороговой подписи.
Риски
В последние годы существенно возросло число реализаций TSS. Однако так как это всё ещё относительно новая технология, она имеет свои ограничения и проблемы. В сравнении с классической криптографией с открытым ключом протоколы TSS могут быть очень сложными, и они пока не протестированы в полевых условиях. Обычно TSS требует дополнительных, более слабых криптографических допущений в сравнении с простыми цифровыми подписями. Как следствие, обнаруживаются векторы атаки, которые не существовали в традиционных схемах. Для безопасной реализации TSS необходимо задействовать специалистов по защите информации и прикладной криптографии.
Но радует то, что существующие и новые реализации становятся надёжнее благодаря всё более качественной разработке, экспертной оценке, аудиту и совершенствованию алгоритмов.
В завершение
В настоящей статье мы представили основы схемы пороговой подписи (TSS) – любопытного криптографического примитива, способного существенно изменить то, как мы используем блокчейны.
Если вы хотите поэкспериментировать с реализациями TSS, то здесь можно найти код двустороннего кошелька для Binance Chain, или же можете попробовать кошелёк ZenGo, использующий гибридный метод, чтобы предоставить некастодиальное двустороннее решение.
Вы всегда можете поблагодарить переводчика за проделанную работу: BTC: 1BHr4jrPPVwdWRpFTekaD34EZ2vo9p8FoC ETH: 0xf45a9988c71363b717E48645A412D1eDa0342e7E