Эпизод 12 - Метаданные входов/выходов

09/05/19

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

github.com/noncesense-research-lab/tx_in_out_distribution

Стенограмма эпизода:

Джастин: Привет всем и добро пожаловать на очередной эпизод Breaking Monero. Сегодня Саранг и я поговорим о структуре входов/выходов транзакций Monero. Когда вы проводите транзакцию Monero, вы раскрываете всей остальной сети, сколько входов и сколько выходов содержится в отправляемой транзакции. Вы можете рассматривать выходы в качестве долларовых банкнот, некоторые ещё называют их расписками, а они просто являются контейнером для денег. Я иногда называю их «сумками с золотом», поскольку вы можете вместить в них любую сумму золотом, чтобы перебросить потом в другие сумки. Вот что такое выходы. Но когда вы проводите транзакции Monero, вы можете раскрыть порядочное количество информации вместе с метаданными. Сегодня мы собираемся обсудить некоторые проблемы, возникающие тогда, когда вы проводите транзакции, а также постараемся сделать так, чтобы такие метаданные сами по себе не смогли подорвать анонимность ваших транзакций. Но сначала Саранг приведёт примеры различных типов транзакций, которые проводятся с использованием Monero, примеры метаданных, связанных с количеством открываемых входов и выходов, а затем также расскажет, является ли ситуация уникальной для Monero или нет.

Саранг: Да, как ты уже сказал, идея состоит в том, что транзакция состоит из одного или нескольких входов и одного или нескольких выходов. Входы тратятся полностью и генерируют выходы, которые отправляются по разным адресам назначения или на один и тот же адрес. Это не уникальное свойство Monero, эта структура расходования входов и создания выходов является тем рабочим механизмом, который используется Bitcoin и семейством подобных активов, ну и Monero его использует тоже, конечно. Даже другие активы, сфокусированные на обеспечении анонимности, такие как ZCash, сейчас используют подобную структуру, даже несмотря на то, что применяется она иным способом. Количество входов и выходов зависит от того, что вы пытаетесь сделать. Как мы увидим позднее, наиболее часто тратится один, может, два входа — это зависит от общей суммы, сокрытой в них, и, как правило, обычно есть один выход для адресата, и ещё один выход сдачи, с которым вы получаете оставшиеся средства. Весь процесс защищён идеей скрытых адресов Monero. И, безусловно, каждый из выходов, который вы тратите, также скрывается собственным отдельных кольцом ложных выходов в виде кольцевой подписи. Тут есть свои значительные исключения. Одним из примеров является идея выплат пулами. При таких выплатах фиксированная сумма Monero обычно отправляется группе различных получателей в их пуле. Часто используется множество различных выходов. В настоящее время после реализации Bulletproofs Monero имеет ограничение, составляющее 16 выходов. Но часто можно наблюдать и такой вид транзакции, и, вероятно, вы сможете предположить, что транзакция является выплатой пула. Ещё одной вещью, которую вы можете попытаться сделать, является «вспенивание». В процессе вспенивания вы пересылаете средства самому себе, чтобы, возможно, попытаться скрыть тот факт, что полученные вами средства позднее будут использованы с другой целью, несмотря на то, что сделать всё правильно в данном случае не так и просто. Часто будет использован один выход и в идеале сгенерировано два выхода, один для вас и один на сдачу. Тут следует отметить, и мы поговорим позднее и об этом, что по умолчанию, в случае с Monero, всегда будет по крайней мере два выхода, так как большинство транзакций в любом случае использует два, и нам бы не хотелось раскрывать информацию, что может произойти, если отправить один выход, что при определённых обстоятельствах раскрывает информацию о самом таком выходе, а также даёт сигнал злоумышленнику, что вы занимаетесь вспениванием, отправляете средства себе самому и никому другому.

