Balthazar о миксинге и анонимности

Собственно, Zerocoin нам и не очень-то нужен для этого. Основной проблемой классических миксеров является то, что они могут сбежать с монетами, т.к. перемешиваемые монеты проходят через их кошелек и временно даются им в полное распоряжение. Однако, это не является единственно возможным вариантом. К примеру, возможен такой концепт:

Дано:

Алиса поддерживает свой сервис для очистки монет, в её распоряжении является некий объем выходов с разными адресами и суммами (публичный, либо доступный по запросу). Боб имеет на руках «серые» 10 NVC, и хочет сделать «неочевидной» их историю.

Что делаем:

1. Боб создает транзакцию, в которой включает свои 10 NVC на входе плюс взятый из блокчейна выход Алисы.
2. На выходах добавляет возврат монет Алисы на адреса, с которых они были взяты (+ небольшое вознаграждение), и создает выход для своей суммы.
3. Боб подписывает транзакцию ключами от своих входов и отправляет её специальным сообщением JOIN_TX.
4. Алиса получает новое сообщение JOIN_TX, видит что в нем использованы её инпуты. Если в клиенте соответствующие инпуты были ранее ей помечены, как доступные для перемешивания, то происходит проверка суммы на выходе с последующим подписыванием и отправкой в сеть полноценной транзакции.

Результат:

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

Конечно, одностадийный процесс менее эффективен, чем известные миксинг-сервисы, которые делают множество итераций с разбивкой-склеиванием. Однако, и здесь ничто не мешает повторять процесс произвольное количество раз. Для защиты от DoS атак можно использовать proof-of-work таким образом:

while (scrypt(tx) < join_target) {
    tx = txNew;
    tx.nTime = GetTime();
    signScripts(tx);
}

Где join_target может определяться миксинг-сервисом, либо меняться в зависимости от количества корректных JOIN-транзакций в буфере, к примеру.

Главное и очевидное преимущество — итоговые транзакции ничем не отличаются от «обычных», а потому не требуется никаких изменений в протоколе.

Возможные вариации:

1. Создание выходов на адреса, указанные Алисой, с рекомендуемым ей распределением части монет, которой она владеет.
2. Использование рандомизированного распределения монет Боба на выходах.
3. <…>

Quote from: rPman on February 26, 2014, 04:06:53 PM

Quote from: Balthazar on February 26, 2014, 02:18:23 PM

Собственно, Zerocoin нам и не очень-то нужен для этого. Основной проблемой классических миксеров является то, что они могут сбежать с монетами, т.к. перемешиваемые монеты проходят через их кошелек и временно даются им в полное распоряжение. Однако, это не является единственно возможным вариантом. К примеру, возможен такой концепт:

но забыли еще одну проблему миксеров — миксер ЗНАЕТ историю перемешанных монет, так как он определяет чьи входы кому отправлять.

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

Пример:

10 монет от Алисы => |   | => 4.99 монет
                     |   | => 3.99 монет
                     |   | => 1 монета
10 монет от Боба  => |   | => 10.01 монет

Ну и кто здесь есть кто? Алиса даже не сможет доказать кому-то, что другие 10 монет не принадлежат ей и что транзакция не является обычным переводом 20 монет ХЗ кому. Кроме того, все три первых выхода могут принадлежать совершенно разным людям, которые могут даже и не подозревать о том, что в транзакции имел место какой-то посредник. И это всего лишь единичная ситуация, а что будет в случае массовой автоматизации процесса? А если к выходам добавлять еще выходы с типом SIGHASH_NONE или ANYONECANPAY, которые могут и будут тратить любые участники сети? Полная мозголомка будет, вот что… Что и нужно.

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

Quote from: rPman on February 26, 2014, 04:06:53 PM

Даешь обработку транзакций на базе гомоморфного шифрования

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

Quote from: cullet on February 26, 2014, 04:20:58 PM

Идея отличная, а В NVC клиент будет встроен такой своего рода «майнинг» с процентами от «отмытого»?

Пока непонятно, но вполне возможно. Кстати, в Bitcoin рано или поздно подобный механизм будет реализован (core девелоперы активно обсуждают такие схемы). Но вряд ли попадет в официальный клиент в ближайшее время, потому что Bitcoin Foundation слишком озабочены «дружбой» с сильными мира сего.

Quote from: ShadowAlexey on February 26, 2014, 05:22:21 PM

