В этой статье, основанной на отчете Kraken Intelligence, мы представляем вниманию читателя подробный обзор обновления Taproot, того, как оно работает и почему важно для будущего Биткойна.
Многие называют Биткойн важнейшим изобретением со времен появления интернета в 1983 году. Но несмотря на произведенную революцию, Биткойн имеет определенные ограничения, до сих пор препятствовавшие его массовому внедрению, включая проблемы масштабируемости и конфиденциальности. Исторически оптимизация протокола Биткойна представляла собой непрерывный процесс изучения новых идей и достижения консенсуса в отношении них внутри сообщества. Однако достижение консенсуса является обременительным и нечастым делом, и среди обширной и разнообразной пользовательской базы Биткойна бывали значительные разногласия в отношении дальнейших путей развития Биткойна. За примером далеко ходить не надо: последним до Taproot обновлением Биткойна был софтфорк Segregated Witness (SegWit), приведший к расколу в сообществе и хардфорку, в котором был образован Bitcoin Cash (BCH).
Новое большое обновление Биткойна, известное как Taproot, активировано 14 ноября 2021 года и состоит из трех основных Bitcoin Improvement Proposals (BIP), реализующих несколько технических решений, повышающих уровень конфиденциальности, безопасности и масштабируемости сети. BIP340 (схема Шнорра) обновляет базовую криптографию Биткойна, интегрируя поддержку более легкой и безопасной схемы цифровой подписи Шнорра в дополнение к традиционно используемой в Биткойне ECDSA. BIP341 (taproot), основывается на обновлении SegWit и призвано повысить уровень конфиденциальности сети, снизить комиссии за транзакции и расширить возможности масштабирующих решений Биткойна, таких как Lightning Network. Наконец, BIP342 (tapscript), интегрирует реформированную версию скриптового языка Биткойна для обеспечения полноценной поддержки taproot-транзакций с подписями Шнорра и облегчения будущих обновлений Биткойна.
Вместе эти изменения позволят записям о стандартных транзакциях с односторонней (single-sig) подписью, multisig-транзакциях и сложных смарт-контрактах выглядеть в блокчейне неотличимо друг от друга. Таким образом, Taproot существенно повышает уровень конфиденциальности пользователей, масштабируемость сети и взаимозаменяемость всех биткойнов. Пользователи получают возможность выполнять транзакции с мультиподписями и создавать сложные смарт-контракты с той же эффективностью, низкими комиссиями и уровнем конфиденциальности, что и обычные single-sig транзакции. Taproot является, пожалуй, самым значимым обновлением Биткойна на сегодняшний день и задает основу для дальнейших инноваций и внедрения. Тот, кто разберется в его тонкостях, получит глубокое понимание того, что эта революционная технология может предложить миру. В этом материале, основанном на обзоре Kraken Intelligence, мы представляем вниманию читателя всесторонний анализ обновления Taproot, того, как оно работает и почему важно для будущего Биткойна.
Введение
Что такое Taproot
Taproot — это реализуемое посредством софтфорка обновление протокола Биткойна, объединяющее в себе ряд технических решений, которые позволят сделать биткойн-транзакции более приватными, гибкими и масштабируемыми. Taproot состоит из следующих трех предложений по улучшению Биткойна (BIP):
Традиционно в Биткойне использовалась схема цифровой подписи Elliptic Curve Digital Signature Algorithm (ECDSA), применение криптографии с открытым ключом для аутентификации транзакций.
BIP340, в дополнение к ECDSA, добавит в Биткойн поддержку схемы подписей Шнорра. В основе нее также лежит математическая структура, называемая эллиптической кривой. Эллиптические кривые из алгебраической геометрии применяются в различных криптографических системах с открытым ключом в качестве основы для одних из наиболее безопасных протоколов шифрования. Эллиптическая кривая состоит из всех точек, удовлетворяющих простому уравнению “y2 = x3 + ax + b”. Функции, определенные эллиптической кривой, легко выполняются, но их почти невозможно инвертировать.
Подробнее о математических основах криптографии Биткойна мы писали в следующих статьях:
На схеме ниже показано, что открытые ключи и цифровые подписи представляют собой точки на эллиптической кривой, хотя подпись точкой на эллиптической кривой не ограничивается. Если обе эти точки созданы из одного и того же закрытого ключа, то геометрическая связь между ними доказывает, что лицо, создавшее цифровую подпись, владеет также и открытым ключом. ECDSA, в сущности, представляет собой математический способ подтвердить право собственности на биткойны без предоставления доступа к самим биткойнам или любой другой частной информации.
Схема Шнорра имеет ряд важных преимуществ по сравнению с ECDSA: она более безопасна, непластична и способствует снижению комиссий за транзакции.
Тему подписей Шнорра мы раскрывали, в частности, в этих постах:
Схема Шнорра открыла возможность для внедрения BIP341 (taproot), то есть без ее реализации в Биткойне обновление Taproot было бы невозможно.
Добавляет в протокол Биткойна поддержку Taproot, решения, повышающего конфиденциальность биткойн-транзакций и использующего схему Шнорра для реализации Merklized Alternative Script Trees (MAST). MAST основывается на деревьях хешей (структуры, используемой для верификации и синхронизации данных) и повышает эффективность и приватность смарт-контрактов, позволяя раскрывать только те условия, что были выполнены, и сохраняя в секрете любые другие существовавшие условия.
Добавляет в протокол Биткойна поддержку Tapscript, обновленного скриптового языка, дополняющего схему подписи Шнорра и Taproot. Tapscript улучшает хеширование подписи для проверки taproot-скриптов, обеспечивает необходимую гибкость для расширения возможностей смарт-контрактов Биткойна и изменяет некоторые ограничения для требований к ресурсам, в том числе отменяя ограничение размера в 10 000 байт, существующее в исходных (legacy) скриптах. Tapscript обеспечивает механизм совместимости с будущими версиями, известный как «тегированные открытые ключи», упрощая для будущих софтфорков расширение опкодов проверки подписей новыми типами хешей подписи и другие возможные изменения.
В целом, одна из главных опций софтфорка Taproot состоит в том, чтобы сделать транзакции с многосторонней подписью и сложные смарт-контракты неотличимыми от простых транзакций за счет агрегирования ключей. В результате записи в блокчейне даже о самых сложных смарт-контрактах и об обычных транзакциях будут практически идентичны. Таким образом, используемый в Taproot метод агрегирования подписей может повысить конфиденциальность в том числе Lightning Network за счет того, что транзакции открытия и закрытия lightning-каналов будут выглядеть в блокчейне Биткойна неотличимо от обычных транзакций с односторонней подписью. Кроме того, Taproot способствует снижению комиссий за транзакции — прямому для транзакций с мультиподписью и косвенному для всех пользователей за счет того, что один и тот же объем спроса на подтверждение транзакций может быть удовлетворен с использованием меньшего пространства блока.
Как мы еще будем обсуждать далее в этом обзоре, важность агрегирования ключей не следует недооценивать, поскольку фактически это позволяет сложным сетям второго уровня на основе Биткойна создавать огромные (например, требующие более тысячи подписей) vault-контракты, которые прежде были просто нежизнеспособны.
См. также:
Подробнее о Lightning Network:
Истоки
Разработка Taproot началась почти четыре года назад после того, как бывший технический директор Blockstream и известный разработчик Bitcoin Core Gregory Maxwell предложил в январе 2018 года концепцию митигирования проблем масштабируемости, конфиденциальности и безопасности Биткойна. В сентябре 2019 биткойн-разработчик Pieter Wuille предложил реализовать Taproot в Bitcoin Core. Вскоре после этого обновление Taproot начало набирать обороты. В период с 3 ноября по 21 декабря 2019 года предложение было рассмотрено и протестировано 150 разработчиками.
Хроника активации
Консенсус по поводу обновления с поддержкой подавляющего большинства заинтересованных сторон был подтвержден 12 июня 2021, в конце третьего сигнального периода, на блоке 687 284. Четырнадцатого ноября 2021 года, на блоке 709 632, софтфорк Taproot был активирован.
Почему это важно
Обновления протокола происходят редко, потому что Биткойн — это итеративная технология, сопряженная с финансовыми рисками. Программный код любого обновления может содержать ошибки или приводить к непредвиденным последствиям. Достижение консенсуса сети в отношении обновлений обычно требует также, чтобы обновление было обратно совместимым и имело лишь незначительные компромиссы в отношении требовательности к ресурсам для программных клиентов биткойн-нод. Как следствие, разработчикам необходимо иметь достаточно времени для всестороннего тестирования кода предлагаемых обновлений.
Кроме того, ввиду децентрализованной природы Биткойна, для правильного выполнения обновления общих правил консенсуса необходима тщательная координация множества участников сети по всему миру. Вносить изменения в протокол Биткойна сложно, потому что у сети нет центрального органа управления, который мог бы самостоятельно решать, какие изменения целесообразно принять, а многие ключевые заинтересованные стороны часто расходятся во мнениях на этот счет.
В частности, SegWit, послуживший основой для появления Lightning Network, стал чрезвычайно спорным обновлением, поскольку ряд организаций попытался увязать эти изменения с предложением о хардфорке сети.
SegWit решал проблему пластичности транзакций и повышал масштабируемость Биткойна. Подробнее об этом можно прочесть, например, в этом посте, а здесь я хотел обратить внимание на то, что вопрос о методах масштабирования вызвал в сообществе Биткойна жаркие споры о том, нужно ли параллельно увеличить допустимый размер блоков, чтобы увеличить количество обрабатываемых транзакций, или это нанесет ущерб децентрализации сети, существенно повысив затраты на содержание ее полных узлов. Впоследствии эти дебаты вылились в полноценную «гражданскую войну» в сообществе и привели к хардфорку, в результате которого был создан Bitcoin Cash — форк для тех, кто хотел версию Биткойна с бо́льшим размером блоков.
В отличие от SegWit, одноименного с Taproot хардфорка никто навязать не пытался, поддержка со стороны майнеров была достаточно значительной и конфликтов в сообществе это предложение практически не вызвало, подразумевая, что комьюнити, в целом, согласно с тем, что Taproot является существенным улучшением для Биткойна. Сложность представлял выбор оптимального метода активации, с учетом опыта предыдущего обновления.
Хотя это может показаться плавным и поступательным улучшением, Taproot радикально меняет Биткойн и его возможности, значительно улучшая его конфиденциальность, делая его расчетные единицы более взаимозаменяемыми, улучшая масштабируемость сети и задавая основу для более легкого развертывания будущих изменений. На высоком уровне Taproot повышает эффективность Биткойна как средства обмена, увеличивая его пропускную способность, модернизируя базовую криптографию, обеспечивающую безопасность сети, и вдохновляя больше разработчиков на создание новых решений на основе Биткойна, включая, среди прочего, возможность создания сложных DeFi смарт-контрактов. В конечном счете Taproot будет способствовать улучшению пользовательского опыта при взаимодействии с Биткойном и ускорит развитие связанных с ним инноваций.
Как работают биткойн-транзакции
Для того чтобы лучше понять, какие именно изменения вносит Taproot и как они будут работать, нужно сперва получить фундаментальное понимание того, как в целом функционируют биткойн-транзакции. Те, кому эта тема хорошо знакома, могут смело переходить к следующей части.
Криптография с открытым ключом
Биткойн-кошельки напоминают банковские счета в том отношении, что для доступа к хранящимся в них средствах необходимо знать «номер счета» и «пароль». Когда пользователь создает кошелек, он случайным образом генерирует уникальную пару криптографических ключей, состоящую из одного открытого и одного закрытого ключей, необходимых для отправки и получения биткойнов. Открытый ключ действует как «номер счета», а закрытый — как «пароль». Такая схема называется криптографией с открытым ключом и ее появление в 1976 году заложило основу для создания интернета, а теперь и криптоактивов.
Новичкам я рекомендую ознакомиться с такими статьями по теме:
Здесь же, в дополнение к этим статьям и, возможно, несколько более предметной иллюстрации, я перечислю 4 основных компонента биткойн-кошелька.
Внимание: все значения ниже приведены исключительно в иллюстративных целях; пожалуйста, не отправляйте ничего на этот кошелек и не пытайтесь использовать его как собственный!
Компоненты биткойн-кошелька
- Seed
Пользование любым биткойн-кошельком начинается с seed-фразы. Обычно она представляет собой список из 12–24 слов, которые можно использовать для резервного копирования и восстановления кошелька. Любой, кто знает seed-значение для вашего биткойн-кошелька, может вывести с него средства, поэтому крайне важно держать его втайне и желательно не хранить на устройстве с открытым доступом и подключением к интернету.
Пример seed-фразы:
valley pulp iron unique pen tired energy crash topic business happy feel
Из этого seed-значения кошелек генерирует открытый и закрытый ключи. Закрытый ключ — это случайным образом сгенерированное большое число, используемое как пароль от кошелька при использовании биткойнов. Однако это число настолько велико, что записывается в шестнадцатеричном формате (комбинация букв A–F и цифр 1–9), чтобы сделать его более компактным и удобным для использования. На основе закрытого ключа можно создать уникальную цифровую подпись, используемую для перевода средств на хранение в другой цифровой кошелек.
Пример закрытого ключа Биткойна:
10d05ad23efa7e3962bab3954b353f6ab00ecf865c28b437ccdb74ab72d4f87b
Открытый ключ Биткойна — это шестнадцатеричное число, полученное из закрытого ключа. Обычно открытый ключ используется как номер счета для получения биткойнов.
Пример открытого ключа Биткойна:
0292e91a485dc4d817693545305eca83fa19d5ee1d3bbd9bbc5351e65ddca3e0f3
Биткойн-кошелек создает адреса путем хеширования открытого ключа — чтобы его сократить и несколько облегчить использование. Хеш-функция принимает данные открытого ключа, скрембирует их и возвращает уникальный сокращенный результат. Это выходное значение действует как цифровой отпечаток для данных открытого ключа, переданных в хеш-функцию. Адрес кошелька можно передавать другим пользователям для «получения» биткойнов.
Пример биткойн-адреса:
19GJ727x4TQ74WWb8WpGQUAapX38wwV1iD
Модель непотраченных выходов (UTXO) Биткойна
«Определим электронную монету как последовательность цифровых подписей. Очередной владелец отправляет монету следующему, подписывая хэш предыдущей транзакции и публичный ключ будущего владельца и присоединяя эту информацию к монете. Получатель может проверить каждую подпись, чтобы подтвердить корректность всей цепочки владельцев», —
Сатоши Накамото объясняет UTXO-модель в уайтпейпер Биткойна (2008).
UTXO — это аббревиатура от Unspent Transaction Output (непотраченный выход транзакции). Биткойн использует модель непотраченных выходов для распределения цифровых «монет» между пользователями. Другими словами, UTXO-модель для Биткойна — это способ организовать блокчейн таким образом, чтобы пользователи не могли потратить одни и те же монеты дважды. К слову, именно в решении проблемы двойной траты во многом заключалась революционность технологии Биткойна.
По сути, каждый UTXO — это количество биткойнов, привязанных по адресу к определенному открытому ключу. Биткойн-транзакции состоят из входов и выходов; входы — это UTXO, расходуемые (и разрушаемые) в этой транзакции, а выходы — это новые UTXO (с привязкой к адресу получателя), создаваемые в этой транзакции. Поскольку в качестве входов транзакции можно использовать только непотраченные выходы, каждый UTXO можно потратить только один раз. Транзакцию, в которой отправитель пытается расходовать выход, уже использованный в другой транзакции, узлы (ноды) сети отклонят как недействительную.
За подробным описанием модели непотраченных выходов я рекомендую обратиться к этой статье:
А здесь я ограничусь примером стандартной биткойн-транзакции:
- Алиса задолжала Борису ₿0,02 за ремонт машины.
- Борис отправляет Алисе адрес своего кошелька для получения платежа.
- Алиса с помощью своего закрытого ключа создает цифровую подпись, чтобы разблокировать и отправить ₿0,02 из UTXO, контролируемых ее кошельком, на адрес кошелька Бориса.
- Предположим, что в кошельке Алисы есть только два UTXO стоимостью ₿0,01 и ₿0,015. В таком случае оба этих UTXO используются в качестве входов транзакции.
- В качестве выходов транзакции также создаются два новых UTXO: один, на ₿0,02, привязывается к кошельку Бориса, а второй, на ₿0,005, Алисе получает в качестве сдачи.
Биткойн-скрипты
UTXO кодируются на Bitcoin Script, языке программирования с преднамеренными ограничениями, созданном для описания правил расходования UTXO для программных клиентов Биткойна. При отправке транзакции пользователи применяют определенные блокирующие скрипты к каждому из создаваемых в этой транзакции UTXO. Получатель, когда решит потратить эти UTXO, должен будет выполнить разблокирующий скрипт, отвечающий заданным условиям.
Скрипты включают два элемента:
Данные
Любая информация, необходимая для выполнения транзакции — например, цифровая подпись и открытый ключ.
Коды операций (опкоды)
Это простые функции (например, команды), оперирующие данными скрипта. Коды операций определяют инструкции, записываемые с каждой сложной транзакцией, что позволяет пользователям устанавливать различные условия расходования для создаваемых в транзакции UTXO.
Когда узлы сети подтверждают, что полный скрипт валиден (т. е. выполняются все обозначенные условия блокировки и разблокировки выходов), UTXO разблокируются и могут быть потрачены. Проверка подписи для подтверждения владения UTXO требуется в каждой транзакции, а некоторые возможные дополнительные условия расхода включают:
Для каждой транзакции можно использовать несколько условий, создавая таким образом сложные смарт-контракты. Например, когда Алиса отправляет Борису ₿0,02 на ремонт автомобиля, Борис может применить к этим UTXO дополнительные условия расходования (мультиподпись или временную блокировку), прежде чем сможет их потратить. Существует множество различных блокирующих скриптов с различными комбинациями опкодов, но большинство узлов полагаются на несколько «стандартных» скриптов: Pay-to-Public Key Hash (P2PKH), Pay-to-Script Hash (P2SH) и SegWit-версии этих скриптов — Pay-to-Witness Public Key Hash (P2WPKH) и Pay-to-Witness Script Hash (P2WSH). Описания для каждого из них доступны по ссылкам.
Pay-to-Public-Key Hash (P2PKH)
В большинстве стандартных биткойн-транзакций используется P2PKH-скрипт для привязки биткойнов к хешу (т. е. сжатой версии) открытого ключа. Базовые транзакции, отправляемые на адрес, содержат P2PKH-скрипт, который разрешается путем отправки открытого ключа и соответствующей ему цифровой подписи. Однако, поскольку в P2PKH все условия расходования публично раскрываются в блокчейне, сложные транзакции с использованием различных опкодов требуют более сложных сценариев для сохранения конфиденциальности пользователей.
Pay-to-Script Hash (P2SH)
P2SH — это стандартизированный смарт-контракт Биткойна, более гибкий, чем P2PKH, поскольку позволяет пользователям создавать произвольные скрипты и транзакции с мультиподписью. В сложных транзакциях с различными опкодами обычно используют P2SH для сохранения конфиденциальности, поскольку условия расходования транзакции изначально не видны стороннему наблюдателю. В отличие от P2PKH-скрипта, блокирующего биткойны по хешу открытого ключа, P2SH блокирует биткойны по хешу самого скрипта. Это значит, что заблокированные с помощью P2SH выходы могут быть только с предоставлением хеша скрипта. И поскольку изначально в блокчейн включается только хеш скрипта, условия расходования UTXO известны только их новому владельцу.
Хотя изначально условия расходования выходов в P2SH-скриптах скрыты от стороннего наблюдателя, весь скрипт со всеми условиями расходования раскрывается при расходовании UTXO новым владельцем. Кроме того, P2SH требует знания открытых ключей всех участников multisig-транзакции, что неэффективно. Поскольку начальный хеш скрипта может использоваться для подтверждения валидности скрипта, такое раскрытие всех правил расходования — это «фича, а не баг». Тем не менее это связано с использованием больших объемов данных и нарушением конфиденциальности.
Блокчейн-аналитики на основе ончейн-следа таких скриптов могут получать приватную информацию о пользователях, такую как тип кошелька, использованного для выполнения транзакции. Кроме того, условия таких скриптов, будучи открытыми, позволяют наблюдателям легко отличать стандартные P2PKH-транзакции от транзакций с мультиподписью. В худшем сценарии предприимчивый злоумышленник может даже использовать эту личную информацию для обмана пользователей или взлома их кошельков. В дополнение ко всему такой избыток данных опкодов препятствует масштабируемости сети, потребляя, больше пространства блоков.
P2SH-транзакции легко отличимы остальных, поскольку для них, согласно BIP13, требуется другой тип адресов, начинающихся с «3». Это не только позволяет легко идентифицировать P2SH-транзакции, но также сужает круг поиска вероятных участников multisig-транзакции. P2SH не выглядит удачным долгосрочным решением с точки зрения операционной эффективности из-за имеющихся проблем с конфиденциальностью и безопасностью.
Taproot
BIP340 (схемы Шнорра)
Биткойн использует для передачи монет цифровые подписи ECDSA. Однако первая фаза софтфорка Taproot позволит, в дополнение к ECDSA, использовать подписи Шнорра. В обеих схемах используется эллиптическая криптография, использующая для шифрования данных эллиптические кривые, так что подлинность зашифрованных данных легко проверяется, но к ним практически невозможно получить доступ без «ключа дешифрования». Для контекста, исследование Universal Security (PDF) показало, что взлом стандартного 228-битного ключа эллиптической криптографии потребует больше энергии, чем для доведения до кипения всей воды на Земле.
Биткойн использует эллиптическую криптографию для подтверждения прав собственности на закрытые ключи посредством цифровой подписи, без раскрытия закрытого ключа. Хотя основы криптографии с открытым ключом практически не менялись с самого момента ее изобретения, сегодня криптографам всего мира доступны десятки схем подписи с открытым исходным кодом.
Реализация поддержки подписей Шнорра не только была необходимым условием для реализации Taproot, криптографы и ветераны биткойн-комьюнити все сходятся в том, что схема Шнорра превосходит ECDSA почти во всех отношениях и практически без каких-либо оговорок. Некоторые из преимуществ схемы Шнорра по сравнению с ECDSA включают:
Самое значительное преимущество схемы Шнорра перед ECDSA заключается в ее линейности, являющейся основой для смарт-контрактов более высокого уровня, более эффективных и конфиденциальных. Эта особенность позволяет нескольким сторонам multisig-транзакции объединять свои открытые ключи в единую подпись, действительную для суммы этих открытых ключей. Это называется агрегированием ключей. Объединение открытых ключей и подписей в «пороговые открытые ключи» и «пороговые подписи» сокращает процесс проверки транзакций. А именно, сети нужно проверять только один ключ вместо нескольких, что значительно уменьшает размер multisig-транзакций и делает их неотличимыми в блокчейне от любой обычной транзакции.
В дополнение к ускорению проверки за счет линейности, схема подписи также модифицирует код операции для Tapscript (OP_CHECKSIG) на ожидание подписи Шнорра вместо ECDSA. Кроме того, транзакции Шнорра заменят семейство опкодов ECDSA, использовавшееся для проверки multisig-транзакций (OP_CHECKMULTISIG и OP_CHECKMULTISIGVERIFY), на один более эффективный код операции (OP_CHECKSIGADD). Новый опкод повышает эффективность проверки подписи, позволяя проверять транзакции пакетами, а не индивидуально, и требует меньше опкодов для multisig-транзакций. В результате пользователи Биткойна получат более эффективное использование пространства блоков, что позволит сети обрабатывать больше транзакций в секунду.
Подписи и открытые ключи Шнорра примерно на 11% и 3% меньше, чем подписи и открытые ключи ECDSA соответственно. Сравнительная легкость схемы Шнорра позволяет сети освободить пространство блоков и эффективнее масштабироваться. Это способствует снижению комиссий за транзакции для пользователей Биткойна в виду снижения нагрузки на сеть.
Подписи Шнорра не вызывают проблем со стандартизацией, поскольку они совместимы с закрытыми ключами ECDSA. То есть у тех, кто использует схему Шнорра, не возникнет проблем с тем, что они не смогут выполнить транзакцию из-за того, что кошелек получателя был создан с помощью ECDSA, и наоборот. Обновления сети Биткойна, принятые участниками сети, должны быть обратно совместимыми, потому что биржам, кастодиальным сервисам и операторам кошельков потребуется какое-то время на то, чтобы реализовать необходимые изменения. Если бы BIP340 (шнорр) не было обратно совместимым, операторам сервисов было бы трудно и, возможно, даже нецелесообразно внедрять его поддержку, потому что это усложнило бы использование Биткойна. Например, отправителям транзакций пришлось бы разбираться с тем, какое программное обеспечение используют получатели, чтобы избежать случайной потери монет. К счастью, BIP340 решает (а точнее просто не создает) эту проблему, позволяя подписывать транзакции ECDSA-ключам.
Подписи Шнорра доказуемо безопасны, поскольку содержат легко проверяемое подтверждение безопасности. Напротив, надежность ECDSA-подписей подтверждается только на практике. Хотя ни одна из атак не позволила успешно взломать ECDSA, формального доказательства безопасности этой схемы шифрования еще не представлено.
Давид Пуаншеваль (он же Дэвид Пойнтшеваль) и Жак Стер доказали в статье (PDF) 1998 года, что подписи Шнорра невозможно подделать в атаках с выбором сообщений (например, SUF-CMA). И это гарантирует, что единственный способ взломать подписи Шнорра — это решить практически нерешаемое математическое уравнение, известное как задача дискретного логарифмирования в группе точек эллиптической кривой (elliptic curve discrete logarithm problem, или ECDLP). С другой стороны, лучшие результаты для подтверждения безопасности ECDSA основываются на веских и проверенных на практике, но все-таки допущениях, вместо строгих доказательств.
Хотя подписи Шнорра имеют много преимуществ по сравнению с ECDSA, эта схема не является новым словом в криптографии. Немецкий ученый-криптограф Клаус-Петер Шнорр изобрел эту схему, будучи профессором Франкфуртского университета имени Гёте в 1980-х годах. Однако Шнорр ревниво относился к своему изобретению. Криптограф запатентовал свою схему цифровой подписи, ограничив ее использование и замедлив дальнейшие инновации. Срок действия патента истек в 2008 году, когда Сатоши Накамото изобрел Биткойн. Поскольку Шнорр защищал свою схему подписи патентом почти 20 лет, большинство инноваций было связано с открытой и доступной для свободного использования схемой ECDSA. На тот момент подписи Шнорра не были использованы, стандартизированы и протестированы в реальной среде для защиты глобальной денежной системы, такой как Биткойн. В общем, Сатоши в 2008 году предпочел схеме Шнорра ECDSA по нескольким причинам:
В отличие от схемы Шнорра, ECDSA не была обременена патентами или авторскими правами, а значит, не было никаких юридических ограничений на ее использование в сети Биткойна.
Поскольку ECDSA не была защищена патентом или авторским правом, она уже была знакома и привычна большинству криптографов. Кроме того, на тот момент существовало консенсусное мнение о том, что, поскольку безопасность ECDSA в достаточной степени подтверждена годами тщательного тестирования, она, вероятно, также обладает более длительным оставшимся сроком службы.
ECDSA была частью OpenSSL, набора инструментов шифрования с открытым исходным кодом, разработанных шифропанками для повышения конфиденциальности онлайн-коммуникаций. OpenSSL изначально сделал реализацию ECDSA в Биткойне относительно простым процессом.
Несмотря на известные недостатки ECDSA и регулярную критику в ее адрес со стороны криптографов, это была открытая, легкая, надежная и заслуживающая доверия схема подписи. По сравнению с другими популярными альтернативами, ECDSA была оптимальным выбором для цифровых денег, поскольку требовала меньше вычислительных ресурсов, имела меньшую длину ключа, обеспечивала примерно такой же уровень безопасности и соответствовала отраслевым стандартам. При реализации в Биткойне в ECDSA с самого начала вносились некоторые улучшения. Так, Pieter Wuille с коллегами разработал специфичную для Биткойна эллиптическую кривую (известную как secp256k1), сделавшую подписи более быстрыми и легкими. Тем не менее ECDSA неизбежно обладает некоторыми недостатками, и это оправдывает модернизацию всей системы.
BIP341 (taproot)
Если BIP340 подробно описывает реализацию в Биткойне схемы Шнорра, то BIP341 описывает правила для нового типа выходов, P2TR (Pay-to-Taproot). P2TR — это обновление SegWit версии 0 (т. е. P2WPKH и P2WSH) до версии 1, позволяющей использовать подписи Шнорра. BIP341 направлено на повышение конфиденциальности, эффективности и гибкости скриптов Биткойна без ущерба для безопасности сети.
BIP341 использует подписи Шнорра для реализации более сложных типов транзакций, которые при этом выглядят в блокчейне неотличимо от стандартных транзакций с односторонней (single-sig) подписью:
Не-P2TR транзакции, такие как P2PKH и P2SH, при выполнении раскрывают все возможные условия выполнения транзакции, включая те, что не были задействованы. Как уже упоминалось выше, это увеличивает нагрузку на сеть и значительно снижает конфиденциальность пользователей. Taproot позволяет теоретически масштабировать любой P2TR смарт-контракт Биткойна до размеров, например, децентрализованной автономной организации (DAO) c 10 000+ участников и тысячами заблокированных в контракте биткойнов, при этом выглядеть и стоить этот контракт будет как стандартная транзакция с односторонней подписью.
Представьте, к примеру, что на входе в бар нужно подтвердить свой возраст по некоему удостоверяющему личность ID. Однако при этом будет раскрыта и другая личная информация, совершенно не имеющая отношения к ситуации: домашний адрес, ИНН, статус донора органов, острота зрения и т. д. Думаю, что большинство людей согласится с тем, что было бы лучше подтвердить на входе только возраст, не раскрывая всего остального. С биткойн-транзакциями старого типа (legacy) ситуация выглядит примерно так же: для подтверждения транзакции важно только то из возможных условий расхода, что было выполнено отправителем, но публикуются все. Taproot решает эту проблему приватности с помощью «меркелизованных альтернативных деревьев скриптов» (Merkelized Alternative Script Tree, или MAST).
Чтобы лучше прочувствовать пользу от внедрения Taproot, вспомните, как 21 апреля 2021 года средняя комиссия за биткойн-транзакцию достигла рекордного уровня в $62,79. Очередь транзакций в мемпуле Биткойна выросла до максимальных значений с пиковых уровней ралли 2017 года. Такой всплеск роста в комиссиях за транзакции в итоге обернулся падением цены биткойна на 37% за пять дней. Если бы taproot был активирован и широко использовался уже тогда, то мемпул, вероятно, был бы перегружен в меньшей степени, а комиссии за транзакции были бы ниже; потенциально это могло позволить разумно совершать любые транзакции независимо от суммы перевода.
MAST (Merklized Alternative Script Trees)
BIP341 реализует в Биткойне поддержку MAST, использующего деревья хешей для решения проблемы приватности P2SH и P2PKH, раскрывающих при выполнении транзакции все условия расхода ее выходов, в том числе незадействованные. Ральф Меркл, один из изобретателей криптографии с открытым ключом и тот, кто придумал криптографическое хеширование, запатентовал концепцию деревьев Меркла (называемых также деревьями хешей) на срок с 1979 по 2002 г. Дерево хешей — это эффективный способ доказать наличие в наборе некоторых данных без знания всего набора. Дерево хешей представляет собой древовидную структуру данных, в которой каждый «листовой» узел содержит хеш блока данных, а каждый «нелистовой узел» содержит хеш своих дочерних узлов. Листовые узлы могут иметь строго одного «родителя» и ни одного дочернего узла, то есть это всегда последний элемент каждой «ветви». Нелистовые узлы имеют двух родителей и могут иметь любое количество дочерних узлов.
Деревья хешей используются основными блокчейнами — Bitcoin и Ethereum — для эффективной и безопасной проверки содержимого больших структур данных, их целостности и согласованности, а также для синхронизации данных. Крупнейшие сети отдают предпочтение именно деревьям хешей перед другими структурами данных, потому что это:
MAST требует раскрытия только выполненного условия расхода UTXO, вместо раскрытия всего скрипта, включая все неактивированные условия. Такое решение минимизирует количество данных опкодов, раскрываемых ончейн при создании или при расходе UTXO, одновременно сокращая размер каждой транзакции, снижая комиссии и повышая уровень конфиденциальности пользователей. Скрипты организуются в структуру данных MAST для облегчения доступа. В основе MAST лежит идея о том, что даже самые сложные смарт-контракты с многочисленными участниками могут включать одно условие, при выполнении которого все участники соглашаются с выполнением транзакции.
MAST позволяет хешировать каждое в отдельности условие расхода набора UTXO, вместо того чтобы объединять их в один хеш, и выстраивать из этих хешей древовидную структуру. Из этого дерева хешей затем получается единый корневой хеш для всего дерева, который «блокирует» UTXO. При раскрытии каких-либо данных, корневой хеш и путь по дереву можно использовать для проверки того, были ли эти данные включены в дерево хешей, в то время как все остальные условия, которые могут содержаться в дереве хешей, остаются скрытыми.
MAST повышает уровень приватности и эффективнее использует данные, чем P2SH смарт-контракты. А подписи Шнорра позволяют этим MAST-структурам быть неотличимыми в блокчейне от стандартных биткойн-транзакций. Как видно на рисунке 7 ниже, объем места, занимаемого в блоке multisig-транзакцией, пропорционален количеству ее подписантов. Однако при использовании P2TR multisig-транзакции имеют фиксированный размер, благодаря чему они могут иметь практически любое число подписантов и при этом «весить», выглядеть и стоить ровно так же, как P2TR-транзакции с односторонней подписью.
P2TR (Pay-to-Taproot)
Как уже сказано выше, BIP341 (taproot) реализует в Биткойне поддержку нового типа, называемого Pay-to-Taproot (P2TR). Этот тип скрипта позволяет расходовать выходы, используя одну подпись Шнорра для расхода по ключу либо раскрыв и удовлетворив требования одного из скриптов в дереве хешей. P2TR скрипт объединяет в себе две традиционно бывшие раздельными политики расходования: P2SH и P2PK, которая похожа на P2PKH, однако отличается тем, что привязывает биткойны к самому открытому ключу, а не к его хешу. В результате все P2TR-выходы возможно потратить либо по открытому ключу, либо по скрипту, и они становятся неотличимыми друг от друга. P2TR — это нативный вид выходов SegWit v1.
Подробнее о Pay-to-Taproot (P2TR), включая наглядную схему, можно прочесть в глоссарии терминов. А чтобы лучше понять потенциальное влияние taproot, будет полезно также взглянуть на самый распространенный способ трансфера капитала в сети Биткойна: транзакции с односторонней подписью.
Стоимость создания и расходования taproot-выхода с односторонней подписью (SegWit v1) примерно на 5% выше, чем при использовании P2WPKH (SegWit v0). Однако затраты на создание taproot-выхода практически равны затратам на создание P2WSH (multisig) выхода, при этом расходовать taproot-выход с односторонней подписью на 40% дешевле, чем P2WPKH. То есть хотя P2WPKH несколько эффективнее, чем P2TR, для транзакций с односторонней подписью, P2TR позволяет транзакциям с мультиподписью выглядеть неотличимо от стандартных single-sig транзакций.
BIP342 (tapscript)
Третья фаза софтфорка, называемая Tapscript (BIP342), определяет небольшие изменения в скриптовом языке Биткойна для использования его с P2TR-транзакциями. Как уже говорилось выше, традиционный скриптовый язык Биткойна, называемый просто Script, используется для определения политик расходования цифровых «монет». Так же и Tapscript определяет семантику условий расходования для Taproot, делая подписи Шнорра и технологию Taproot доступными для пользователей.
Как обновленная версия языка Bitcoin Script, Tapscript облегчает введение новых функций и основывается на возможности пакетной проверки подписей Шнорра. В частности, Tapscript улучшает хеширование подписей для проверки taproot-скриптов, добавляет новые коды операций, позволяющие пользователям создавать более сложные смарт-контракты, и изменяет некоторые ограничения для требований к ресурсам, в том числе удаляя ограничение размера данных в 10 000 байт и лимит на количество опкодов в транзакции. Кроме того, Tapscript делит большую часть опкодов с legacy (ECDSA) и segwit транзакциями, за несколькими исключениями:
Хотя Tapscript может показаться лишь небольшим подспорьем для реализации поддержки схем Шнорра и Taproot, это важная часть пазла. Традиционно проверка подписи являлась самой ресурсоемкой операцией, поскольку подписи проверяются по отдельности. Введение пакетной проверки подписей Шнорра позволяет Биткойну реализовать улучшения эффективности, открываемые реализацией подписей Шнорра и Taproot. А новый уровень гибкости смарт-контрактов Биткойна, благодаря Taproot, позволяет создавать более сложные контракты с многосторонней подписью и открывает возможности для создания на основе Биткойна децентрализованных автономных организаций (DAO) и прочих DeFi-приложений.
Влияние Taproot
Будучи софтфорком, Taproot обладает обратной совместимостью со старыми версиями ПО и может проверять все старые типы транзакций, однако те пользователи, кто хочет проверять taproot-транзакции, должны обновить программные клиенты своих нод до последней версии Bitcoin Core.
Поскольку большинство операторов кошельков продолжат и после активации Taproot использовать ECDSA из-за ее распространения и стандартизации, все возможности Taproot не будут раскрыты сразу. Кроме того, блоки по-прежнему будут содержать транзакции как с подписями Шнорра, так и ECDSA, что ограничивает возможности для использования преимуществ пакетной проверки в краткосрочной перспективе. Но со временем более широкое распространение этой технологии произойдет и большинство транзакций будут использовать Taproot, даже если пользователь не будет об этом знать. Тем не менее в одночасье полное внедрение реализовано не будет, и отдельные пользователи, по-видимому, начнут использовать Taproot раньше бизнесов и организаций.
Поскольку Taproot находился в разработке уже многие годы, некоторые участники рынка утверждают, что его влияние уже в полной мере отражено в цене BTC. Другие по-прежнему ожидают, что активация Taproot станет триггером для сильной волны роста рынка, пусть и с некоторым лагом от даты активации. На самом деле, наиболее вероятно, что в краткосрочной и среднесрочной перспективе на цену будут влиять другие факторы, а влияние Taproot не окажет выраженного влияния на цену в ближайшие годы.
Но вне зависимости от краткосрочных колебаний курса, такое обновление технологии значительно повышает привлекательность Биткойна для создания на его основе DeFi-протоколов, что может привлечь дополнительный спрос на ограниченный ресурс доступных для покупки цифровых монет. В частности, агрегирование ключей позволяет Биткойну конкурировать с блокчейнами, обладающими более высокой пропускной способностью, такими как Ethereum, являющийся сегодня основной платформой размещения DeFi-проектов. В конечном счете Taproot потенциально открывает возможности для создания на основе Биткойна новых DeFi-сетей (сайдчейнов) — таких как Sovryn, Thorchain или Portal — путем открытия vault-контрактов с многосторонней (например, с 1000+ участников) подписью, блокирующих биткойны для использования их в сайдчейне и сто́ящие при этом как стандартная транзакция с односторонней подписью. До Taproot реализация подобных сайдчейнов с таким количеством подписантов была бы непомерно дорогостоящей.
Поскольку большие multisig смарт-контракты с сотнями или даже тысячами подписантов до Taproot стоили слишком дорого, Биткойн до сих пор не вызывал особого интереса со стороны DeFi-протоколов. По данным DeFi Prime, на Ethereum размещается более 64% существующих DeFi-проектов, в то время как на Биткойне — около 7,5%.
Кроме того, segwit транзакции и lightning-каналы получат большее распространение теперь, когда станет доступен значительно лучший вариант. Впрочем, измерить это будет не так просто, поскольку транзакции открытия и закрытия каналов в случае использования Taproot будут неотличимы от обычных taproot-транзакций.
Наконец, Taproot обладает потенциалом создать сильный рынок комиссий для майнеров после того, как около 2140 года будет добыт последний биткойн. Эта теория предполагает, что в случае существенного спроса на конфиденциальные транзакции пользователи могут захотеть принимать пассивное участие в CoinJoin-транзакциях, в которых балансы их кошельков будут объединяться в одну транзакцию с несколькими отправителями, увеличивая таким образом «множество анонимности». В случае дальнейшего роста внедрения комиссии за ончейн-транзакции могут вырасти, что будет способствовать сохранению спроса на майнинг даже после выпуска последнего биткойна. В любом случае Taproot одним выстрелом убивает двух зайцев, повышая жизнеспособность Биткойна и как средства сбережения, и как средства обмена (оба этих варианта использования оспаривались критиками из-за проблем с масштабируемостью и крайне нестабильной рыночной цены).
Заключение
Taproot — это важнейшее обновление для Биткойна, оптимизирующее масштабируемость сети, конфиденциальность транзакций и расширяющее функциональность смарт-контрактов. Подписи Шнорра (BIP340) изменяют основную криптографию Биткойна, позволяя агрегировать ключи и подписи, делая транзакции с мультиподписью неотличимыми в блокчейне от стандартных транзакций с односторонней подписью. Между тем Taproot (BIP341) опирается на схему Шнорра для создания обновленного типа SegWit-транзакций с инструкциями по расходу на основе Taproot, подписей Шнорра и MAST; это позволяет создавать более сложные условия расходования и сокращает объем раскрываемой в блокчейне информации об этих условиях. Наконец, Tapscript (BIP342) позволяет обновленной версии скриптового языка Биткойна интегрировать новые условия расходования, которые стали возможны с активацией Taproot, и упрощает реализацию будущих обновлений сети. Tapscript не только интегрирует в Биткойн новые технологические решения, но также повышает конфиденциальность и эффективность существующих решений, таких как SegWit и Lightning Network. Эти новые решения обладают потенциалом значительно повысить пропускную способность сети и привлечь в Биткойн новых пользователей, но для реализации этого потенциала может потребоваться значительная степень внедрения и пользовательского принятия.
Массовое распространение Биткойна, все еще является спорным вопросом и не в последнюю очередь зависит от качества гарантий конфиденциальности и способности к масштабированию, а это означает, что потребность в лучших решениях для обеспечения приватности и масштабируемости будет расти в долгосрочной перспективе. И благодаря техническим решениям, реализованным в софтфорке Taproot, Биткойн сегодня на шаг — или даже на несколько шагов — ближе к решению этих важнейших проблем.
Это обновление важно, потому что, несмотря на существование и готовность к реализации многих зрелых криптографических механизмов обеспечения конфиденциальности, как правило, они сопряжены со значительными компромиссами, с которыми не может согласиться большинство заинтересованных сторон. Taproot же, напротив, снискал практически идеальный консенсус, поскольку не несет в себе никаких существенных компромиссов. Совместно Подписи Шнорра, Taproot и TapScript принципиально расширяют возможности пользователей и без преувеличения открывают новую эпоху в развитии Биткойна.
БитНовости отказываются от ответственности за любые инвестиционные рекомендации, которые могут содержаться в данной статье. Все высказанные суждения выражают исключительно личное мнения автора и респондентов. Любые действия, связанные с инвестициями и торговлей на крипторынках, сопряжены с риском потери инвестируемых средств. На основании предоставленных данных, вы принимаете инвестиционные решения взвешенно, ответственно и на свой страх и риск.