Их не видно, но они есть: как будут выглядеть замаскированные смарт-контракты в блокчейне биткоина?

Их не видно, но они есть: как будут выглядеть замаскированные смарт-контракты в блокчейне биткоина?

На прошлой конференции Scaling Bitcoin в Стэнфорде, которая состоялась в ноябре 2017 года, глава исследований Blockstream Эндрю Поэлстра описал концепцию «бесскриптовых скриптов», которые разгрузят блокчейн биткоина, убрав из него смарт-контракты и выполняя их по принципу (почти) обычных транзакций. Как это будет работать, разбирались в нашем материале.

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

Genesis

Концепцию смарт-контрактов, которые выполняют транзакцию при соблюдении определенных условий, впервые описал известный криптограф и ученый в области информатики Ник Сабо в 1994 году. Впоследствии, с приходом криптовалют, его идеи были модифицированы и развиты в работающую систему, и самой популярной реализацией платформы смарт-контрактов на сегодня остается Ethereum.

Несмотря на то, что запущенный в 2015 году Ethereum многие считают первой платформой смарт-контрактов, базовая функциональность умных контрактов всегда поддерживалась и биткоином. «В биткоине классно то, что ты можешь не просто пересылать монеты, но и задавать различные условия для их траты. Вы можете искать прообразы хэшей, создавать мультиподписи, делать крутые вещи, которые и образуют “смарт-контракты”», — сказал Поэлстра.

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

Проблемы смарт-контрактов

Использование смарт-контрактов сопряжено с нагрузкой на сеть и рисками для вовлеченных сторон. Так, по мере того, как контракт усложняется, растет и его ресурсопотребление (то есть потребление вычислительных мощностей и в конечном счете энергии). Это особенно проблематично, потому что выполнять каждый смарт-контракт должны все ноды сети, а не только заинтересованные стороны.

Это, в свою очередь, означает отсутствие приватности: вся сеть может узнать детали вашего смарт-контракта. Далее, если в нем будет содержаться уязвимость, ее могут обнаружить и осуществить атаку с целью похитить находящиеся в контракте средства.

Еще одна угроза заключается в том, что альтернативное ПО может интерпретировать детали контракта немного по-своему, что усложнит достижение консенсуса нодами.

Решение

В прошлом году, в ходе конференции Scaling Bitcoin в Стэнфорде, Поэлстра представил концепцию «бесскриптовых скриптов», с помощью которых можно использовать смарт-контракты в сети биткоина, но при этом полностью убрать их с блокчейна. При описанной Поэлстра системе контракты больше не должны выполняться всей сетью — только непосредственными участниками сделки. Однако вся остальная сеть сможет удостовериться, что правила сети не нарушаются и сделка валидна, поскольку блокчейн будет «видеть» смарт-контракт как обычную транзакцию. «Люди могут верифицировать состояние системы, не загружая все фоновые данные. Определенным образом возможно сжать все транзакции. Многие данные избыточны, и вам не нужно все их публично проверять», — говорит Поэлстра.

В своей презентации Поэлстра подробно остановился на двух технологиях — Mimblewimble и бесскриптовых скриптах. Но для их объяснения он затронул еще несколько тем.

Конфиденциальные транзакции и схема обязательств

Эта система была описана одним из основных разработчиков Bitcoin Core и бывшим членом команды Blockstrem Грегори Максвеллом. Все функционирует, как и при обычных биткоин-транзакциях, но суммы переводов скрыты и заменены однотипными обязательствами (криптографический метод, позволяющий подтверждать неразглашаемые значения). Таким образом, схема однотипных обязательств позволяет верифицировать транзакцию, то есть проверить, что сумма входов равна сумме выходов, при этом не раскрывая никакой конкретной финансовой информации.

Схема обязательств состоит из настоящей суммы транзакции и других «ослепляющих» факторов, которые используются, чтобы скрыть сумму. «Чтобы осуществить транзакцию, вы должны знать сумму ослепляющих факторов для входа… Это означает, что вы не можете создать транзакцию, не зная секрета», — поясняет Поэлстра.

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

MimibleWimble

В протоколе MimbleWimble эта проблема решается добавлением специального выхода с нулевым значением под названием «ядро» (kernel). Ядро нельзя потратить, что делает невозможным компрометирование такой транзакции, потому что для совершения успешного платежа необходимо знать сумму расходуемых выходов.

Мультиподписи и схема обязательств с нулевым выходом — две составляющие «магии MimbleWimble», как называет это Поэлстра.

MimibleWimble был представлен Поэлстра на той же конференции Scaling Bitcoin, но годом ранее — в 2016. При этом авторство предложения неизвестно — white paper был опубликован через скрытый с помощью Tor сервер и «сброшен» в IRC-канал bitcoin-wizards. «Автор просто бросил его, вышел минуту спустя и больше никогда не возвращался, насколько нам известно», — сказал Поэлстра.

