Под “псевдонимностью” Биткоин подразумевают возможность проследить передвижение средств между адресами. Действительно, Blockchain открыт для всех желающих — это и есть одно из главных достоинств Биткоин. Благодаря следу, оставленному деньгами в этой распределенной бухгалтерской книге можно затем идентифицировать их владельца, если он как-нибудь себя выдаст: например, попытается разменять криптовалюту на фиат на бирже, требующей скан паспорта. Если кто-то думает, что это единственный способ себя выдать, то боюсь разочаровать, существует еще множество способов узнать кое-что о владельце кошелька.
К примеру, специалисты по безопасности из Пенсильванского университета продолжительное время изучали аномалии в сети Биткоин подключившись одновременно ко всем доступным узлам сети и наблюдая за распространением информации о транзакциях (т.н. relay traffic). Дело в том, что когда кто-то пользуясь “тяжелым кошельком” осуществляет перевод средств, то информация об этой транзакции должна сначала распространиться по сети, от узла к узлу. Подключившись одновременно ко всем проанонсированным узлам, логично предположить, что узел, приславший транзакцию быстрее всех и является владельцем адреса, а значит IP адрес владельца становится известен. Это конечно не касается различных сервисов web-кошельков, но там владельцы кошельков деанонимизируют себя еще жестче — KYC и логи серверов.
В спорах разрешать Биткоин или нет часто звучит аргумент, что Биткоин “псевдонимен”, т.е. не совсем анонимен, а значит проблем с законом можно избежать. Тем не менее, в этой статье мы покажем, что так называемая “псевдонимность” — это скорее добровольная опция, чем обязательное свойство.
CoinJoin
Как все мы помним, Сатоши определил Биткоин как “электронную наличность”, а что отличает обычные наличные от, скажем, электронных денег? А то, что наличные анонимны и децентрализованы. Например, вы можете встретиться с незнакомцем в темном переулке: он вам товар, скажем, щенка ротвеллера, а вы ему 100 долларов. Ни вы продавца не видели, ни он вас, и о своей сделке вы разболтать не сможете, так как попросту ничего не знаете. Отчасти благодаря этому свойству кэш и популярен до сих пор, и по-видимому будет популярен еще очень долгое время. Именно с помощью наличных финансируются все темные дела на этом свете, но запрещать их почему-то никто не стремится.
Псевдонимность Биткоин не является какой-то особой проблемой, ведь 99% населения не занимаются ничем предосудительным. Тем не менее, должен работать принцип неприкосновенности частной жизни: “мне нечего скрывать, просто это не ваше дело“. Отсюда, множество криптографов и специалистов по безопасности принялось работать над тем, как вернуть Биткоин изначально заявленную анонимность, а значит и право называться “наличностью”.
Как обычно, способов нашлось больше одного. Например Zerocoin с его слепыми подписями, который был отвергнут ядром разработчиков Биткоин, так как здорово увеличивал размеры и без того раздутого Blockchain.
Специалист по безопасности по имени Грегори Максвелл предложил “CoinJoin”. Этот подход был проще, чем используемый в Zerocoin, и не требовал модификации протокола или Blockchain. Максвелл напомнил всем, что обычная транзакция в системе Биткоин может иметь не только несколько выходов, но и больше одного входа. Если два различных адреса желают осуществить перевод, то они могут создать одну на двоих транзакцию, договориться о выходах, а принять такую сделку сеть может только в том случае, если транзакция будет подписана одновременно обоими адресами.
Предложенный подход тут же был взят на вооружение. Компания Blockchain.info открыла отдельный сервис Shredcoin, а разработчики DarkWallet заявили о поддержке CoinJoin с самого начала. Принцип работы в обоих случаях очень прост. Пользователи, желающие воспользоваться CoinJoin подключаются к своего рода “чату”, где их ждут такие же желающие осуществить свои транзакции. Далее они (а вернее их ПО) договариваются о синхронизации своих действий и создают общую, одну на всех транзакцию с множеством входов и выходов, а затем все дружно подписывают результат. Смысл такой транзакции в том, что наблюдатель со стороны не может точно определить какой выход соответствует какому выходу. Средства как бы сливаются в одну кучу из разных источников (подобно тому, как это происходит в сервисах-миксерах), а затем уходят по множеству совершенно других адресов. Определение пути не работает, даже если сделать предположение, что каждому из входов должен соответствовать ровно такой же (минус комиссия) по сумме выход — пользователи просто создают дополнительные “адреса для сдачи”, так что кто куда и что перевел становится не понятно совсем. Стоит ли упоминать, что CoinJoin можно повторять многократно?
CoinJoin хорош, но все-таки анонимен не полностью. Во-первых, пользователям надо где-то встретиться, а централизованный “чат” может вести записи. От этой проблемы спасает TOR, но другая нерешаемая проблема состоит в том, что пользователи, подписываюшие групповую CoinJoin-транзакцию знают друг о друге слишком много. Они знают, например, какой адрес куда сколько перечисляет и на какой адрес вернуть сдачи. Эти данные также могут записываться, в результате чего кое-кто может оказаться деанонимизированным.
Не смотря на данный недостаток, CoinJoin был признан “достаточно безопасным” и даже появилось обсуждение о встраивании этой функциональности в официальный клиент Bitcoin Core. Как знать, может быть скоро мы бы уже увидели этот функционал в стандартной поставке, если бы не появилось кое-что получше.
CoinShuffle
Исследователи из немецкого университета Саарланда предложили новый принцип под названием CoinShuffle. Их подход основан на CoinJoin, но лишен основного недостатка — деанонимизации пользователей групповых транзакций друг перед другом. Здесь пользователи как и раньше договариваются, но делают это применяя криптографию.
Процесс разделен на три этапа. Сначала все пользователи аносируют свои адреса, с которых желают осуществить свои переводы. Адреса выходов и суммы переводов не оглашаются. Также пользователи генеруруют так называемые “эфемерные”, т.е. одноразовые ключи, которые будут использоваться для подписи. Публичные части ключей сообщаются остальным участникам. Также стороны договариваются о порядковом номере в цепочке.
Второй этап лучше проиллюстрировать картинкой. Первой по цепочке выступает Алиса. Алиса зашифровывает выходной адрес и сумму перевода ключом Чарли, стоящего в цепочке последним. После чего полученный результат Алиса еще раз шифрует уже ключем Боба, стоящего вторым. Получившуюся матрешку Боб сначала расшифровывает своим ключом и получает часть транзакции Алисы, узнать которую у него нет возможности, так как она зашифрована ключем Чарли. Боб зашифровывает также и свою часть транзакции ключем Чарли, а затем “перемешивает” свою и ту, что получил от Алисы. В данном смысле о перемешивании в контексте всего друх элементов можно говорить только подразумевая, что Чарли, стоящий в цепочке последним будет знать какая из двух чья только с 50% вероятностью. Далее Боб передает Чарли обе транзакции, свою и Алисы, зашифрованные ключем Чарли. Чарли их расшифровывает, добавляет свою часть, еще раз перемешивает уже три элемента и наконец формирует транзакцию, которую и предлагает на подпись всем остальным. Нужно заметить, что хоть Чарли и вставил свою транзакцию последним, Алиса обладает также всего 50% уверенностью где из них чья.
На третьем этапе, если стороны видят, что получившаяся итоговая транзакция каждую из них устраивает, они ее подписывают ключом от своего входного адреса и выставляют в Blockchain на подтверждение.
CoinShuffle обладает своими недостатками. Алиса, к примеру, не может знать, что Боб и Чарли не находятся в сговоре, либо вообще не являются одним и тем же лицом, поэтому ее выходной адрес в данном случае можно вычислить. Эта проблема решается большим количеством перемешиваний с большим количеством различных участников, что может быть автоматизировано при помощи ПО.
CoinShuffle уже реализован в коде. На семинаре Bitcoin SF Devs Seminar бывший работник Google, а ныне один из разработчиков Биткоин по имени Брайан Ву показал работающий прототип кошелька с применением CoinShuffle. На видео он рассказывает о методе и демонстрирует разработку перед немногочисленной публикой.