Основы анонимности
Децентрализованное микширование
Факт, что экосистема микширования в настоящее время не существует, является причиной, по которой многие люди предлагали децентрализованное микширование. Рассмотрим преимущества децентрализованного микширования.
При децентрализованном микшировании пользователь не проходит через специально выделенный сервис микширования. Вместо этого он обнаруживает сообщество, в котором всем необходимо микширование и без какой-либо центральной координации или, по крайней мере, центральной службы, которая собирает средства, пользователи микшируются друг с другом. Это решает проблему начальной загрузки. В такой системе невозможна кража, и это обеспечивается с помощью технических средств, потому что никто не отправляет Биткойны непосредственно другому пользователю. Также обеспечивается лучшая анонимность. Как именно это происходит, будет рассмотрено далее.
И, наконец, нужно отметить, что это идеологически соответствует Биткойну. Если можно избавиться от необходимости иметь централизованный сервис для какой-либо цели, то обязательно найдется много пользователей Биткоин, которые сочтут эту идею привлекательной.
Основное предложение о децентрализованном смешивании называется Coinjoin (Объединение монет). Оно было предложено Грегом Максвелом, являющимся одним из разработчиков биткоина.
Он предложил, чтобы разные пользователи собирались вместе для создания одной транзакции биткойнов, которая объединяет все их входы, предположительно, равной величины. Как уже известно из предыдущих лекций, в биткойне все подписи, соответствующие различным входам, полностью разделены. Поэтому каждая входная подпись самостоятельна. Это позволяет пользователям легко создавать разные входы, а также разные выходные адреса, соответствующие разным пользователям и рандомизировать порядок их взаимодействия.
Возможна ситуация, когда пользователи, участвующие в протоколе, будут знать, какой адрес ввода соответствует адресу вывода, хотя этого тоже можно избежать. Но если кто-то со стороны смотрит на блок-цепочку, рассматривая только единую транзакцию, даже если он понимает, что это транзакция Coinjoin, он не сможет сопоставить вход и выход. В этом суть Coinjoin.
Конечно, это всего лишь один раунд микширования. Далее необходимо применить те способы, о которых было рассказано ранее в этой лекции.
Давайте рассмотрим одну транзакцию в алгоритмической форме.
Пользователи, которые хотят сделать микширование, должны найти друг друга. После этого они должны обменяться друг с другом своими входными и выходными адресами. При этом не имеет значения, кто конкретно из этих пользователей будет формировать транзакцию. Но уже есть неподписанная транзакция, соответствующая отправке от этих различных входов на эти разные выходы.
И тогда узлы передают ее, собирая подписи от каждого из участников. Теперь, если участник, который сформировал транзакцию, был нечестен и, например, пропустил один из выходов других участников, протокол прекратит работу, так как другие участники ее не подпишут.
Но если все в порядке, все действуют честно, тогда сделка состоится. И теперь любой партнер может транслировать транзакцию в сеть. Два из них могли бы сделать это независимо, это не имеет значения, транзакция, конечно, будет учитываться только один раз.
Свойство безопасности обеспечивается каждым участником, проверяющим, что его выходной адрес представлен, и что у них на выходе получается по меньшей мере столько же, сколько на входе.
Протокол кажется достаточно простым. Но есть три проблемы.
Первая проблема - как участникам этой группы найти друг друга?
Вторая заключается в том, что участникам известна связь между входами и выходами по крайней мере одного из участников. Эта проблема опаснее для децентрализованных миксеров, чем для централизованных. В случае централизованного микширования можно надеяться, что разные миксеры контролируются разными субъектами, которые не сговариваются друг с другом по разным причинам. Подобный принцип справедлив и для децентрализованных миксеров, если известно что-то об их идентификации. Другими словами, миксеры, имеющие известные идентификаторы и являющиеся авторитетными, уменьшают проблему анонимности.
В случае с децентрализованным вариантом микширования один злоумышленник может создать множество легальных счетов. Анонимность пользователя будет потеряна, даже если он вошел в серию Coinjoins, если в каждом из этих Coinjoins по крайней мере один из участников был атакующим или контролировался одним и тем же злоумышленником.
И третья проблема - это отказ в обслуживании. Может случиться так, что после предоставления входных и выходных пар один из узлов исчезает и отказывается подписывать результирующую транзакцию. Таким образом, транзакция не будет проведена. И, во-вторых, даже после создания подписи и до того, как транзакция сможет транслироваться в сеть и стать подтвержденной, один из узлов, который может оказаться вредоносным, может принять этот вход и потратить его в другой транзакции, не связанной с этим Coinjoin. И поэтому в Coinjoin это будет выглядеть как попытка двойной траты и платеж будет отклонен большей частью сети Биткоин.
Рассмотрим возможные решения для каждой из этих трех проблем.
Есть очень простое решение, чтобы найти участников. Необходимо использовать ненадежный сервер, к которому разные пользователи могут подключаться и находить друг друга. Но сервер не обязательно каким-либо образом связан с тем, как будет выполняться протокол, которому уже должны доверять пользователи.
Для решения проблемы анонимности узла существует простое решение Strawman (соломенное пугало, подставное лицо). Пользователю нужно передать набор входов и выходов всем одноранговым узлам, но при этом сломать связь между входом и выходом. Теперь это становится проблемой анонимности сообщений вместо проблемы анонимности Биткойн. Для этого можно использовать Tor. Участники собираются вместе, обмениваются входными адресами, разъединяются. Затем повторно подключаются к Tor и обмениваются выходными адресами.
На практике это недостаточно надежный способ. Лучшим решением может стать создание механизма маршрутизации, специально предназначенного для обеспечения анонимности участников этого протокола – дешифровальные микс-сети.
Рассмотрим решение третьей проблемы – отказ в обслуживании. Традиционное решение против отказа в обслуживании - сделать дорогим для клиента подключение к серверу и получение услуги. Несмотря на то, что сеть Биткоин является однорагновой, можно попытаться адаптировать те же принципы. Принцип, лежащий в основе первых двух предлагаемых решений для отказа в обслуживании, либо доказательства работы, либо доказательства того, что услуга сгорела. Доказательство работы просто перекладывает алгоритм, лежащий в основе доказательства работы Биткойна, чтобы каждый из этих узлов выполнял небольшую вычислительную работу, прежде чем они могли присоединиться к протоколу Coinjoin.
Благодаря этому, если потенциальный противник хочет взломать каждый Coinjoin, ему придется сделать очень много вычислительной работы. Доказательство сжигания - аналогичная концепция. Она также называется Fidelity Bonds в биткойне. Концепция позволяет необратимо уничтожить некоторые биткойны, отправив их на нерасходуемый адрес.
Таким образом в основе первых двух решений лежит повышение стоимости вхождения в протокол. Следующие два решения заключаются в выявлении одного или нескольких злонамеренных участников, которые запустили отказ в обслуживании, чтобы их выгнать и запустить Coinjoin вместе с оставшимися участниками. Это можно сделать в случае доверия к серверу.
Это можно было бы сделать и в чисто децентрализованной манере, как это предлагал документ под названием CoinShuffle. Был разработан криптографический протокол обвинений. Он предполагает так называемое "нулевое знание" - любой из участников протокола может распознать нарушителей, не имея каких-либо доказательств. При этом остальные участники откатывают назад работу протокола.
Существует также понятие боковых каналов. Следует отметить, что боковые каналы могут быть очень сложными. Не все виды микширования могут спасти от потоков высокого уровня, которые могут быть идентифицированы. Рассмотрим пример. Скажем, пользователь Алиса получает еженедельно определенное количество биткойнов в качестве дохода. И имеет привычку всегда автоматически и немедленно переводить 5% от суммы на свой пенсионный счет.
Шаблоны, по которым происходит оплата, будут видны в цепочке блоков. Независимо от того, что Алиса делает, чтобы скрыть связь между адресом, от которого она получает свой доход, и адресом, на который она передает свои пенсионные накопления, шаблоны здесь будут однозначно идентифицироваться, потому что это очень специфическое значение, и 5% также будет конкретным значением. И есть также шаблон времени, каждый раз, когда деньги появляются
Как можно защититься от этого? Майк Херн предложил решение и назвал его уклонениям от слияния.
Когда пользователи хотят делать платежи, вместо создания гигантской транзакции, объединить столько ресурсов, сколько необходимо, чтобы оплатить весь платеж за один адрес. Почему бы не иметь протокол, с помощью которого получатель может предоставить выходных адресов столько, сколько необходимо. И отправитель, и получатель могут договориться о раскрытии имен, и отправитель может избежать объединения разных входов и может составлять различные транзакции, которые отправляют деньги с разных входных адресов на разные выходные адреса.
Таким образом, уклонение от слияния позволяет избежать множества проблем, связанных с потоками высокого уровня, потому что даже эти множественные адреса ввода и вывода не могут быть связаны друг с другом. Противник, возможно, даже не сможет определить, что выполняется поток высокого уровня.
Терминологический словарь
Боковой канал - Атаки по сторонним или побочным каналам (side channel attacks, SCA) – это вид криптографических атак, использующих информацию, полученную по сторонним или побочным каналам.
CoinShuffle – это реализация CoinJoin, способ микширования нескольких транзакций так, чтобы смешать части каждой из них.