Quote from: Balthazar on February 26, 2014, 04:54:41 PM

Quote from: cullet on February 26, 2014, 04:20:58 PM

Идея отличная, а В NVC клиент будет встроен такой своего рода «майнинг» с процентами от «отмытого»?

Пока непонятно, но вполне возможно. Кстати, в Bitcoin рано или поздно подобный механизм будет реализован (core девелоперы активно обсуждают такие схемы). Но вряд ли попадет в официальный клиент в ближайшее время, потому что Bitcoin Foundation слишком озабочены «дружбой» с сильными мира сего.

А не слишком ли это привлекает к себе внимание «гос. служб»?

И почему не поддержать Zerocoin? В идеале можно было бы еще и рассмотреть возможность обмена валютами через общую поддержку Zerocoin(аля p2p биржа), т.е. когда не только происходит микс, но еще и разные номиналы… Т.е. закидываешь ты в систему монеты с пометкой обменять на столько то другого, и имеешь на выходе права на другую валюту…

На самом деле этот пост не к тому, что мы не будем поддерживать Zerocoin в будущем. А больше к тому, что Bitcoin вполне может реализовать децентрализованный миксинг без изменений протокола. То есть, протокол Zerocoin не является безальтернативным решением, как многие думают. Если речь лишь о миксинге, то в BTC и форках это возможно уже сейчас, но вручную.

Что же до обмена через общую платформу на базе Zerocoin, то это проблематично. Весь смвсл протокола в том, что он не сохраняет никаких связей. Юзер создает одну монету Zerocoin и потом её обналичивает, это атомарная операция. То есть, у монеты Zerocoin есть номинал в валюте сети, и он фиксирован. Пользователь не может указать свой номинал, потому что при обналичивании нельзя будет его проверить. Поэтому кросс-сетевое обналичивание монет серьезно ограничено… Возможен лишь обмен по курсу, равному соотношению номиналов.

Quote from: rPman on February 28, 2014, 02:39:03 AM

не поддерживающими zerocoin?

Откуда вообще мысль о том, что Zerocoin имеет отношение к данному механизму? Вообще-то, концепция склеивания инпутов является прямым конкурентом Zerocoin на поле децентрализованного миксинга, о чем пару раз уже было сказано выше прямым текстом.

Quote from: rPman on February 28, 2014, 02:39:03 AM

Вот это мне не понятно, как это можно сделать без потери совместимости с клиентами,

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

Quote from: rPman on February 28, 2014, 02:39:03 AM

Или в данный момент основывается на том что майнер может запихнуть абсолютно любую транзакцию в блокчейн, правда я пока не понимаю, какими именно должны быть эти JOIN_TX транзакции, ведь их ‘выходы’ должны тогда быть понятны старым клиентам, а текущий bitcoin полностью основывается на существовании истории.
Можно на примере псевдоязыка описать пример такой транзакции?

Нет никакой транзакции JOIN_TX, включаемой в блокчейн. Эта концепция подразумевает лишь дополнение протокола сообщениями «У меня есть вот эти инпуты, хочу поменяться на любые ваши с такой-то суммой» или «Я хочу вот эти инпуты, дам столько-то BTC за них». Поддержка данных сообщений позволит реализовать транзакцию, подобную этой, не прибегая к помощи доверенных сторон:

Mixing by JOIN_TX in Novacoin principle

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

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

Quote from: rPman on February 28, 2014, 02:39:03 AM

Спорное утверждение. Я например считаю что это совершенно нормально, что то шифровать в публичной базе данных!
p.s. ‘Блокчейн’ никому ничего не должен

Можно долго об этом спорить, но для предотвращения многих возможных конфликтных ситуаций и рождения конспирологических теорий идеологически ещё Сатоши и другими членами core dev team было принято такое волюнтаристское решение. Оно может быть озвучено в виде принципа «nothing in Bitcoin is encrypted». Можно считать это твердолобой догмой и т.п., но она является вполне разумным решением. Естественно, пользователь может включать в блокчейн любые данные, в том числе и зашифрованные, но они не нужны клиенту для проверки транзакций. Это просто блоки данных и все.

Quote from: RoadTrain on February 28, 2014, 06:52:27 AM

Это вроде CoinJoin, насколько я понял?

Абсолютно верно.

Кстати, обсуждение реализации CoinJoin для BTC:

https://bitcointalk.org/index.php?topic=279249.0;all

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *