Эпизод 10 - Публичные майнинговые пулы

25/02/2019

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

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

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

Саранг: Это, по сути, зависит от того, что делает пул. Так что, безусловно, независимо от майнера, является ли он частью пула или занимается соло-майнингом, сети это всё равно. Блок содержит специальную транзакцию, называемую Coinbase-транзакцией (Coinbase Transaction), которая генерирует вознаграждение для майнера или оператора майнинг-пула, независимо от того, кто собрал группу. Она содержит выход, который предназначен и специально идентифицируется как вознаграждение для майнера. Если вы занимаетесь соло-майнингом, если делаете это со своего компьютера, то вы можете возрадоваться и подумать: «Я сохраню его, чтобы потом использовать в транзакции или сделать с ним что-то другое». И тут возникает множество вопросов. Если вы занимаетесь соло-майнингом и делаете это, как положено, то всё будет хорошо. Но если вы являетесь частью майнинг-пула, то вознаграждение за блок идёт на один адрес, поскольку так настроена сеть, после чего пулу необходимо распределить вознаграждение за майнинг между участниками в соответствии с используемым ими алгоритмом. И обычно это выглядит как платёжная транзакция. А платёжные транзакции часто выглядят похоже: в транзакцию включается один или, возможно, пара входов, которые будут потрачены, а затем целая группа выходов расходится по адресам назначения, которые сеть, конечно же, не может идентифицировать, так как это одноразовые адреса. Однако мы можем предположить, что выходы рассылаются отдельным майнерам, являющимся участниками пула. Таким образом, когда мы видим такие транзакции с парой входов и целым набором выходов, мы можем с некоторой вероятностью идентифицировать их как выплаты майнерам. Опять же, большинство транзакций, которые проводятся при совершении покупок или для какой-то другой цели, могут иметь несколько различных входов, но, как правило, у них только два выхода: для адресата, которому я отправляю деньги, и для сдачи, которая вернётся ко мне. Так что такие транзакции выделяются в сети, и протокол проведения транзакций Monero устроен так, что в идеале мы не сможем сказать, какие входы были потрачены и кому предназначаются выходы, но мы можем сказать, сколько их в транзакции. Мы можем определённо сказать, сколько входов было потрачено и сколько выходов было сгенерировано. И, безусловно, майнинг-пул в интересах прозрачности также может опубликовать списки, в которых будет указано, какие Coinbase-выходы были сгенерированы для вознаграждения в пуле и какие транзакции содержат выплаты. Таким образом, в блокчейне уже имеется некоторая информация, которую может попытаться оттуда извлечь более или менее умный злоумышленник, и пулы со своей стороны могут опубликовать всю или часть информации из соображений прозрачности.

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

Саранг: Мне кажется, тут стоит отметить, что такое вступление заставляет подумать: «Бог мой, так публичные пулы, оказывается, вредят сети?» Ведь мы отмечаем все эти вещи, которые могут привести к тому, что всё пойдёт не так, как надо. Я бы сказал, что это абсолютно не так. Многие люди не занимаются майнингом в одиночку по причине ограниченности доступных им вычислительных ресурсов. При получении выплат наблюдается непостоянство, что не очень хорошо для отдельных майнеров. А публичные пулы устраняют это непостоянство и таким образом поощряют заниматься майнингом тех, кто этим ещё не занимался. Для сети наличие большего количества организованных таким образом майнеров является очевидным преимуществом, но нам нужно быть аккуратными с тем образом поведения, который мы выбираем. То есть несложно сделать всё правильно. А пулы, которые не всё делают правильно в силу экономических или других причин, связанных со стимулированием, не вредят сети.