Джастин: Хотелось бы добавить по поводу отправки единственного выхода — программное обеспечение Monero не позволит вам проводить транзакцию с единственным выходом по нескольким причинам. Во-первых, если пользователь пытается провести транзакцию вспенивания, часто она будет выглядеть как транзакция с одним входом и одним выходом, когда пользователи отправляют всю сумму себе в одном выходе. И в этом проблема с транзакциями с одним выходом, знаете, вся сумма всех входов, независимо от того, имеем ли мы один или пять входов, отправляется на один выход, то есть всё отправляется одному получателю. То есть тратится вся сумма всех этих выходов. При этом будет как минимум два выхода. Возможно, вы потратите всю сумму со всеми этими входами, отправив всё одному лицу, затем она будет включёна во все остальные транзакции со сдачей. Таким образом, даже если у вас нет сдачи, наличие двух выходов как минимум, даже если один из них будет пустым, нулевым выходом, позволит затеряться среди других нормальных транзакций со сдачей. Это помогает скрыть такие вещи, как транзакции вспенивания, а также способствует тому, что транзакции в целом выглядят более единообразно. В случае с Monero минимальное количество выходов, используемых кошельком, равно двум. Это необходимо для того, чтобы люди не могли узнать полную ценность всех входов, используемых в определённой транзакции, а также, что некоторые из них возвращаются в качестве сдачи. Это на самом деле очень важная особенность. Нам даже хотелось бы подчеркнуть, что если определённые варианты реализации криптовалюты будут иметь более сильные механизмы обеспечения анонимности, это, по сути, такой вид метаданных, который вскрывается даже в случае с этими хорошими вариантами реализации. Когда мы говорим о Monero, даже если бы удалось достичь идеальной анонимности при помощи кольцевых подписей, когда размер кольца стал бы нереально большим, вы по-прежнему могли бы узнать количество входов и выходов, отправляемых в транзакции, и вы по-прежнему могли бы предположить, является ли транзакция выплатой пула или групповым выводом с биржи, так как они выплачивают сразу 16 людям. Пользователи обычно не проводят выплат одновременно другим 16 людям. Такого рода вещи важны с точки зрения многих вариантов реализации, а не только Monero, но эти другие варианты, такие как ZCash, даже несмотря на то, какими хорошими свойствами анонимности они обладают. Саранг, есть ли что-то ещё, что ты хотел бы сказать по этому вопросу перед тем, как я приведу данные, касающиеся того, как люди тратят Monero относительно количества входов и выходов?

Саранг: Да, мы упомянули, что одной из тех вещей, которые нам в идеале хотелось бы реализовать, является попытка сделать транзакции максимально похожими с точки зрения метаданных. Если бы каждая отдельно взятая транзакция имела, допустим, два входа и два входа, мы могли бы сказать: «Отлично, все транзакции выглядят очень похоже, уровень анонимность должен быть великолепным». И с определённой точки зрения это было бы действительно так. Как мне это видится, так это как Monero допускала использование колец любого размера, вплоть до некоторого минимального, выбранного вами. Если вам хотелось использовать большой размер кольца, вы могли сделать это, но даже после того, как мы решили использовать стандартный фиксированный размер кольца, который на данный момент равен 11, каждое кольцо для каждого входа, который тратится, должно в совокупности иметь 11 участников. Даже при этом это автоматически не означает, что, так как часть транзакций стала однородной, это решило все проблемы с анонимностью, которые могут возникнуть у пользователей. Это один из аспектов метаданных транзакций, и решение этой проблемы совсем необязательно будет достаточным для решения всех остальных проблем с анонимностью, которые возникают в зависимости от вариантов использования. Нам бы хотелось сделать всё максимально единообразным, но этого может быть недостаточно. Также стоит отметить, что в случае с идеей транзакций с одним выходом, если бы мы математически позволили это, то, возможно, я бы смог отправить Джастину транзакцию с одним выходом, а затем Джастин смог бы отправить мне транзакцию с одним выходом, и при определённых обстоятельствах стала бы возможной утечка дополнительных данных. Помимо того факта, что это бы сказало о том, что все средства были отправлены с одним выходом Джастину, возник бы ещё ряд вопросов. Таким образом, мы предпочитаем, чтобы использовалось по крайней мере два выхода либо в силу решения программного обеспечения кошелька, либо в конечном счёте в силу согласованного правила.

