В этой статье мы поговорим о микшировании, самом первом способе обеспечения конфиденциальности в криптовалютах. Микширование помогает скрыть связь между входными и выходными данными отдельных транзакций, комбинируя (или смешивая) их с входными и выходными данными других транзакций. Чтобы этот метод работал, разные данные на входе и выходе должны быть взаимозаменяемыми (англ. “fungible”), то есть транзакции должны представлять собой переводы коина или токена, единицы которого идентичны друг другу. В этой статье мы рассматриваем только такого рода протоколы и транзакции.
В качестве простого примера, предположим, что Элис хочет отправить Бобу 10 единиц гипотетического коина MixCoin. В стандартном протоколе типа Биткоина она просто бы осуществила одну транзакцию, переведя 10 MixCoin со своего адреса на адрес Боба. Методы, основанные на микшировании, вносят различные изменения в поток транзакций, позволяя Элис:
- (CoinJoin) найти пользователя Синди, которая тоже хочет отправить 10 MixCoin Дэвиду и договориться с ними об объединении их транзакций в одну, посредством которой Элис и Синди отправляют по 10 монет Бобу и Дэвиду;
- (Mimblewimble) позволяет майнерам объединять все транзакции в блоке, используя только сгруппированные входы и выходы, и не указывая, какие входы и выходы относятся к одной и той же транзакции;
- (Monero) сгруппировать 10 MixCoin Элис с несколькими случайно выбранными коинами, принадлежащими другим пользователям, и отправить их способом, при котором раскрывается только, что какие-то из этих коинов были потрачены (но не какие именно).
Эти методы требуют различных действий со стороны Элис и обеспечивают разные преимущества в плане защиты личности пользователя, данных транзакций и состояния блокчейна. В сегодняшней статье мы проследим развитие концепции микширования от зарождения в так называемых криптомиксерах и CoinJoin до его более продвинутых версий, используемых в Mimblewimble и Monero, а также дадим оценку этим методам. Особую роль здесь играет анонимное множество (англ. “anonymity set”), которое, как мы помним, представляет собой наименьшее количество адресов, с которыми можно ассоциировать отправителя, и которым измеряется эффективность протокола в сокрытии связей между адресами. Перейдем к подробному анализу каждого из этих протоколов.
Миксеры
Изначально микширование предназначалось для того, чтобы противостоять анализу блокчейна биткоина. Самый простой способ скрыть происхождение коинов – это использовать сторонний сервис, который называется миксером или тумблером (как, например, закрытый ныне bitmixer.io). Если Элис хочет смешать 10 BTC, она (и большая группа других пользователей) может отправить 10 BTC на некий ресурс для микширования. Затем этот ресурс может отправить 10 BTC (за вычетом небольшой комиссии), которые были получены от другого пользователя – Боба – на другой адрес, также принадлежащий Элис. Таким образом, когда Элис будет тратить 10 BTC, которые она получила, в блокчейне не останется ни одного следа, который связывал бы ее с 10 BTC, который она первоначально отправила для микширования. Несмотря на то что этот метод не скрывает суммы транзакций, он может существенно затруднить связь между реальными личностями пользователей и их адресами в блокчейне.
Этот тип смешивания имеет ряд недостатков. Во-первых, Элис и другие пользователи миксера вынуждены доверять посреднику, предоставляющему этот сервис. Хотя они могут проанализировать репутацию ресурса, но с точки зрения криптографии они никак не застрахованы от того, что ресурс может просто не вернуть коины или подвергнуться хакерской атаке. Подобное часто случалось на ранних этапах развития биткоина. Для решения этой проблемы были разработаны протоколы типа TumbleBit, надстраиваемые поверх Биткоина, однако они не получили широкого распространения. Кроме того, у миксера есть возможность отслеживать все коины, которые через него проходят, а это означает, что он при желании может установить связь между коинами, вводимыми и выводимыми каждым пользователем. Во-вторых, централизованный оператор миксера может против своей воли подпасть под действие законов о противодействии отмыванию денег или регулирования в области денежных переводов. В-третьих, если Элис захочет смешать 8,29387541 BTC, а не 10 BTC, то повышается вероятность установления связи между входящей и исходящей транзакциями в миксере, поскольку уникальность суммы в 8,29387541 BTC значительно выше. И, наконец, анонимное множество, обеспечиваемое миксером, зависит от количества пользователей этого конкретного миксера во время микширования, и Элис может быть трудно предсказать или измерить это количество.
CoinJoin
Для того чтобы устранить зависимость от доверенного посредника, Грег Максвелл, один из разработчиков Биткоина, придумал метод CoinJoin. Его можно рассматривать как вариант миксера, который использует криптографию, чтобы избежать необходимости доверять посредникам. Объясню на примере: если Элис, Боб и Кэрол хотят отправить по 10 BTC и хотят использовать для микширования CoinJoin, то они могут обратиться в CoinJoin-сервис для создания (неподписанной) транзакции и отправки этих трех входов по 10 BTC на три новых выхода по 10 BTC. Затем сервис сможет отправить окончательную транзакцию каждому из пользователей – Элис, Бобу и Кэрол – для подписи; после того, как каждый из них подписал транзакцию, она отправляется в сеть Биткоина. Благодаря свойствам криптографических подписей, этот процесс не требует того, чтобы Элис, Боб и Кэрол доверяли CoinJoin-сервису или друг другу – сервис в данном случае лишь собирает транзакции вместе.
Таким образом, эта транзакция скрывает происхождение выходных данных; в частности, внешний наблюдатель не сможет связать конкретные выходы со входами, что дает нам анонимное множество размером в 3 единицы. Это свойство зависит от того факта, что три транзакции по 10 BTC имеют равный объём. Если бы вместо этого Элис хотела отправить 20 BTC, то для участия в той же CoinJoin-группе ей сначала пришлось бы разделить транзакцию на два перевода по 10 BTC, чтобы в CoinJoin-транзакции было 4 входа и 4 выхода по 10 BTC.
Как и в случае с миксерами, суммы транзакций и адреса являются открытыми, но, комбинируя различные транзакции вместе, CoinJoin не позволяет наблюдателям обнаружить связь между адресами входов и выходов транзакций. Чем чаще и чем большим количеством пользователей используется CoinJoin, тем большего увеличения анонимных множеств позволяет достичь этот метод. В отличие от миксера, CoinJoin обеспечивает пользователям криптографическую защиту их коинов – а именно, использует формат транзакции Биткоина, что позволяет каждому пользователю подписывать свою часть транзакции собственной подписью, при этом транзакция собирается вне блокчейна и записывается в него только после того, как все пользователи поставят свои подписи. Поэтому пользователям не приходится полагаться на доверенного посредника для надежного выполнения микшированных транзакций.
Тем не менее у метода есть и ряд недостатков. Во-первых, поскольку CoinJoin полагается на координацию вне блокчейна, пользователи должны сами найти других пользователей, которые захотят использовать CoinJoin вместе с ними. В криптовалютах типа Dash эта проблема решается при помощи поощрения специальных ведущих узлов (мастернод, англ. “masternodes”), чтобы они оставались в сети и выполняли CoinJoin-транзакции. Во-вторых, размеры исходящих транзакций должны быть идентичными, что еще более усложняет координацию. И, наконец, сами участники CoinJoin-группы смогут связать между собой входы и выходы транзакции, хотя эту проблему можно решить с помощью более сложных вариантов, таких как CoinShuffle.
Mimblewimble
Идея протокола Mimblewimble была предложена анонимным пользователем под псевдонимом Tom Elvis Jedusor (истинное имя Волдеморта во французском переводе Гарри Поттера) в IRC-чате в августе 2016 года. Mimblewimble (названный в честь заклятия косноязычия) предлагает новую структуру блокчейна, в которой все суммы транзакций и балансы скрыты, а входящие и исходящие адреса замаскированы. По состоянию на декабрь 2018 года протокол Mimblewimble реализуется в двух разных криптовалютах:
- Grin, проект proof-of-work-блокчейна, созданный в марте 2017 года группой анонимных разработчиков с псевдонимами из вселенной Гарри Поттера;
- Beam, проект proof-of-work-блокчейна с поддержкой конфиденциальных активов, аудитом кошельков и вознаграждением для фаундеров, созданный в марте 2018 года одноименным стартапом.
Обе эти криптовалюты сейчас находятся на стадии тестирования перед запуском. Чтобы понять технические детали протокола, нам сначала необходимо кратко обсудить схемы обязательств в криптографии.
Схема обязательства – это криптографический метод, который позволяет пользователю подтвердить значение части данных (чтобы впоследствии их нельзя было изменить), сохраняя при этом данные в секрете. Например, если Элис и Боб играют в камень-ножницы-бумагу, но каждый из них подозревает другого в жульничестве, то игроки могут записать свои обязательства по игре, а затем определить результат игры, раскрывая свои ходы. Mimblewimble использует схему обязательств с маскировкой, которая состоит из функции, включающей некоторые данные X, и коэффициента маскировки B (дополнительное число, обычно выбираемое случайным образом). Функция
C = Commit(X, B)
тщательно подобрана таким образом, что если Элис сообщает Бобу значение C (называемое обязательством), то Боб не может узнать какую-либо информацию о X. Позже Элис может раскрыть значения данных X и коэффициента маскировки B. Боб должен иметь возможность убедиться, что C = Commit(X, B), удостоверившись таким образом, что Элис знала эти значения ранее, когда она давала Бобу обязательство C. Это происходит благодаря тому, что Элис фактически не может позже сфальсифицировать отличные от истинных значения X’ и B’, чтобы при этом соблюдалось равенство C = Commit (X ‘, B’), а это позволяет Бобу быть уверенным в том, что значения X и B, которые ему сообщила Элис, истинны.
Mimblewimble представляет данные, факторы маскировки и обязательства в виде точек на эллиптической кривой, которые можно рассматривать как алгебраические объекты, которые можно складывать (как числа в модулярной арифметике). В этом случае возможно использовать гомоморфные обязательства, а это означает, что схема обязательств удовлетворяет равенству
Commit (X1, B1) + Commit (X2, B2) = Commit (X1 + X2, B1 + B2).
В нашем случае используемая схема гомоморфных обязательств называется обязательством Педерсена. В ее основе лежит криптография на эллиптических кривых. В данной статье мы не будем рассказывать обо всех подробностях схемы, но упомянем одно ключевое свойство, которое пользователь со знанием маскирующего фактора B для равенства Commit (0, B) может проверить, не раскрывая значение B, с помощью криптографической подписи.
Mimblewimble основан на идее Грега Максвелла о конфиденциальных транзакциях в сети Биткоина. Вместо использования неизрасходованных выходных данных транзакций (UTXO), как в Биткоине, коины в Mimblewimble хранятся в блокчейне в виде гомоморфных обязательств по выводимым суммам. Затем закрытые ключи реализуются в виде маскирующих факторов. Например, если у Элис есть 10 коинов с закрытым ключом “1337”, они будут представлены в блокчейне только числом Commit(10, 1337), которое для всех, кроме Элис, выглядит как случайное число.
Если Элис захочет отправить 6 коинов Бобу, она генерирует новый закрытый ключ – например, “201” – и создает обязательство на выходные данные Commit(3.9, 201). Затем она сообщает Бобу сумму (6 коинов) и разницу между ее старым и новым закрытыми ключами (1337–201 = 1136). Боб генерирует собственный новый закрытый ключ (например, “1000”), свой вывод Commit(6, 1000), добавляет небольшую комиссию за перевод, и затем создает транзакцию.
- Вход: [Commit(10, 1337)]
- Выход: [Commit(3.9, 201), Commit(6, 1000)]
- Комиссия за перевод: 0,1
Чтобы убедиться, что транзакция действительна, Элис и Боб также должны обеспечить:
- Подпись с использованием избыточного коэффициента маскировки (1136–1000 = 136, где 1136 – это разница между старым и новым закрытым ключом Элис) в качестве закрытого ключа и Commit(0, 136) в качестве открытого ключа, доказывающего, что Бобу известен этот закрытый ключ. Способность Боба создавать эту подпись является специальным свойством обязательств Педерсена, используемых в этом протоколе.
- Доказательство того, что количество коинов в Commit(3.9, 201) и Commit(6, 1000) является положительным (поскольку разрешение отрицательного количества коинов может позволить Элис создавать коины буквально из воздуха). Такие доказательства называются range proofs (рус. “доказательства диапазона”; в Grin используются доказательства Bulletproofs); их можно создавать без указания количества коинов в обязательстве.
Для проверки транзакции нужно убедиться, что доказательства диапазона действительны и что подпись действительна для разницы
Commit(3.9, 201) + Commit(6, 1000) + Commit(0.1, 0) — Commit(10, 1337) = Commit(0, 136).
Это гарантирует, что общее количество коинов в обращении не изменится (оно задается информационной частью суммы всех обязательств), и что Элис действительно знает закрытый ключ для входа, который она расходует. После совершения транзакции только Элис и Боб знают закрытые ключи и суммы их соответствующих выходов; однако информация о том, что вход Commit (10, 1337) был израсходован на два входа Commit (6, 1000) и Commit (3.9, 201), будет публичной.
Объединение транзакций в Mimblewimble
Для того чтобы еще надежнее скрыть информацию о транзакциях, Mimblewimble объединяет все транзакции в единый блок. Предположим, что Кэрол отправляет монеты Дэвиду через отдельную от Элис и Боба транзакцию. Если эти транзакции включены в один и тот же блок, то для проверки транзакции единственными важными данными являются:
- перечень входов и выходов;
- сумма всех избыточных факторов маскировки;
- доказательства диапазона для каждого выхода.
В частности, эти данные не зависят от группировки входов и выходов в транзакции, поэтому Mimblewimble просто забывает их после размещения транзакций в блоках, таким образом выполняя процедуру, аналогичную CoinJoin, для всех транзакций, появляющихся в блоке, и маскируя связи между входами и выходами транзакции. Группа пользователей может провести такую группировку при помощи процедуры, аналогичной CoinJoin, или во время передачи транзакции в сеть при помощи протокола Dandelion ++, благодаря чему наблюдателю будет сложнее определить, какие входы и выходы относятся к одной и той же транзакции.
У Mimblewimble есть в запасе еще один трюк. При проверке транзакций обратите внимание, что состояние цепочки задается только набором неизрасходованных выходов, поэтому использованные выходы можно просто исключить посредством процедуры, называемой cut—through (рус. “рассекать”). К тому же, из-за того, что сумма всех обязательств соответствует общему количеству коинов, этот набор нельзя подделать, не сделав всю цепочку недействительной. В результате мы можем рассматривать комбинацию этого набора неизрасходованных выходов и набора недавних блоков как состояние общего консенсуса, и эта модель довольно сильно отличается от традиционного блокчейна вроде Биткоина. В частности, новые пользователи могут проверить это состояние, не зная полной истории транзакций, а его размер пропорционален количеству неизрасходованных выходов. Это значит, что пользователям не нужно доверять Mimblewimble при синхронизации, которая требует значительно меньшей пропускной способности соединения и объема хранилища.
В Mimblewimble используются также скрытые суммы транзакций и частично скрытые адреса входа и выхода. Однако у этого протокола есть и несколько потенциальных проблем. Во-первых, несмотря на то, что транзакции группируются в каждом добытом блоке, наблюдатель Ева все равно может попытаться выполнить анализ блокчейна, притворившись майнером и записав отдельные транзакции, которые она получает от пользователей, прежде чем они будут включены в блоки. Как мы уже упоминали ранее, объединение транзакций по протоколу Dandelion ++ может в какой-то мере снизить риск такой атаки, но пока неясно, может ли она позволить Еве сократить анонимное множество отправителя. Во-вторых, сама структура транзакций подразумевает, что в Mimblewimble отправитель и получатель должны взаимодействовать друг с другом до совершения транзакции. Это означает, что получатель должен находиться в сети, чтобы получить коины, и это может стать существенным препятствием для распространения этой технологии.
Monero
Изначально Monero (XMR) была основана на протоколе Cryptonote, описанном в белой книге автором под псевдонимом Николас ван Саберхаген в октябре 2013 года, но с тех пор концепция усовершенствовалась, и теперь включает в себя идеи Грега Максвелла и Адама Бэка. Сначала, в 2014 году валюта была запущена под названием Bitmonero анонимной командой разработчиков, а затем в результате форка из-за разногласий по поводу направления проекта образовалась Monero. Ее протокол сочетает в себе две основные криптографические идеи:
- Кольцевые подписи позволяют пользователям запутывать набор входов, участвующих в транзакции. В Monero используется расширение RingCT, которое дополнительно скрывает суммы транзакций способом, аналогичным Mimblewimble.
- Одноразовые адреса позволяют пользователям получать каждый платеж на уникальный адрес, который используется только для этого платежа, без взаимодействия с отправителем платежа.
Теперь объясним, как эти идеи реализуются в Monero.
Как и в Mimblewimble, коины в Monero представлены в виде гомоморфных обязательств (Педерсена) типа Commit(X, B) по количеству коинов X и коэффициенту маскировки B. Предположим, что у Элис есть выход на 10 XMR, и она хочет отправить 7 XMR Бобу. В Mimblewimble она бы использовала только свой выход, указав его в транзакции в качестве входа. Однако в Monero Элис должна указать входы-приманки, называемые миксинами (англ. “mixin”), чтобы наблюдатели не могли угадать, какие именно входы в действительности используются в транзакции. Для этого она создает для них кольцевые подписи.
Кольцевая подпись – это криптографическая процедура, которая создает одну подпись из одной пары закрытого/открытого ключа и набора несвязанных открытых ключей. Кольцо – это набор открытых ключей в подписи, и кольцевые подписи обладают таким свойством: пользователь, проверяющий подпись, не может определить, какой именно из участников кольца создал кольцевую подпись. В Monero используются связанные кольцевые подписи, что означает, что можно определить, используется ли один и тот же закрытый ключ для подписи двух разных сообщений; это крайне важно для обнаружения попыток двойного расходования. Схема подписи, используемой в Monero, основана на подписи, изобретенной Адамом Бэком, и адаптирована к обязательствам Педерсена; здесь мы не будем подробно на этом останавливаться.
Пример транзакции с 2 реальными входами и 6 миксинами в Monero
Чтобы Элис смогла отправить 7 из 10 своих XMR Бобу, она сначала должна выбрать как минимум 6 других выходов (не обязательно принадлежащих ей), известных как миксины. Затем она должна сгенерировать случайное число и объединить его с публичным адресом Боба и своим публичным адресом, чтобы сгенерировать два уникальных одноразовых адреса для отправки: один для оплаты 7 XMR Бобу и один для получения сдачи в 3 XMR. В результате этой процедуры мы получаем:
- два одноразовых адреса, один для Элис и один для Боба, и
- открытый ключ транзакции, выведенный из случайного числа.
Для любой транзакции Боб может объединить свой закрытый ключ и открытый ключ, чтобы проверить, является ли он получателем каких-либо выходов из этой транзакции. Если он является получателем, он также может увидеть сумму полученных XMR.
После генерации одноразовых адресов, Элис создает выходные поручения Output_Bob и Output_Change, предназначенные для каждого одноразового адреса. Затем она создает кольцевую подпись с выходом, который хочет потратить, и миксинами по своему выбору. Особенностью RingCT является то, что эта подпись может также содержать доказательство того, что
Сумма(Input_Alice) = Сумма(Output_Bob) + Сумма(Output_Change)
без сообщения стороннему наблюдателю, какой вход в кольце является истинным Input_Alice, или какая-либо из сумм – Суммы (Input_Alice), Суммы (Output_Bob) или Суммы (Output_Change).
Для того чтобы сформировать действительную транзакцию, Элис теперь должна сгенерировать доказательства диапазона (недавно в Monero был произведен хардфорк и введена поддержка Bulletproofs) для каждого выхода, чтобы показать, что количество коинов в каждом выходе является положительным, то есть
Сумма (Output_Bob) > 0 и Сумма (Output_Change) > 0.
Эти доказательства не дадут Элис подделать коины, создав поручения Output_Bob с -5 коинами и Output_Change с 15 коинами.
Сводя все это воедино, Элис может отправить транзакцию, состоящую из:
- списка входов, состоящего из входа Элис и миксинов;
- списка выходов;
- кольцевую подпись для входа Элис и миксинов (которая содержит доказательство того, что суммы входов и выходов равны);
- список адресов выходов, состоящий из одноразового адреса Боба и одноразового адреса Элис для получения остатка;
- список доказательств диапазона, по одному на каждый выход, доказывающий, что значение выхода является положительным;
- комиссия за транзакцию в открытом тексте.
Блокчейн Monero – это стандартный блокчейн на базе протокола proof-of-work, состоящий из таких транзакций. Размер кольца для каждой транзакции в Monero составляет не менее 7, а это значит, что размер анонимного множества для них как минимум равен 7. Если транзакции повторяются несколько раз, это может привести к значительному увеличению их анонимных множеств. Кроме того, в отличие от CoinJoin, такое анонимное множество можно обеспечить без взаимодействия, то есть отправителю средств не нужно координировать свои действия с кем-либо еще. Именно поэтому кольцевые подписи Monero часто называют формой децентрализованного микширования, хотя основной криптографический механизм в Monero совершенно другой.
Возможности Monero позволяют создать блокчейн со скрытыми суммами транзакций и частично скрытыми адресами входов и выходов. Хотя это и затрудняет поиск связей между транзакциями по сравнению с Биткоином, провести анализ блокчейна Monero все же возможно. Злоумышленник Дэвид может узнать, какой из нескольких возможных адресов отправителя в кольцевой подписи является реальным, если:
- он владеет ими сам;
- угадает, какие входы являются миксинами, используя эвристические данные, такие как время создания или участие в других транзакциях;
- проведет анализ использования этих входов на хардфорках Monero (см. анализ здесь).
Используя эти методы, чтобы определить, были ли израсходованы конкретные выходы или нет, Дэвид может попытаться узнать больше о настоящих входах для различных транзакций и, таким образом, выяснить, что различными выходами владеет один и тот же пользователь. В этом документе описываются схожие методы, которые применялись к начальным версиям протокола Monero (успех при этом достигался главным образом благодаря минимальному размеру кольца для каждой транзакции). Как отмечается в ответе Monero на вышеупомянутый документ, в версии анализируемого протокола размер кольца был установлен на минимальное значение – 1 – но в нынешней версии Monero он был увеличен до 7, что значительно затрудняет такой анализ.
Заключение
Методы, основанные на микшировании, в сущности, используют взаимозаменяемость криптовалют для улучшения различных аспектов их конфиденциальности. С другой стороны, сама взаимозаменяемость основывается на том, что все коины криптовалюты равнозначны и равноценны. В частности, для этого требуется возможность отделить коин от его истории транзакций, поскольку в противном случае пользователи смогли бы различать их, анализируя предыдущих владельцев или типы транзакций. Это разделение является целью самой конфиденциальности, помогая создавать симбиотические отношения между взаимозаменяемостью и конфиденциальностью на основе микширования.
На ранних этапах развития микширования, миксеры и CoinJoin использовали взаимозаменяемость, чтобы скрыть связь между отправителями и получателями транзакций. Эти методы позволяют пользователям скрывать связь между своей реальной личностью и адресом своих коинов в сети, хотя анонимное множество ограничено необходимостью доверять третьим сторонам – миксерам – и поиском участников группы в CoinJoin. Более продвинутые технологии – Mimblewimble и Monero – позволяют проводить микширование асинхронно – добавлять транзакции в блоки в случае с Mimblewimble и использовать кольцевые подписи для проведения микширования без взаимодействия в случае с Monero. В этих двух протоколах взаимозаменяемость также позволяет использовать гомоморфные обязательства (Педерсена), чтобы полностью скрыть суммы транзакций. В таблице ниже проанализировано влияние протоколов на разные аспекты конфиденциальности.
В конечном счете влияние этих протоколов на конфиденциальность будет зависеть от их способности обеспечить достаточно большие анонимные множества за счет своих криптографических свойств. Их внедрение и эволюция в реальных условиях находятся в начальной стадии, и мы рады наблюдать за тем, как они развиваются.
Будь в курсе! Подписывайся на Криптовалюта.Tech в Telegram.
Обсудить актуальные новости и события на Форуме
Запись Микширование как способ обеспечения конфиденциальности в криптовалютах впервые появилась Криптовалюта.Tech.
Криптовалюта.Tech
Автор: Saffron