Приветствуем! Впервые на сайте Zcash?
The Zcash network is young, but evolving quickly! Sign up and we'll be in touch with monthly highlights on ecosystem growth, network development and how to get started with Zcash!

Язык

BOLT: частные платёжные каналы

Ian Miers | Aug 01, 2016

В совместной работе с Мэттью Грином мы описали платформу BOLT (Blind Off-chain Lightweight Transactions – слепые лёгкие транзакции вне цепи), которая предлагает пользователям протокол частного канала для быстрой оплаты, созданный по образцу Lighting Network. Мы считаем, что это сделает Zcash более масштабируемой и практичной системой, поддерживающей сильную защиту приватности.

TL;DR: При использовании BOLT разные платежи не могут быть объединены на одном канале, даже если стороны тайно сговорятся. Платежи проходят за миллисекунды и не требуют блочного подтверждения. Продавец для получения оплаты пользуется тем каналом, который открыт именно для него. Платежи могут быть пропущены через третью сторону, что избавляет от необходимости для продавца и покупателя связываться через канал напрямую, защищая их от вредоносных действий третьей стороны и сохраняя анонимность (даже если у кого-либо из участников есть тайный сговор с третьей стороной), и скрывает переданные суммы. Все эти требования говорят о том, что финансирование канала возможно только за счёт частных средств, иначе возможно вмешательство злоумышленника, который в состоянии нарушить вашу анонимность, вызвав закрытие канала. Предварительную версию документа вы можете найти по адресу http://eprint.iacr.org/2016/701.

Проблема

Основанные на блокчейне криптовалюты работают, делая запись каждой сделки в общедоступный блокчейн. У такого подхода есть очевидное преимущество в устранении посредника, которому доверяют. Но возникают серьезные проблемы с масштабируемостью, приватностью и временем ожидания, потому что вы делаете запись каждой транзакции в общедоступный блокчейн. Вам нужно место, чтобы сделать запись каждой из сделок в блокчейн (см. дебаты о размере блока Биткоина), запись транзакции в блок требует нескольких минут и, конечно же, запись общедоступна. Таким образом, другие люди могут узнать многое о том, чем вы занимаетесь.

Платёжные каналы

Протоколы платёжных каналов, такие как Lightning Network, решают проблему масштабируемости и задержек, используя блокчейн только для депонирования вкладов и разрешения споров. Кроме того, пользователи обмениваются долговыми расписками IOU на основе блокчейна, которые фиксируются в блокчейне только при возникновении спора.

Как это работает? Алиса и Боб вместе согласились разделить средства при создании IOU, разместив их в канале (например, они вложили по $50, следовательно IOU будет выглядеть таким образом - Алиса: $50, Боб: $50). Эти деньги находятся на блокчейне, на условном депонировании и их можно получить только по IOU, подписанному вместе Алисой и Бобом. Чтобы Алиса могла заплатить Бобу $5, она поддающимся проверке образом разрушает свой старый IOU, и она вместе с Бобом подписывает новый IOU “Алиса: $45, Боб: $55.” Они могут неоднократно делать это, чтобы какая-то из сторон смогла обналичить деньги. При этом Алиса или Боб могут отправить новый IOU в блокчейн (или в случае возникновения спора могут отправить оба). Таким образом на блокчейне регистрируются только открытие и закрытие канала.

Каналы не приватны

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

Предположим, что Tor (либо другой сервис по обеспечению анонимности) снимает микроплатеж за предоставление пропускной способности. Следовательно, для просмотра каждой страницы через Tor Алисе потребуется совершить микроплатеж: например, десятую часть цента за каждую страницу. Если мы увидим, что баланс канала оплаты в Tor составлял $1.00 и он равен нулю через месяц, то можно сделать вывод о том, что Алиса очень часто использовала Tor. Если Алиса является журналистом либо активистом, это может привлечь внимание властей к ее персоне, ведь она может быть человеком, которому «есть, что скрывать», хотя Алиса использует Tor осторожно, в кофейнях и других общественных местах. А если Алиса еще и живет, скажем, в Турции, то это будет совсем плохая идея.

К счастью, именно для решения проблем такого рода была разработана система Zcash. Используя Zcash вместо систем с открытыми для всех реестрами, например, таких, как Биткоин или Эфириум, можно использовать блокчейн, в котором отсутствует информация, связанная с открытием и закрытием платёжных каналов и способная привести к Алисе. Но Zcash имеет дело только с приватными платежами на цепочке; система не работает с долговыми расписками.

Проблема с долговыми расписками такого вида состоит в том, что они имеют уникальный идентификатор, подобный файлам куки, и он способен привести к Алисе. Любой, кто наблюдает за ним (например, исходящий узел Tor) не будет однозначно знать, кому принадлежит идентификатор—её реальная личность всё ещё защищена сервисом анонимности—но они всё ещё могут наблюдать за просмотрами страниц и патернами поведения, потому что многократные платежи по платежному каналу неотъемлемо связаны. Этого могло бы быть достаточно, чтобы однозначно определить Алису (например, если она просматривала документы, связанные с темами её газетных статей), или подобную информацию. Таким образом, Zcash это часть решения, но Zcash сам по себе не делает частных платёжных каналов.

BOLT: частные платёжные каналы

Познакомимся с BOLT, над которым Мэтт и я работали на протяжении последних нескольких месяцев. BOLT устраняет связь между всеми платежами в канале. Это позволяет быть уверенным в том, что платежи Алисы скрыты, даже все платежи, предназначенные для неё как получателя.

Мы спроектировали два протокола: первый не интерактивный и позволяет перевести платеж от Алисы к Бобу лишь на фиксированные суммы. Второй протокол позволяет произвести двусторонние платежи с произвольными суммами, но он предполагает взаимодействие сторон. В данной статье мы сосредоточимся на протоколе с двусторонними платежами.

Основная идея протокола реализуется через создание частных долговых расписок. Это возможно благодаря двум технологиям: слепой подписи и обязательствам. Обязательства позволяют Алисе скрыть ценность долговой расписки (которая может эту ценность раскрыть). Слепая подпись убеждает Боба в том, что долговая расписка уникальна, поэтому необходимо её подписывать. Она также дает гарантию, что Боб не сможет узнать подпись или саму расписку из множества подобных подписанных расписок.

BOLT Diagram

Алиса совершает платёж Бобу, подтверждая наличие долговой расписки и ее аннулирования (подписывая ее ключом аннулирования). В это время Бобу необходимо подписать новую расписку, содержащую тот же баланс, как и в предыдущий раз, но c меньшей суммой платежа. Подобная схема повторяется, когда Боб платит Алисе: сумма платежа добавляется к новой долговой расписке. Актуальный баланс и подпись остаются скрытыми от Боба, поэтому можно быть уверенным, что он не сможет понять, пришли ли два отдельных платежа через один и тот же либо разные каналы.

Большую сложность составляет признание недействительным старого долгового обязательства и автоматическое подписание нового. Самая сложная задача – сделать это без обнаружения канала, который использует Алиса. Если Алиса сначала аннулирует старую долговую расписку, а Боб откажется подписать новую, то Алиса не сможет закрыть канал оплаты и потеряет деньги. Если же Боб подпишет новое долговое обязательство до признания старого недействительным, то Алиса сможет обмануть Боба: она может использовать новую долговую расписку для осуществления целой серии платежей, затем вывести средства из обращения, сохраняя свои деньги в целостности. В обычных каналах оплаты этого не может произойти, так как Боб сможет увидеть последующие обманные платежи. В отношении закрытых платежных каналов описанная ситуация станет невозможной.

BOLT Diagram