Джастин: На самом деле, это хорошая точка зрения. Количество входов и выходов является важным вопросом, но, определённо, это не единственная проблема. Приходится беспокоиться о таких вещах, как общая сила вашей кольцевой подписи, о возможности анализа по времени и о многих других вещах, о которых мы говорили в предыдущих эпизодах. Эти проблемы никуда не исчезают только потому, что вы прибегаете к оптимальным методам — речь о дополнительном наборе оптимальных методов, которые необходимо добавить ко всем остальным. Я бы хотел ещё по-быстрому добавить, перед тем как мы продолжим, часто люди стараются найти ряд транзакций, которые будут соответствовать определённой платёжной структуре. Таким образом, если мы посмотрим на нечто вроде майнинг-пулов, майнинг-пулы при этом являются посредственным примером, так как ты уже упомянул ранее, что они часто публикуют данные. Но предположим, что мы говорим о майнинг-пулах, которые скрывают данные и не делятся информацией с другими. В случае с такими приватными майнинг-пулами, они будут постоянно проводить транзакции с 16 выходами. Таким образом, часто майнинг-пул будет делать выплаты 15 людям и сохранять один выход для себя в качестве сдачи, а затем этот выход будет использоваться в других транзакциях с 16 выходами. То есть вы сможете взглянуть на выходы, сгенерированные пулом, и сказать, что сдача, полученная пулом, наиболее вероятно будет потрачена в другой транзакции с 16 выходами, и я стану искать транзакции, которые будут соответствовать этим метаданным, или же в будущем буду следить за транзакциями, которые будут содержать 16 выходов. Таким образом, механизм обеспечения анонимности будет ослаблен. Это пример эвристического подхода, который вы можете использовать, чтобы получить больше информации о пользователях. То же самое может произойти в случае со вспениванием. Допустим, по какой-то причине у вас имеется подозрение, что пользователь прибегнул к вспениванию восемь раз, предположим, что так. Сначала вам как-то придётся получить эту информацию, но допустим, что вам просто стало известно, что вспенивание имело место восемь раз. Итак, вы можете взглянуть на то, как один вход и два выхода проходили восемь раз, и в этом случае вам не придётся иметь дело с тысячами маршрутов, а всего с дюжиной или около того. И вот ваш уровень анонимности уже станет ниже, поскольку кто-то уже будет знать, как вы пытаетесь проводить транзакции, и эти метаданные будут использованы для того, чтобы узнать больше информации. Это не тот случай, когда всё происходит на уровне отдельно взятых транзакций. Это также означает, что если кому-то известно ваше обычное поведение при проведении трат, то эти метаданные могут быть использованы для получения другой информации. Таким образом, есть и другие вещи, которые можно делать при помощи анализа метаданных в целом. В случае с Monero, если ваше поведение прогнозируемо, в целом это уже проблема, и эти «утекшие» метаданные по количеству входов и выходов должны стать другой вещью, которая вас беспокоит. Я хочу показать вам рисунок и поделиться некоторой информацией, которая была выбрана на основе истории Monero. У меня есть документ Excel, информация была подготовлена Исследовательской лабораторией абсурда, возглавляемой Isthmus и несколькими другими пользователями. Они просканировали блокчейн Monero, и эти данные связаны только с выходами RingCT, итак, у них есть информация по всем выходам, но здесь взяты выходы, начиная только с 2017 года. Сюда не входят ранние выходы Monero. И мы можем видеть распределение входов, распределение выходов, и ими также были рассмотрены транзакции с одним выходом. Итак, бегло просмотрим их: как видно, около 49% транзакций Monero имеет один вход, и 41% — два входа. Только 9% транзакций имеют какое-то другое количество. Максимальное количество входов по крайней мере на момент подготовки этих данных составило 1187, ну это просто интересный факт. На его основе можно прийти к выводу, что если вы проводите транзакцию, используя более двух входов, вы уже выпадаете из типовой зоны. Если вы проводите транзакцию с одним или двумя входами, то толпа, в которой вы можете затеряться, довольно велика. Я упоминал, что также имеют значение и другие транзакции, которые вы проводите, но в целом, в случае одной отдельно взятой транзакции, довольно типовым случаем является наличие одного или двух входов. Если вы создаёте транзакцию, скажем, с 77 входами, то за последнюю историю Monero можно найти только 100 транзакций с таким количеством, они более редки, и если вы дойдёте до 5 транзакций со 193 входами, то они вскрывают больше информации, чем все остальные, которые вы наблюдаете. Это первая вещь, о которой следует помнить: в случае с Monero большинство людей при проведении транзакций используют один или два входа. Если взглянуть на выходы, то всё выглядит ещё более радикально. Тут сортировка идёт не по количеству выходов, а по количеству транзакций. 91% транзакций Monero имеет два выхода, и, опять же, это транзакции RingCT. Таким образом, мы можем увидеть заметный перекос, транзакций с двумя выходами гораздо больше, чем с любым другим количеством. Тут мною также были выделены 16, и снова тут есть максимум, разрешённый Bulletproofs, эти с большим количеством выходов были потрачены до Bulletproofs. Но на момент написания, как можно увидеть, есть всего 13 703 таких транзакций. Это позволяет предположить, что если вы смотрите на транзакцию с 16 выходами, наиболее вероятно, что она связана с выплатой, которую производит биржа или пул. Это может помочь вам, как человеку, проводящему «исследование», узнать больше о блокчейне Monero. Ну, теперь более досадная вещь — 2522 транзакции всего с одним выходом. Как я уже упоминал, программное обеспечение кошелька Monero не позволит вам проводить такую транзакцию, а это означает, что эти 2522 транзакции были проведены какими-то специализированными кошельками, созданными кем-то, кто мог подтвердить их в блоках. Это нечто, о чём речь будет идти в будущем, Саранг, и я бы порекомендовал выработать согласованное требование, чтобы это было вообще запрещено, но на данный момент мы имеем 2522 такие транзакции. Мы можем взглянуть на распределение. Все они есть здесь, все выходы транзакций, вся эта информация находится в публичном доступе на их github, и мы можем посмотреть на гистограмму, из которой следует, что совсем немногие были созданы до апреля 2018, но после апреля, в мае и вплоть до июля было создано большинство этих транзакций с одним выходом. Примерно в октябре 2018 их создано было совсем немного, и выглядит так, как будто в течение этого периода кто-то пытался протестировать, как это работает. Примерно в это время состоялся форк Monero, и это интересно, если вы хотите исследовать блокчейн Monero, чтобы узнать, что люди делали в этот временной период, и эти транзакции с одним выходом определённо некоторым образом помогут в этом. Итак, это одна из вещей, которая показалась мне интересной во всём собранном «Исследовательской лабораторией абсурда», и что касалось распределения входов и выходов Monero. Это может быть очень полезно с точки зрения получения базового понимания того, делаете вы то же, что и большинство участников сети Monero, или нет. Ситуация может поменяться со временем, например, сейчас вы не можете проводить транзакции более чем с 16 выходами, поэтому количество транзакций более чем с 16 выходами уменьшается, но это хороший способ узнать, как люди в целом тратят свои средства. Саранг, не мог бы ты чуть подробнее рассказать, что на самом деле эти метаданные означают для людей, как к ним нужно относиться при проведении транзакций либо с нормальным количеством входов и выходов, либо с необычным количеством входов/выходов?

