Как полагают некоторые читатели, чтобы проиллюстрировать нашу идею лучше, позвольте мне дать небольшой пример с (скажем) четыре участника Алиса, Боб, Чарли, Дэйв. Участники имеют ровно 1
BTC в каждом из соответствующих адресов A, B, C, D. Предположим, что участники уже знают, что они хотели бы работать протокол друг с другом, и они знают адреса друг друга. (Поиск других участников может быть сделано с помощью протокола P2P, например.)
Участники создают свежие адреса A «B», C «D», но не показывают их друг к другу. Цель CoinJoin на основе смешения является создание смесительной транзакции с входным адресом А, В, С, D и выход адрес А «В», С «D», чтобы скрыть связь между монетами и их владельцами. (Если это не ясно, почему такие сделки возможны, я рекомендую прочитать
нить о CoinJoin). Однако, если мы будем придерживаться этого конкретного порядка А «B», C «D» выходных адресов, каждый хотел бы узнать, что А принадлежит А «В принадлежит B», и так далее. Поэтому нам нужно перетасовать список выходных адресов, чтобы убедиться, что связь входных и выходных адреса остается скрытой. Но только перетасовки выходных адресов в созданной транзакции не хватает: Например, если все только что объявило его выходные адреса во время протокола в простом, то есть, Алиса сообщает A «все узнают, что А» принадлежит Алисе. Таким образом, мы должны убедиться, что сообщения, отправленные во время протокола не нарушают анонимность. CoinShuffle решает именно эту проблему.
Успешный запуск протокола выглядит следующим образом: (Обратите внимание, что описание упрощенное, все детали находятся в
бумага.)
Все сообщения подписываются с помощью ключа подписи частного, принадлежащего к входному адресу отправителя сообщения. Я опуская подписи в последующем описании для упрощения изложения.
Этап 1: Обмен ключамиКаждый участник (за исключением Элис) создает пару ключей из ключевой схемы общественного шифрования, состоящий из открытого ключа шифрования и секретного ключа дешифрования. Мы называем общественные ключи шифрования Е, ЕКС и ЭКД. Каждый участник объявляет свой открытый ключ шифрования, подписанный с помощью ключа подписи, соответствующего его / ее ввода адреса.
Фаза 2: ПеретасовкаПосле того, как все знают открытый ключ шифрования друг друга, перестановка может начать:
Алиса шифрует ее выходной адрес А»со всеми ключами шифрования, в виде слоев. То есть, Алиса шифрует «первый Дэйва, получение прил (ЭКД, А»). Затем этот шифротекста шифруется для Чарли, получение прил (ЕКС, ENC (ЭКД, A ')) и так далее для Дэйва. Это в результате чего посылается сообщение Бобу:
Алиса -> Боб: ENC (EKB, ENC (ЭКК, ENC (ЭКД, А ')))
Боб получает сообщение, расшифровывает его, получая прил (ЕКС, ENC (ЭКД, A ')).
Он также создает вложенное шифрование своего адреса, получение прило (ЕКС, ENC (ЭКД, B ')).
Теперь у Боба есть список два шифртекстов, содержащий A «и B». Боб перемешивает этот список случайно, то есть, либо обменивает две записи или оставить их. Скажем, у нас есть в том случае, когда они обмениваются. Боб посылает перемешиваются список Чарли:
Боб -> Чарли: ENC (ЭКК, ENC (ЭКД, В ')); ENC (ЭКК, ENC (ЭКД, А '))
Участник C делает то же самое: Он расшифровывает две записи в списке, добавляет свой собственный вход и перемешивает список:
Чарли -> Дэйв: ENC (ЭКД, В '); ENC (ЭКД, С '); ENC (ЭКД, А ')
Дейв делает то же самое снова: Он расшифровывает все записи, получение B «C», A». Он добавляет свой собственный адрес D»и
перемешивает список. Полученный перемешиваются список направляется всем:
Дейв -> все: D 'В', С 'А'
Этап 3: Создание сделкиКаждый участник получает список выходных адресов и может убедиться, что его выходной адрес действительно существует. Если да, то он подписывает сделку. Если, например, Боб видит, что его адрес не существует, он потеряет свою монету, выполняя операцию, так что он явно не хочет подписывать. (Это основная идея
CoinJoin.)
В том случае, если адрес Боба не существует, кто-то должен быть обманут во время запуска протокола. Боб жалуется и участники ввести дополнительный этап, чтобы узнать, кто изменял. CoinShuffle убеждается, что это "фаза вина" всегда выставляет по крайней мере, один из участников обмана (и никто не может быть обвинен ложно). Это обман участник может быть исключен из последующего запуска протокола: Say Алиса обманутой. Затем Боб, Чарли и Дейв могут запустить протокол снова без Алисы.
Ключевым моментом является то, что в фазе 2, только участник, выполнивший перетасовки знает связь между сообщениями в списке, который он получил и сообщения в списке, который он послал.
К примеру, только Чарли знает, что он оставил сообщение, содержащее B»в первой позиции, так как шифрование гарантирует, что никто не может связать прил (ЕКС, ENC (ЭКД, B„)) и прил (ЭКД, B“). Но даже Чарли не знает, что это сообщение с адресом Боба.
В конце концов, все адреса честных участников перемешиваются, как описано в предыдущей публикации.
Никто не знает перестановку. (Подробный аргумент можно найти в
бумага.)
Заметка: Протокол работает, даже если участники не имеют ровно 1
BTC на их входные адреса. Достаточно, чтобы они, по крайней мере, 1
BTC. В этом случае они создают сделку, которая посылает 1
BTC к каждому из перемешанных выходных адресов и остальных монет к изменению адресов, которые пользователи объявляют в начале. Это может быть сделано как для обычных операций Bitcoin. (Эта идея также описана в
CoinJoin уже.)
Кстати, нам удалось улучшить время выполнения. Используя наши
реализация прототипа, протокол запуска 50 участников занимает около 3 минут, теперь в условиях, которые мы рассмотрим в статье.
Сравнение с другими подходамиMixcoinГлавное новшество Mixcoin является отчетность для смешивания серверов (
смеси): Если сервер смеси крадет монеты, пользователь получает криптографическое доказательство этой кражи и может держать подотчетный микс. Это делается в общественных местах: Каждый может проверить это доказательство и смесь, мы надеемся, потеряет свою репутацию, и никто не будет использовать смесь в будущем. Смесь все еще может украсть деньги, но это будет пойман и, вероятно, должен выйти из бизнеса.
В отличие от этого, преимущество CoinShuffle является то, что он предотвращает кражу монет, в первую очередь, вместо предоставления отчетности только после кражи. Кроме того, централизованный сервер микширование вовсе не обязательно в CoinShuffle.
Zerocoin / Zerocash / AnoncoinZerocoin (и предстоящая оптимизировано Zerocash) являются большими, потому что они обеспечивают "встроенный в анонимности" с помощью достаточно новая криптографии, например, ZK-SNAKRS. Тем не менее, их собственные валюты. Zerocoin и Zerocash не совместимы с Bitcoin, они нуждаются в своих собственных расширений протокола и цепи. Например, Zerocoin реализуется в Anoncoin, в altcoin. CoinShuffle работает непосредственно на Bitcoin, без изменения протокола Bitcoin или разветвления цепи.
CoinSwapСамое главное, участники знают, какие монеты принадлежат к которым пользователь в CoinSwap, поэтому анонимность ограничена. Кроме того, CoinSwap требуется по меньшей мере 4 операции и соответствующие сборы. CoinShuffle нужна только одна сделка. Однако, по существу CoinSwap протокол два партии, поэтому она требует меньше взаимодействий и координации.
оригинальный CoinSwap нить обеспечивает детальное сравнение с CoinJoin, который обеспечивает основу для CoinShuffle.