White paper написан под псевдонимом Tom Elvis Jedusor (имя Волан-де-Морта во французских изданиях «Гарри Поттера»), и автор рассказывает, что «назвал свое создание “MimbleWimble”, поскольку оно используется, чтобы не давать блокчейну разбалтывать пользовательскую информацию» (в книге «Гарри Поттер и дары смерти» «Mimblewimble» — это заклятие косноязычия, которое связывает язык жертвы, не позволяя сказать ни слова).

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

Бесскриптовые скрипты

«Бесскриптовые скрипты, [которые] разрабатывались в течение 2017 года и до сих пор [разрабатываются], — это очень масштабный исследовательский проект, это способ использовать ядро и подпись ядра, чтобы задавать им условия, не модифицируя систему так, чтобы проверяющим не пришлось понимать новые правила», — сказал Поэлстра, поясняя, что участники могут выбрать, какой контракт или протокол они хотят выполнить, и в результате честного выполнения они создадут валидную подпись, так что блокчейн и майнеры смогут подтвердить валидность подписи, при этом не имея никаких конкретных деталей транзакции.

«Ты выкладываешь правила и затем публикуешь явное доказательство того, что эти правила были соблюдены, — рассказывает Поэлстра. — Исторически это пришло из MimbleWimble… Но фактически любая система, которая поддерживает подписи Шнорра или какую-то другую схему подписей с линейными данными, может выполнять эту технику бесскриптовых скриптов».

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

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

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

Мультиподписи Шнорра

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

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

«Философский момент в том, что такие мультиподписи уже отчасти и являются бесскриптовыми скриптами в том смысле, что вы можете иметь группу людей, у каждого из которых есть собственный публичный ключ, и они сливают их вместе, чтобы получить единый ключ. Они получают единый ключ и единые подписи. Внешние наблюдатели, которые в этом не участвовали, не знают, сколько людей в это вовлечено, а также то, что в этом участвовало более одного человека. И они, конечно, не знают первоначальных значений… Вы оставляете долю подписи вместо полной подписи, и все это работает — магически», — комментирует Поэлстра.

При генерации мультиподписей Шнорра используется линейная математика. Рассмотрим, как это работает в очень упрощенном виде:

Приватные ключи и подписи — это числа, и последние образуются из первых. Поскольку это упрощенные примеры, представим, что приватный ключ — 10, и половина подписи Шнорра, образованная от этого ключа — 10,000. Второй приватный ключ — 15, вторая половина подписи Шнорра — 15,000. Исходя из этих данных, подпись Шнорра будет 25,000 (10,000 + 15,000).

И поскольку это числа, с ними можно производить математические расчеты. Например, разница между значениями двух приватных ключей в нашем случае равняется 5000 (15,000 – 10,000).

На практике все, разумеется, более сложно, но это один из примеров вычислений, которые позволяет осуществлять линейная математика подписей Шнорра.

Рассмотрим этот механизм на примере конкретного смарт-контракта. Допустим, смарт-контракт запрограммирован так, что когда кто-то прослушивает песню, вознаграждение сразу пересылается исполнителю.

В таком случае, по условиям смарт-контракта, песня будет воспроизводиться только если исполнитель предоставит свою подпись серверу, на котором хранится музыкальная композиция. В нашем упрощенном сценарии «подпись песни» — 7000. И «слушатель» хочет заплатить за ее прослушивание 1 биткоин.

Для этого обе стороны создают обычную биткоин-транзакцию, которая пересылает один биткоин от слушателя к исполнителю при условии, что оба предоставят свои половины подписи Шнорра для создания одной «целой» подписи.

Исполнитель, конечно, знает, как выглядит его подпись. Например, 8000. Он также знает, как выглядит подпись песни: 7000. Владея этими данными, он может высчитать разницу между ними: 1000. Это называется «подпись-переходник», или соединительная подпись.

С технической точки зрения это работает так: «Вместо того, чтобы отправить свой nonce R в протокол мультиподписи, [участник] отправляет R + ослепляющий фактор T… [Сам] T он тоже отправляет. Это странно, потому что он не пытается скрыть nonce: все, что он делает — корректирует ее значением, которое он знает… Вы получите подпись, которая практически валидна — она валидна, если вы сможете скорректировать ее секретным значением t, которое знает только одна сторона. Если вы знаете подпись-переходник, знание валидной подписи с тем же nonce (поскольку хэш одинаковый) эквивалентно знанию t».

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

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

Теперь, используя половину подписи исполнителя, слушатель может вычесть подпись-переходник 1000 из половины подписи Шнорра исполнителя. Так он узнает подпись песни — 7000 — и может ее слушать. Другими словами, транслируя транзакцию, которая составляет 1 биткоин, исполнитель автоматически продает подпись песни слушателю — это и является смарт-контрактом.

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

Подписаться
на DeCenter в Telegram