Перевод Атомные свопы Monero-Bitcoin

Тема в разделе "Статьи", создана пользователем Mr. Pickles, 28 окт 2020.

  1. Mr. Pickles

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

    Регистрация:
    11 сен 2017
    Сообщения:
    788
    Симпатии:
    229
    0.png

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

    Блокчейн Monero уже довольно давно интересовал нашу команду, но вплоть до последнего времени мы считали, что атомные свопы с его использованием невозможны из-за отсутствия блокировки по времени. Только из презентации Джоэля Гаггера (также известного как h4sh3d), представленной на конгрессе 36C3, мы узнали, что атомные свопы с использованием блокировки по времени можно реализовать только в случае с одним из двух блокчейнов.

    Тем не менее с Monero оставалась нерешённой пара проблем в плане блокировки монет, а именно:
    1. В Monero также отсутствует скриптовый язык, а это значит, что обычный механизм блокировки по хешам будет недоступен.

    2. Monero для создания пары ключей использует эллиптическую кривую edwards25519, что ограничивает возможность применения адаптивных подписей в случае с такими блокчейнами, как Bitcoin и Ethereum, которые используют другую эллиптическую кривую.
    Решение первой проблемы потребовало бы полной переработки Monero, но со второй можно справиться при помощи изящного криптографического решения, предлагаемого в недавней работе Джоэля по атомным свопам между блокчейнами Bitcoin и Monero.

    Протокол

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

    В результате отмены указанного изменения мы остались практически с той же версией протокола, но с некоторыми ключевыми отличиями:
    1. Использование простых скриптов схемы multisig 2-из-2 со всеми транзакциями Bitcoin.

    2. Временная блокировка на уровне транзакций.

    3. Альтернативный подход к доказательству DLEQ, необходимому для того, чтобы гарантировать раскрытие правильных ключей при погашении и возмещении Bitcoin.
    В случае с пунктами (1) и (2) нам хотелось сделать скрипты Bitcoin максимально простыми, чтобы обеспечивалась поддержка свойств приватности Monero. Использование схемы multisig 2-из-2 является вполне обычным делом для Bitcoin, поэтому её применение вовсе не означает, что имеет место атомный своп. О третьем пункте мы поговорим чуть позже, когда уже более подробно рассмотрим протокол.

    Система обозначений и терминология
    • Для обозначения секретных ключей нами используются строчные буквы, например x, в то время как для обозначения публичных ключей — прописные буквы, например X.

    • Сторону, являющуюся владельцем Monero и желающую обменять их на Bitcoin, мы обозначаем как Элис, а сторону, владеющую Bitcoin и желающую обменять их на Monero, — как Боб.
    Допуски

    Мы допускаем, что Элис и Боб обменялись рядом параметров перед тем, как следовать протоколу, а именно:
    • суммами, обмен которыми будет совершён;

    • значениями абсолютной блокировки по времени двух транзакций Bitcoin, t_1 и t_2, где t_2 > t_1.
    Мы также допускаем, что стороны обладают средствами связи друг с другом во время реализации протокола.

    Коротко и по существу

    При наилучшем сценарии процесс реализации протокола будет выглядеть следующим образом:
    1. Элис и Боб обмениваются набором адресов, ключей, доказательств с нулевым разглашением и подписей.

    2. Боб публикует Tx_lock, блокируя свои Bitcoin в выходе, соответствующем схеме multisig 2-из-2 и принадлежащем Элис и Бобу. С учётом информации, обмен которой состоялся на этапе 1, Боб может возместить свои Bitcoin, если прождёт до времени t_1, воспользовавшись Tx_cancel и Tx_refund. Если Боб не сделает это до истечения времени t_1, Элис сможет «наказать» Боба за неактивность, сначала опубликовав Tx_cancel, а затем, по истечении t_2, потратив выход, воспользовавшись Tx_punish.

    3. Элис видит, что Боб заблокировал Bitcoin, поэтому она публикует Tx_lock в блокчейне Monero, блокируя свои Monero в выходе, который может быть потрачен при помощи секретного ключа, которым владеет Элис (s_a), и секретного ключа, которым владеет Боб (s_b). Это означает, что, по сути, никто из них не может потратить этот выход, не зная секретного ключа другой стороны.

    4. Боб видит, что Элис заблокировала Monero, поэтому он отправляет Элис отсутствующую ключевую часть информации, которая позволит ей извлечь Bitcoin, воспользовавшись Tx_redeem.

    5. Элис использует эту информацию, чтобы потратить Bitcoin по адресу, принадлежащему ей. При этом она раскрывает свой секретный ключ s_a Бобу при помощи магии адаптивных подписей.

    6. Боб видит Tx_redeem Элис по Bitcoin, выделяет из этого секретный ключ Элис и объединяет его со своим собственным, чтобы потратить Monero по своему адресу.
    1.png

    Полный вариант
    Обмен адресами

    Элис и Боб запрашивают адреса у своих кошельков: address_a и address_b, соответственно. Они будут использоваться в качестве выходов для транзакций выплаты Элис и Бобу. Они делятся своим адресом с другой стороной.

    Обмен ключами
    • Обе стороны генерируют секретные ключи Bitcoin: a и b, соответственно. Эти ключи в совокупности дают право на владение выходом, в котором Боб заблокировал свои Bitcoin. Также они обмениваются друг с другом соответствующими публичными ключами A и B.

    • Также каждый из них генерирует два секретных ключа Monero: (s_a, v_a) и (s_b, v_b), соответственно, где ключи s означают ключи траты, а v — ключи просмотра. В конечном счёте Элис блокирует свои Monero в общем выходе (S_a + S_b, V_a + V_b), построенном при помощи соответствующих публичных ключей.
    Чтобы обе стороны могли видеть платежи по этому общему выходу, они напрямую обмениваются секретными ключами просмотра v_a и v_b.

    Также стороны обмениваются публичными ключами траты Monero S_a и S_b.

    Только тот, кому известны оба ключа s_a + s_b, сможет потратить общий выход.

    Интероперабельность кривых secp256k1 и edwards25519

    Как уже упоминалось во вступлении, для создания ключей Bitcoin и Monero используют различные эллиптические кривые. В результате пара ключей в одном блокчейне, по сути, не существует в другом. Это означает, что если бы нам при помощи адаптивной подписи по публичному ключу X удалось заполучить секретный ключ x в одном блокчейне, мы бы не смогли узнать, какой секретный ключ соответствует публичному ключу Y в другом блокчейне, что делает такое знание бесполезным.

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

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

    Понимая данный принцип работы ключей, мы можем продолжить рассматривать сам протокол.

    Доказательство знания с нулевым разглашением

    Воспользовавшись информацией, обмен которой происходил до этого, Боб пока ещё не мог построить адаптивную подпись, расшифровав и используя которую, Элис смогла бы дать ему s_a, поскольку, как уже упоминалось в предыдущем разделе, поскольку преобразования S_a^monero и публичного ключа Bitcoin S_a^bitcoin не происходит, что могло бы произойти в случае использования s_a в качестве секретного ключа Bitcoin.

    Однако, как мы также узнали из предыдущего раздела, если Элис сгенерирует публичный ключ Bitcoin S_a^bitcoin на основе s_a и построит доказательство с нулевым разглашением в отношении того, что секретный ключ для S_a^bitcoin и S_a^monero является одним и тем же, и поделится этой информацией с Бобом, то Боб сможет фактически построить адаптивную подпись на базе S_a^bitcoin, которая, будучи расшифрованной и использованной Элис, даст ему s_a, который он сможет добавить к s_b, чтобы потратить выход, воспользовавшись публичным ключом траты S_a + S_b.

    Таким образом, Элис делает ровно это. А Боб делает нечто аналогичное со своим секретным ключом s_b, так как он должен быть открыт Элис, если он когда-либо возместит свои Bitcoin, что позволит ей также возместить свои Monero. Он генерирует публичный ключ Bitcoin S_b^bitcoin, в соответствии со своим ранее отправленным S_b^monero, и строит доказательство с нулевым разглашением, демонстрирующее, что оба они соответствуют одному и тому же секретному ключу s_b.

    Возможно, вам покажется очевидным, но каждая сторона должна верифицировать доказательство, предоставленное другой стороной!

    Боб строит блокирующую транзакцию Bitcoin

    Чтобы Элис могла подписать транзакции Bitcoin на базе общего выхода A и B, Боб при помощи своего кошелька строит Tx_lock (например, используя API кошелька Bitcoin fundrawtransaction) и делится ей с Элис, но не подписывая.

    Подписание транзакций Bitcoin при наихудшем сценарии

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

    В этом плане стороны уже готовы произвести обмен подписями и адаптивными подписями для набора транзакций Bitcoin, а именно:

    • Элис и Боб вместе подписывают Tx_cancel, которая, будучи опубликованной, позволяет увидеть, был ли потрачен общий выход Tx_lock Bitcoin с другим выходом с тем же условием траты согласно схеме multisig 2-из-2 (A, B). Они строят транзакцию так, чтобы она могла быть сохранена в блокчейне только спустя время, превышающее t_1. Эта транзакция может использоваться любой из сторон как механизм, позволяющий извлечь невозможное и заблокировать протокол в том состоянии, когда будут возможны только возмещение и «штраф».

    • Элис строит и делится с Бобом адаптивной подписью по трате Tx_refund из выхода Tx_cancel на адрес address_b. Она строит её таким образом, что если Боб когда-либо решит произвести возмещение, ему понадобится расшифровать её, воспользовавшись своим ключом траты Monero s_b, раскрыв его Элис при публикации транзакции в блокчейне возмещения. Эта транзакция не обязательно должна быть заблокирована по времени, поскольку зависит от публикации Tx_cancel, что уже зависит от того, будет ли время превышать значение t_1.

    • Боб подписывает «штрафную» транзакцию путём траты выхода Tx_cancel на адрес address_a, которая затем может быть опубликована за время t_2. Он делится ей с Элис, что позволит ей оштрафовать его, забрав Bitcoin просто так в том случае, если Боб будет неактивен в течение долгого времени. Эта транзакция необходима, чтобы не допустить ситуации, в которой Элис и Боб вместе заблокируют свои монеты, но при этом Боб никогда не поделится необходимой адаптивной подписью с Элис, чтобы она могла извлечь Bitcoin, и сам не возместит эти средства. При отсутствии такой транзакции Элис могла бы быть неоправданно оштрафована за неактивность Боба, и их средства будут заблокированы в обоих блокчейнах на неопределённое количество времени. Эта транзакция позволяет Элис действовать в случае отсутствия действий со стороны Боба, а также мотивирует Боба к действию, по крайней мере, до наступления времени t_2.
    Переход к блокчейну

    При наличии подписи Tx_cancel Элис и зашифрованной подписи Tx_refund Боб может безопасно заблокировать свои Bitcoin, воспользовавшись транзакцией блокировки, построенной им ранее. Таким образом, он сможет возместить средства, если Элис прекратит взаимодействие.

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

    Теперь Элис сможет заблокировать свои Monero, поскольку она сможет безопасно возместить их, если Боб сделает то же со своими Bitcoin, а также она сможет забрать Bitcoin, если Боб не предпримет каких-либо дальнейших действий. Элис использует свой кошелёк Monero для передачи согласованной суммы Monero в выходе (S_a + S_b, V_a + V_b). Боб увидит, что это произошло, поскольку ему известны S_a, S_b, V_a и V_b, а также v_a и v_b, которые позволяют ему видеть транзакции выплат по данному выходу. Если он убедится в том, что сумма Monero верна и что у транзакции имеется достаточное количество подтверждений, он сможет действовать дальше в соответствии с протоколом.

    Одна последняя подпись

    Текущая ситуация позволяет обеим сторонам прервать процесс без какого-либо дальнейшего взаимодействия, но у Элис по-прежнему нет никакой возможности получить Bitcoin Боба (если только до наступления времени t_2 Боб не произведёт возмещения). Если бы у неё был способ сделать это до размещения какого-либо обязательства в блокчейне Monero, она могла бы оставить Боба с пустыми руками. Только теперь Боб может безопасно поделиться с Элис адаптивной подписью со своим секретным ключом Bitcoin b, зашифрованным по публичному ключу Элис S_a^bitcoin для траты Tx_redeem на основе общего выхода Bitcoin Tx_lock по адресу address_a.

    Элис может расшифровать эту адаптивную подпись в действительную подпись по B, которую она сможет использовать в сочетании с собственной подписью по A, чтобы опубликовать Tx_redeem Bitcoin. Бобу необходимо просто отслеживать блокчейн Bitcoin на предмет появления Tx_redeem, а также узнать секретный ключ траты Monero s_a Элис, который раскрывается ему в силу действия адаптивных подписей.

    Обладая s_a и s_b, Боб становится единоличным владельцем выхода Monero. Ему даже не нужно выводить это на адрес, выданный его кошельком. Он может просто импортировать этот ключ на существующий кошелёк или же сгенерировать новый кошелёк.

    Наш подход к доказательству DLEQ между кривыми

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

    Ввиду отсутствия доказательства безопасности данного протокола, мы изменили оригинальную идею так, чтобы её безопасность могла быть доказана простым сложением сигма-протоколов.

    Наш бывший коллега Лойд Фурнье дал нам ряд теоретических советов и ценных комментариев по экспериментальной реализации, которые можно найти по этой ссылке.

    Просто покажите мне код

    Объяснив, как это может сработать с нашей точки зрения, мы хотим показать, что нами уже было сделано. В течение последней пары недель часть нашей команды работала над доказательством концепции Rust реализации данного протокола. Используя криптографические библиотеки, такие как curve25519-dalek и secp256kFUN!, в сочетании с вышеупомянутой библиотекой доказательства DLEQ между кривыми, мы создали библиотеку, которую можно использовать для автоматического проведения свопов между блокчейнами Monero и Bitcoin. Нам бы хотелось подчеркнуть, что значительная часть использованной криптографии не проходила аудита и пока ещё не была как следует проанализирована, поэтому мы рекомендуем всем тем, кто захочет воспользоваться этой библиотекой, делать это только с той суммой денег, с которой они готовы расстаться.

    Что дальше

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

    • Расширение нашего недавнего варианта реализации обобщённых совместимых с Bitcoin каналов с поддержкой атомных свопов между Monero и Bitcoin вне блокчейна.

    • Переход к другой криптовалютной паре с возможным применением уроков, полученных при реализации данного проекта.
    В любом случае, вероятно, мы займёмся всем этим когда-то в будущем. А сейчас мы будем рады вашим отзывам как в виде тикета, так и по электронной почте. Во втором случае вы можете воспользоваться нашим публичным списком подписчиков. Спасибо за внимание!

    Изначально опубликовано Lucas в блоге COMIT Blog!

    Присоединяйтесь к сообществу COMIT на Matrix!

    Ссылки
    • Джоэль Гуггер (Joël Gugger). «Атомные свопы между блокчейнами Bitcoin и Monero» (Bitcoin-Monero Cross-chain Atomic Swap). https://eprint.iacr.org/2020/1126.pdf
    ---

    Источник: Monero-Bitcoin Atomic Swap

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

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