Джастин: Спасибо, Саранг. Сейчас я покажу вам рисунок, на котором представлены некоторые данные публичных майнинг-пулов. На моих слайдах с конференции Defcon информация представлена более подробно. Мы можем поделить выходы пулов на две основные категории. У нас есть Coinbase-выходы, это новые выходы, которые появляются при вычислении новых блоков, и выходы, которые я называю платёжными. Это выходы, которые пользователи отправляют в транзакциях, поэтому мы должны относиться к ним иначе. Существует ряд стратегий, которые мы можем использовать по отношению к ним. Я причислил их к соответствующим категориям. В случае с этими Coinbase-выходами у нас не так много вариантов, можно сказать, что пулам не стоит публиковать список, но здесь есть своя обратная сторона и не одна. Возможно, им следует производить секретное вспенивание, но это может стать причиной раздувания. В конечном счёте главным вариантом для пользователей является маркировка Coinbase-выходов для взаимодействия с API пула, чтобы запросить пул, какие блоки были ими добыты. После этого такие выходы просто не используются. Или же пользователи могут просто избегать Coinbase-выходов. Безусловно, в исследовательском сообществе и сообществе Monero ведутся споры относительно того, какой из процессов лучше. Мы не собираемся зацикливаться на этих Coinbase-выходах, но это то, о чём следует знать. Что касается платежей, в данном случае пулы могут оказать значительно меньше влияния на сеть, и я покажу, как они могут этого добиться. Конечно, они просто могут не публиковать выходы, но майнеры хотят, чтобы эта информация была публичной. Они также могут маркировать платёжные выходы, и пул может публиковать списков всех выходов, и люди не станут использовать их. Но, безусловно, это потребует взаимодействия, и тут высока вероятность того, что пул подбросит пользователям вредоносную информацию. У нас есть другое решение под названием «Модифицированный алгоритм выбора входов», о котором я собираюсь вам рассказать. Он просто корректирует выходы, используемые пулами, и проводит транзакции способом, сохраняющим целостность выходов, которые принимаются с этими платёжными выходами. Давайте бегло взглянем на них. Допустим, пул проводит платёжную транзакцию. В этом случае средства переводятся двум пользователям и один выход возвращается. Это выход сдачи, который переводится обратно пулу. Теперь вопрос состоит в том, чтобы два пользователя получили свою выплату, но, допустим, пул создаёт другую транзакцию, в которой им контролируется только один выход, и он очевидно тратится. Этим я хочу сказать, что эти другие выходы блока являются выходами, которые пул не контролирует, поэтому вам известно, что они не были потрачены. Так как у вас есть список всех выходов, контролируемых пулом, вам известно, что этот тот самый выход, который был потрачен пулом. В результате вы можете пометить все остальные выходы в этой транзакции как ложные, как фальшивые. Теперь вы можете сказать, что вот этот выход был потрачен в определённой транзакции, и таким образом, если он появится в любой другой транзакции, вы будете знать, что он фальшивый. При наличии достаточного количества подобных случаев это потенциально может повлиять на сеть. Однако если вместо этого пул решит выбирать выходы для своего кольца в транзакциях, которые он отправляет пользователям, то пользователи получат свои выплаты, пул получит сдачу и использует все три выхода в кольцевой подписи. Безусловно, вы можете точно так же пометить чёрные выходы как ложные, потому что пул никак не мог потратить их, но теоретически мог потратить любой из этих, поскольку вам неизвестно, какой из выходов транзакции был выходом сдачи. Как результат выход сдачи здесь выглядит так же, как любая другая легитимная выплата за майнинг, и сохраняет целостность этого выхода. Клиентскому ПО кошельков более не требуется помечать этот выход. Вы видите, если сравнивать с любой другой майнинговой транзакцией, она будет выглядеть точно так же, как транзакция, использующая выход выплаты майнеру или выход сдачи в качестве ложного. Таким образом, у нас есть реальная базовая информация относительно того, как данные публичных майнинг-пулов, особенно в отношении выплат, могут быть обработаны в соответствии с новым решением, чтобы не причинять какого-либо дополнительного вреда сети, а пулы при этом смогут по-прежнему публиковать всю необходимую им информацию. Им необходимо внести совсем небольшое изменение, чтобы сохранить целостность платежей. Когда ко мне пришло это откровение в отношении выходов, оно показалось интересным. Саранг, не мог бы ты рассказать чуть более подробно об анализе, о том, как эти выходы сказываются на людях?

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

Джастин: Саранг, какие ключевые выводы могут сделать наши зрители? Стоит ли им беспокоиться обо всём этом, что они могут сделать, чтобы защитить себя?

Саранг: В целом, как ты уже сказал, идея размера кольца, который будет увеличиваться со временем, представляется многоуровневым подходом. Поэтому увеличение размера кольца — это один из способов избежать риска, но, безусловно, он не поможет избежать определённых форм анализа, о которых мы говорили, включая этот. Идея состоит в том, что независимо от причины, если вы выбираете выходы ненадлежащим образом и попадаете в публичный пул или на разветвление блокчейна, или в какую-либо другую ситуацию, даже если злоумышленник сможет пометить выход как ложный, если вы используете достаточно большой размер кольца, и результаты анализа не представляются масштабными, то вы сохраняете преимущество, связанное со всеми остальными ложными выходами в вашем кольце. В целом, увеличивая размер кольца со временем, а мы этим и занимаемся, другие проекты практикуют другую философию по той же самой идее, они делают это, чтобы избежать рисков. И, конечно же, у нас есть инструмент, позволяющий пометить потраченные выходы, мы называли его «blackball tool» (инструмент отрицательного отбора), мне не нравится это название, тем не менее вы можете на свой собственный риск использовать его для создания списков потраченных выходов или же для себя, чтобы ваш кошелёк не выбирал выходы, которые либо доказуемо, либо эвристически являются «мёртвыми». Нужно ли это большинству людей? Я бы сказал, что нет. Это то, что должно беспокоить в зависимости от индивидуальной модели рисков для безопасности. Это то, что можно учитывать. Есть ресурсы, которые подскажут, как использовать всё правильно и как безопасно пользоваться этим. Так же стоит отметить, что это каверзный вопрос, который сводится к тому, что нам делать с Coinbase-выходами и с остальным, что, как нам кажется, связано с пулами? Есть ряд предложений, которые предполагают использование Coinbase-выходов в кольцах только определёнными способами. Или же предлагается просто не использовать Coinbase-выходы в качестве ложных, или же использовать их исключительно с определёнными паттернами. И тут тоже всё непросто, поскольку такие предложения подразумевают тот или иной компромисс и различные последствия, и, безусловно, это область для дальнейших исследований. Нам нужно разобраться, что нам делать с поведением кошелька, которое используется по умолчанию, или же решать проблему на более широком, сетевом уровне. На данный момент у нас нет решения, и мне кажется, что все и так довольны, но это одно из направлений, в котором проводится активная работа.

Джастин: У меня тоже есть одно заключительное замечание. Данные публичных майнинг-пулов со временем становятся надёжным источником информации, который может использоваться злоумышленниками или внешними наблюдателями в связи с другой информацией, которую они пытаются обнаружить. Если злоумышленник пытается провести атаку с разветвлением блокчейна и, скажем, получает 50% выходов за определённый отрезок времени в результате такой атаки с разветвлением блокчейна. Но 20% выходов за этот временной период он наблюдает и благодаря пулам. Сообразительный наблюдатель сначала рассмотрит 50% выходов, а затем другие 20%, чтобы проверить уже 70% выходов. Причина важности этой информации, получаемой от пулов, заключается в том, что это повторяющаяся информация, которая может способствовать проведению атак другого вида и усилить их, поскольку это постоянный, надёжный источник информации, которым можно воспользоваться.

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

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

Саранг: Активная область исследований. Как и в случае со многими другими формами анализа, всё обстоит довольно непросто. Это то, о чём нам известно, и мы признаём это ограничение структуры Monero. Частично это зависит от того, как поведение отдельных пользователей может повлиять на поведение других пользователей, а частично от технического решения кошельков и того, как мы строим наши протоколы проведения транзакций. Наша цель состоит в их постоянном совершенствовании.

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

Перевод: Mr. Pickles
Редактирование: Agent LvM
Коррекция: Kukima