Полезные статьи

CoinJoin, CoinShuffle и Stealth-Addresses — Разбираемся с анонимностью.

CoinJoin

CoinJoin — это протокол, который усиливает конфиденциальность транзакций биткоина. С его помощью несколько сторон могут отправлять средства в рамках одной транзакции без риска кражи. Был впервые предложен в 2013 году.

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

Исследователи-криптографы предложили различные дополнения к концепции протокола:

  • сопоставление ордеров (JoinMarket),
  • ослепление (термин из криптографии) для улучшения конфиденциальности (CoinShuffle, Chaumian Blinded Signatures),
  • отказ в обслуживании (CoinShuffle).

Предложение появилось на bitcointalk от Грегори Максвелла (ник — gmaxwell).

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

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

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

CoinJoin, CoinShuffle и Stealth-Addresses - Разбираемся с анонимностью.

Самый простой пример. Есть два участника CoinJoin, каждый вводит 1 BTC и получают выход в 1 BTC. Для простоты предположим, что комиссия за транзакцию не взимается.

CoinJoin, CoinShuffle и Stealth-Addresses - Разбираемся с анонимностью.

Операция использует один или несколько входов и создает один или несколько выходов с заданными значениями.

Каждый вход представляет собой результат прошлой транзакции. Для каждого входа есть отдельная подпись (scriptsig), которая создается в соответствии с правилами, указанными в прошлом выходе (scriptpubkey).

CoinJoin, CoinShuffle и Stealth-Addresses - Разбираемся с анонимностью.

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

Нет требования, чтобы деньги на выходе использовались одинаково: не требуется переводить BTC по одному и тому же адресу.

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

CoinJoin, CoinShuffle и Stealth-Addresses - Разбираемся с анонимностью.

Большинство транзакций в сети биткоина все-таки проводятся с комиссией майнерам. В этом случае ее оплата может решаться такими способами:

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

Идею можно использовать более общим способом: проводить совместные платежи для уменьшения веса.

Существует несколько реализаций анонимных транзакций биктоина, вдохновленных CoinJoin: SharedCoin, Dark Wallet, DarkSend в Altcoin Dash и JoinMarket.

CoinShuffle

Исследователи из немецкого университета Саарланда предложили новый принцип под названием CoinShuffle. Их подход основан на CoinJoin, но лишен основного недостатка — деанонимизации пользователей групповых транзакций друг перед другом. Здесь пользователи как и раньше договариваются, но делают это применяя криптографию.

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

Второй этап лучше проиллюстрировать картинкой. Первой по цепочке выступает Алиса. Алиса зашифровывает выходной адрес и сумму перевода ключом Чарли, стоящего в цепочке последним. После чего полученный результат Алиса еще раз шифрует уже ключем Боба, стоящего вторым. Получившуюся матрешку Боб сначала расшифровывает своим ключом и получает часть транзакции Алисы, узнать которую у него нет возможности, так как она зашифрована ключем Чарли. Боб зашифровывает также и свою часть транзакции ключем Чарли, а затем “перемешивает” свою и ту, что получил от Алисы. В данном смысле о перемешивании в контексте всего друх элементов можно говорить только подразумевая, что Чарли, стоящий в цепочке последним будет знать какая из двух чья только с 50% вероятностью. Далее Боб передает Чарли обе транзакции, свою и Алисы, зашифрованные ключем Чарли. Чарли их расшифровывает, добавляет свою часть, еще раз перемешивает уже три элемента и наконец формирует транзакцию, которую и предлагает на подпись всем остальным. Нужно заметить, что хоть Чарли и вставил свою транзакцию последним, Алиса обладает также всего 50% уверенностью где из них чья.

CoinJoin, CoinShuffle и Stealth-Addresses - Разбираемся с анонимностью.

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

CoinShuffle обладает своими недостатками. Алиса, к примеру, не может знать, что Боб и Чарли не находятся в сговоре, либо вообще не являются одним и тем же лицом, поэтому ее выходной адрес в данном случае можно вычислить. Эта проблема решается большим количеством перемешиваний с большим количеством различных участников, что может быть автоматизировано при помощи ПО.

CoinShuffle уже реализован в коде. На семинаре Bitcoin SF Devs Seminar бывший работник Google, а ныне один из разработчиков Биткоин по имени Брайан Ву показал работающий прототип кошелька с применением CoinShuffle. На видео он рассказывает о методе и демонстрирует разработку перед немногочисленной публикой.

Stealth-Addresses

Stealth-адреса “адреса-невидимки” — это еще один вполне стандартный способ сокрытия платежей несмотря на тот факт, что Blockchain является открытой базой адресов. В отличие от CoinJoin и CoinShuffle здесь не происходит запутываний, здесь сокрытие происходит совсем по другому принципу — благодаря протоколу Диффи-Хеллмана (Меркла).

CoinJoin, CoinShuffle и Stealth-Addresses - Разбираемся с анонимностью.

Протокол Диффи-Хеллмана позволяет сторонам по публичному каналу обменяться данными для получения, т.н. shared secret, или “общего ключа”. Общий ключ таким образом остается секретным при сторонах, а затем может быть использован для установления полноценного секретного соединения на основе классического симметричного шифрования или как-либо еще. Надежность протокола Диффи-Хеллмана основана на том факте, что как обычно, у атакующего не хватит компьютерных мощностей на поиск секретной составляющей, даже подслушав публичные ключи. Хорошую иллюстрацию дает Википедия: здесь Алиса и Боб путем обмена публичной информацией об одной составляющей случайно выбранного ими цвета, в результате слияния цветов получили один на всех разделяемый секрет (“общий ключ”) с условием, что атакующий не может произвести обратную операцию.

Именно этот принцип и заложен в основе адресов-невидимок, только протокол Диффи-Хеллмана применили к эллиптическим кривым, на которых построена криптография Биткоин. Работает следующим образом:

  1. Желающий принимать платежи (продавец) создает пару ключей: приватный d и публичный Q. Затем Q можно сообщить по публичным каналам желающему осуществить платеж (покупателю) или попросту опубликовать у себя на сайте. В дальнейшем Q никак не будет фигурировать в Blockchain, а посему его следов не останется.
  2. Покупатель так же создает свою пару ключей: публичный P и приватный e. Полученный публичный ключ P отправляется продавцу в поле метаданных платежа.
  3. Используя публичный ключ продавца Q и свой приватный ключ e, покупатель может получить c — общий ключ. Продавец проделывает похожие манипуляции со своим приватным ключом и публичным ключом покупателя и получает тот же самый c. Из c при помощи преобразований можно получить собственно адрес платежа A(покупатель сделал это в пункте 2). Адрес платежа случаен при условии, что покупатель создавал ключи случайным образом. Адрес известен только двум сторонам.

Продавец слушает или сканирует Blockchain на предмет stealth-платежей и к каждому из них применяет преобразования из пункта 3 (либо покупатель сообщает о совершении платежа как-либо еще). Если на основе метаданных какой-либо транзакции и собственного приватного ключа d, продавцу удалось получить адрес и он совпал с адресом транзакции A, то продавец может быть уверен, что платеж Комбинируя c со своим приватным ключом d, продавец может получить новый приватный ключ, дающий ему доступ к кошельку A.

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

Похожие статьи

Кнопка «Наверх»
Закрыть