Перевод Кластер критической децентрализации 36c3 - Атомные свопы Bitcoin-Monero

Тема в разделе "Журналы о Monero", создана пользователем Mr. Pickles, 27 май 2021.

  1. Mr. Pickles

    Команда форума Модератор Редактор

    Регистрация:
    11 сен 2017
    Сообщения:
    984
    Симпатии:
    246

    Аннтотация

    В этом выступлении нами будет предложен подход к реализации атомных свопов Bitcoin-Monero, а также рассказано, на какой стадии разработки он находится, и о насущных проблемах.

    Стенограмма выступления

    Диего: Они готовы. Да, они готовы, мы почти готовы, всё почти готово. Мы готовы, видите? Всё сошлось в итоге. Итак, представляю вам h4sh3d и zkao. Они расскажут нам об атомных свопах Bitcoin-Monero. Я передам микрофон им обоим. Ребята, вам нужно два микрофона или вам будет достаточно одного? А, только тебе. Смотрите, они собираются произвести атомный своп прямо на сцене. Они собираются сделать это… ммм… Я собирался сказать что-то дерзкое, но забыл, что именно. Поэтому я передаю микрофон им, чтобы они могли начать своё выступление.

    zkao: Привет! Два года назад мы были здесь, мы находились между столами Monero и Bitcoin, и я разговаривал с Полто, когда он предложил: «Почему бы вам не заняться атомными свопами BTC-Monero?» И мы занялись ими. Мы не думали, что такое вообще возможно. Но спустя два года у нас уже есть нечто более конкретное, и нам бы хотелось об этом рассказать.

    Итак, многие стали пользоваться Bitcoin, потому что он был заявлен как анонимная валюта. Возьмём, к примеру, этот твит WikiLeaks 2011 года: «WikiLeaks теперь принимает анонимные пожертвования в Bitcoin на этот адрес». Как известно, в основе Bitcoin лежат выходы, которые можно отследить. Вот транзакция Bitcoin. Вот два выхода. Это выходы UTXO. А вот выход, который тратится в этой транзакции, в которой производится другой выход, который тратится уже в этой транзакции, в которой также создаётся выход. Таким образом, вы можете связать три выхода между собой и всё отследить. И вот чуть более интересный пример, поскольку вы берёте выход и разбиваете его на два других выхода, а затем снова объединяете их в один выход, что позволяет понять, что это делается одним и тем же человеком.

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

    Так как же избежать такого отслеживания? В случае с Bitcoin - никак. Но при наличии возможности проведении не требующего доверия свопа между Bitcoin и Monero, например, это возможно. И здесь очень важно отсутствие доверия, поскольку в противном случае придётся раскрывать личные данные, и обмен уже не будет анонимным.

    Итак, базовая идея, лежащая в основе свопов между блокчейнами, состоит в том, что, например, есть Боб, у которого имеется Bitcoin, и есть Элис, у которой имеется Monero, и они хотят произвести транзакцию так, чтобы в конце у Элис был Bitcoin, то есть в начале у неё есть Monero, а в конце будет Bitcoin, а у Боба в начале транзакции будет Bitcoin, а в конце — Monero. И либо они оба сделают это, либо никто из них. В этом и состоит атомарность атомных свопов.

    Но почему именно Bitcoin-Monero? Bitcoin — стоящая штука, но его можно отследить. Monero отследить нельзя. У Bitcoin высокая рыночная капитализация, люди пользуются им… немного, и в качестве сноски: многие пользователи просто не могут перевести свои монеты. И если бы 10% монет Сатоши перешли в Monero, её рыночная капитализация удвоилась бы. И снова: атомные свопы не требуют доверия — здесь нет никакой доверенной стороны, поэтому есть возможность проведения анонимных сделок.

    И мы находимся здесь сегодня, потому что мы начали наш проект именно здесь, и есть некоторые вещи, которые мы ещё не сделали, например, нам необходимы доказательства с нулевым разглашением, которые мы не знаем, как сделать. И мы будем рады получить помощь со стороны сообщества. Кроме того, в рамках проекта разрабатывается несколько библиотек, и будет здорово, если сообщество внесёт свой вклад, примет участие в этой разработке. А теперь я передаю слово h4sh3d, который более подробно расскажет вам о протоколе.

    h4sh3d: Спасибо. Приветствую всех. Я чуть более подробно расскажу о протоколе. Но перед тем как начать, давайте рассмотрим сам сценарий.

    Итак, у нас есть Элис, у которой имеются Monero, и она хочет получить Bitcoin. У Боба есть Bitcoin, и он желает получить Monero. Они уже согласовали цену и количество, и они хотят торговать, но при этом не доверяют друг другу. Кроме того, в рамках протокола мы допускаем, что один из них может быть злоумышленником.

    Но сначала немного обозначений и математики. Обещаю, их будет немного, но это нудная часть, а интересная часть будет буквально через несколько секунд. Итак, сначала мы обозначим приватный ключ Bitcoin как bi, и i может принадлежать либо a, либо b, Элис или Бобу, соответственно. Заглавную B мы используем для обозначения публичного ключа Bitcoin Элис или Боба. Приватные ключи Monero мы обозначаем прописной k, а прописными kv и ks обозначены приватный ключ просмотра и приватный ключ траты. И, опять же, мы используем заглавную K для обозначения публичных ключей просмотра и траты.

    Таким образом, мы можем определить счёт парой двух публичных ключей, и мы можем разбить счёт, зная приватный ключ просмотра, а тратить средства со счёта можно только при наличии известного приватного ключа траты. В рамках протокола нами определяются частичные ключи или «части». Мы обозначаем часть ключа траты прописной a и прописной b для Элис и Боба. А полный приватный ключ траты мы определяем добавлением mod l. Это параметр для кривой edward25519.

    И последний слайд нудной части: обозначения. Когда мы говорим ksa, с заглавной A, мы имеем ввиду, что ksa известен Элис — на следующем графике мы используем эти заглавные A и B для обозначения того, кому известен секрет. И теперь мы можем перейти непосредственно к протоколу и интересной части.

    Здесь, в первую очередь, поскольку нам известно, что стороны хотят заключить сделку, мы подразумеваем, что они уже прошли этапы инициализации и блокировки средств. Более подробно я расскажу об этих двух этапах чуть позже. Средства заблокированы, и мы можем начать своп. И вот что происходит. Бобу известен секрет, и он делится им с Элис. Мы переходим к следующему шагу. Мы переходим к следующему шагу на этой диаграмме, мы начали, и Элис узнаёт s. И теперь соблюдены все предварительные условия, чтобы совершить покупку.

    При совершении покупки Bitcoin, который был заблокирован, переходит к Элис в её кошелёк Bitcoin. Это транзакция Bitcoin. Мы намеренно раскрываем некоторую информацию, и в этом случае это ksa, который был известен Элис при проведении этой транзакции, и теперь Боб тоже знает ksa. И поскольку Бобу известны ksa и ksb, он может восстановить полный ключ ks, приватный ключ. Итак, у нас имеются заблокированные Monero, Бобу известен полный ключ траты, и он может получить эти Monero. По сути, мы раскрываем одну часть ключа в зависимости от пути выполнения протокола.

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

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

    Этап блокировки со стороны Bitcoin требует проведения двух транзакций. Если вы знакомы со структурой платёжного канала, то вы знаете, что это стандартная конструкция. И здесь показана первая транзакция Bitcoin, которая блокирует Bitcoin Боба. В ней есть по крайней мере два UTXO со скриптом, и скрипт позволяет совершить покупку или возврат, если своп будет отменён. В том случае, если будет запущена процедура возврата, данная транзакция также может пойти двумя путями. Первый подразумевает выполнение процедуры возврата, при которой каждая сторона получит назад свои средства за минусом комиссии в каждом блокчейне, а следущий, третий путь, прошу прощения, второй путь подразумевает реализацию механизма, чтобы получилось следующее. Элис получит Bitcoin, не раскрывая какой-либо информации. Здесь видно, что h_a, хеш одного из секретов, раскрывается во время проведения транзакции, поскольку нам необходимо раскрыть секрет, соответствующий h_a. В данном случае мы раскрываем секрет Боба, а здесь не делаем этого, мы просто ждём, пока не сможем забрать Bitcoin. Мы выбрали данное решение, поскольку, если ни одна из сторон не предпримет никаких действий, возникнет тупиковая ситуация. Я поясню это несколько позже.

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

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

    А что касается свопа, здесь ситуация такая же, что была на графике до этого. Есть секрет s, необходимый Элис, чтобы совершить покупку. Ей нужен её собственный приватный секрет, ей нужна транзакция Bitcoin, и это будет передано сюда, в результате чего Bitcoin Боба перейдёт к Элис, если она совершит покупку, раскрыв Бобу данную информацию.

    А что будет, если Боб никогда не поделится этим параметром s? Здесь, в первой транзакции, спустя какое-то время можно будет осуществить возврат. Таким образом, если Боб никогда не поделится своим секретом с Элис, и всё будет пребывать в этом состоянии, можно будет запустить процедуру возврата. И в это время Боб должен будет тоже осуществить возврат, иначе Элис сможет забрать его Bitcoin. Теперь о том, что будет, если Элис не совершит покупку. Боб делится своим секретом, чтобы Элис могла купить Bitcoin, но она ничего не делает. Тогда Боб по истечении первой временной блокировки сможет напрямую запустить процедуру возврата и вернуть свой Bitcoin. При этом он раскроет свой секрет, и Элис сможет забрать обратно свои Monero. И если Боб снова не запустит процедуру возврата, у нас есть запрос от Элис, что мотивирует Боба к запуску процедуры. Вот и весь протокол.

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

    Спасибо всем вам, что пришли на это выступление. Мы действительно будем рады любым откликам или помощи сообщества в связи с данной работой или библиотеками. Если вы хотите связаться с нами, у нас есть сеть Петри, в которой представлен весь протокол, и вы можете поработать с ним. Также мы собираемся опубликовать небольшое видео, в котором будет более подробно рассказано, что такое сеть Петри. Здесь мы лишь немного рассмотрели систему, представив её в виде графиков. Так что свяжитесь с нами, и мы обязательно обсудим всё. Не уверен, осталось ли у меня время для ответов на вопросы. Да, есть время. Вопросы?

    Вопрос из зала: Привет, спасибо. После того как будет совершена транзакция, можно ли будет со стороны Bitcoin увидеть, что я участвовал в проведении атомного свопа между блокчейнами?

    h4sh3d: Когда вы пытаетесь проанализировать что-то в блокчейне Bitcoin, вы видите этот скрипт. Если своп пройдёт напрямую, то вы увидите этот скрипт и эту транзакцию, которая раскрывает информацию. Безусловно, всё это будет открыто, и вы сможете сопоставить всё с этой стороны. Это раскроет информацию о стороне Monero, но такой информации будет недостаточно, чтобы что-либо сделать, чтобы установить связи со стороны Monero. Тут вы можете предположить, что со стороны Bitcoin находится уже другой человек, но это всё, что вы сможете выяснить.

    zkao: Сеть Петри моделирует полное выполнение протокола, и мы не смогли всё упростить в достаточной мере, чтобы показать здесь. Но если вы хотите исследовать любой из возможных путей выполнения протокола, обращайтесь к нам, «поиграем» с сетью Петри, и вы ясно поймёте, как реализуется каждый из возможных путей выполнения протокола. Мы сделали это вчера при помощи Statebox и благодарны им за это. Спасибо.

    ---

    Источник: Critical Decentralisation Cluster 36c3 - Bitcoin-Monero Atomic Swaps (Joel “h4sh3d” Gugger, p)

    Перевод:
    Mr. Pickles (@v1docq47)
    Редактирование:
    Agent LvM (@LvMi4)
    Коррекция:
    Kukima (@Kukima)
     
    #1 Mr. Pickles, 27 май 2021
    Последнее редактирование: 27 май 2021
  • О нас

    Наш сайт является одним из уникальных мест, где русскоязычное сообщество Monero может свободно общаться на темы, связанные с этой криптовалютой. Мы стараемся публиковать полезные мануалы и статьи (как собственные, так и переводы с английского) о криптовалюте Monero. Если вы хорошо владеете английским (или можете писать собственные статьи/мануалы) и хотите помочь в переводах и общем развитии Monero для русскоязычной аудитории - свяжитесь с одним из администраторов.