Чтобы разрешить подобную проблему, мы решили отделить процесс генерации долговых расписок для закрытия платежного канала от возможности их использования в будущих транзакциях. Долговая расписка обязательна для поддержания баланса счета и одноразового использования открытого ключа под названием ключ аннулирования. Предположим, что с момента установки платежного канала у Алисы имеется действующая (подписанная вслепую) долговая расписка. ① Сначала Алиса создает новое долговое обязательство, перечисляя Бобу на 5$ больше, чем в предыдущем обязательстве. ② Возможно, Алиса сделает ключ аннулирования от старого долгового обязательства открытым ③, тем самым вынуждая Боба подписать новое обязательство для его закрытия (это произойдет после того, когда можно будет подтвердить корректность нового обязательства по отношению к предыдущему). ④ После этого она должна подписать обращение, которое аннулирует старую долговую расписку при помощи ключа аннулирования, и передать его Бобу вместе с подписью. Это безопасно, так как теперь Алиса может закрыть канал оплаты с новой долговой распиской, независимо от того, что может произойти. ⑤После того, как стороны удостоверятся, что старая долговая расписка отменена, Боб может подписать новую расписку в качестве действительной для последующих платежей. Это безопасно, так как старая долговая расписка недействительна. Поэтому Боб может быть уверен, что Алиса уже не сможет вернуть себе деньги. Теперь Алиса может использовать новую долговую расписку для последующих платежей в BOLT.

Боб видит, что он получил денежные средства (в размере 5$, как описывалось в примере выше) по одному из каналов оплаты (или же он получит на 5$ больше после закрытия канала). Но Боб не сможет определить, какой именно канал оплаты был использован: от него были скрыты актуальная долговая расписка, её денежный баланс, а также его подпись. Именно по этим показателям можно идентифицировать канал оплаты.

Самое интересное, что вышеописанный процесс простой, быстрый и использует хорошо понятную криптозащиту. Прототип системы скоро будет запущен, а весь процесс включения протокола предположительно будет занимать менее 50 мс и требовать 10 МБ памяти для выполнения.

Непрямые платёжные каналы

До этого момента нам было необходимо наличие у Боба и Алисы платежного канала. Но что, если его не будет?

Как и Lightning, BOLT позволяет осуществлять платежи при отсутствии прямого канала оплаты между сторонами при условии, что у них есть посредник (к примеру, Coinbase). Это стало возможным при использовании долговой расписки для закрытия канала оплаты, зависящего от других актуальных транзакций. В отличие от Lightning, ни один из посредников не знает ни участников, вовлеченных в транзакцию, ни используемые суммы. Для осуществления этого необходимо анонимное спонсирование каналов оплаты, так как третья сторона может отменить закрытие канала оплаты и проследить, кто именно закрывает его. Если сам платежный канал анонимен, информация лишается ценности.

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

Может ли BOLT работать без Zcash?

Мы может настроить BOLT таким образом, чтобы он работал с большинством криптовалют, если нам удастся добавить примитивы. Мы могли бы даже это сделать, не внося изменений в Биткоин, просто за счёт использования основанного на хэшировании обязательства и универсального, основанного на схеме вычислений с несколькими участниками (MPC) для слепой подписи с помощью ECDSA. Но любая реальная приватность, которую обеспечивает BOLT, существенно зависит от анонимной установки и анонимного закрытия канала.

В случае Биткоина, финансирование канала не является приватным: сохраняется запись о том, кто открыл канал, переданная сумма и причина закрытия канала. Один только BOLT не решает эту проблему—он только делает платежи по каналу, которые не связан с другими каналами. Плохо, что продавец, оборвавший связь с BOLT или вмешательство третьей стороны может вызвать аварийное прекращение работы протокола, благодаря чему становится возможным узнать, какой из каналов вы используете. Они могут сделать это только один раз, так что многократные платежи не могут быть связаны с одним каналом, но если они не открыли канал анонимно, то могут связать этот (прерванный) платёж с вами.

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

Я хотел бы поблагодарить Шона Боуи, одного из разработчиков Zcash, предложившего идею объединения Lightning и Zerocash. Также хочу поблагодарить Шона, Мэтью, Дейру, Джека и анонимного «леопарда» за обратную связь в этом блог-посте.