Саранг: Типовые транзакции, как мы увидели, практически всегда имеют один или два входа и минимум два выхода. Количество входов может меняться, конечно же, в зависимости от типа средств, которые вы пытаетесь отправить, и в любой определённой транзакции вам необходимо иметь достаточное количество средств в совокупном количестве выходов, которые вы тратите, чтобы транзакция была сбалансированной. При определённых обстоятельствах вам может понадобиться совсем небольшой объём сдачи, если сравнивать с тем, что необходимо вместить в транзакцию, и это увеличит количество входов. Если это вообще будет возможно при использовании стандартного программного обеспечения кошелька, кошелёк часто будет пытаться прийти к разумному и правильному решению в отношении того, как составить транзакцию таким образом, и потребует наличия двух или большего количества выходов во избежание ситуации, когда вам будет известно, что все входы были потрачены. Даже если вы предельно аккуратны и стараетесь всегда использовать разумное количество входов и выходов, чтобы ваша транзакция гарантированно «затерялась в толпе», как мы уже говорили, определённые виды прогнозируемого поведения могут выделить вас из общей массы. Если злоумышленнику станет известно, что программное обеспечение, которое вы используете, или же ваше поведение приводят к тому, что вы осуществляете вспенивание определённое количество раз, то это может подразумевать и наличие определённой структуры ваших транзакций, которую злоумышленник сможет попытаться выявить в своём большом, широком графе транзакций Monero, а это сократит количество людей в толпе, в которой вы пытаетесь укрыться. В идеале поведение, связанное с тратами, должно быть максимально схожим с поведением толпы и должно быть минимально прогнозируемым.

Джастин: Хорошо, спасибо. Помимо этой пары вещей, есть что ещё порекомендовать пользователям?

Саранг: В случае с большинством различных угроз и моделей вариантов использования, использование стандартного программного обеспечения Monero обычно представляется разумным способом поведения. Если вас беспокоит целевой анализ, направленный против вас, то вас должны беспокоить и различные типы метаданных, которые могут включать в себя, например, информацию о том, что транзакции проводились примерно в одно время или же что они проводились с одного и того же IP, или же вы должны быть уверенны в том, что вы не используете какой-то особый вариант кошелька, который может принимать плохие решения или следовать общему повторяемому поведению при вспенивании, которое всякий раз будет выглядеть одинаково.

Джастин: Хорошо, спасибо, Саранг. Есть что-то, что ты хотел бы сказать зрителям напоследок?

Саранг: Только то, что всё это один определённый вид метаданных, не являющийся характерным исключительно для Monero, но он стоит рассмотрения. Метаданные этого типа очень сложно привести к единообразию. Мы с лёгкостью можем контролировать размер кольца, мы просто считаем его системным параметром. Но в случае с большинством цифровых активов, таких как Monero и прочие, причина того, что они используют структуру с фиксированным количеством входов/выходов, заключается в том, что этот определённый вид метаданных очень сложно скрыть умным способом. Попытки сделать транзакции единообразными могут привести к такому поведению, как очень регулярное, повторяемое, прогнозируемое вспенивание, которое само по себе оставляет след. В случае со многими моделями угрозы и вариантами использования стандартное использование кошелька Monero по умолчанию представляется наилучшим выходом.

Джастин: Хорошо, большое спасибо, Саранг, за то, что присоединился ко мне сегодня. Спасибо всем, кто смотрел этот эпизод Breaking Monero. Увидимся в следующий раз.