MoneroKon D1 - Выступление Д-ра Митчелла Кравиц-Тейера

22/06/2019

Визуализация Monero - рисунок стоит тысячи логов

Митчелл Кравиц-Тейер (также известный как Isthmus) является руководителем по направлению децентрализованного консенсуса в Insight Data Science, контрибьютором Исследовательской лаборатории Monero, редактором Mastering Monero, основателем Исследовательской лаборатории случайных нонсов (Noncesense Research Lab), а также шахматистом-любителем и пекарем.

Аннотация

Подход Monero к обеспечению анонимности в значительной мере опирается на невозможность отличить одну транзакцию от другой, так как любые паттерны, видимые внешнему наблюдателю, могут быть использованы для анализа блокчейна и связывания транзакций. Представление истории блокчейна в виде читаемых человеком визуальных образов является мощным инструментом для исследования анонимности монет, поскольку потенциальные эвристические данные, которые сложно извлечь из файлов журнала, являются слишком интуитивными, чтобы использовать их в качестве визуальных паттернов или кластеров, соответствующих утечкам информации. Противодействие идентификации особенностей на уровне консенсуса (например, путём определения специального размера кольца, который в v8 стал фиксированным) является первоочередной задачей из-за внутренней угрозы ретроактивной деанонимизации, статистического изменения следов выходов и комбинируемых эвристических данных. Я собираюсь продемонстрировать основы анализа дерева транзакций и ключевые инструменты из набора средств разведочного анализа данных (гистограммы, тепловые карты и многие другие). В совокупности мы будем использовать эти визуальные представления, чтобы интуитивно определить утечку информации и стратегии противодействия этому, которые можно будет реализовать при очередном обновлении.

Стенограмма:

Обычно я начинаю с некоторого вступления и слов благодарности. В качестве вступления, разрешите представиться, меня зовут Митчелл Кравиц-Тейер. Ещё раз спасибо тебе, Саранг, за введение. Также я сильно обязан этим выступлением Neptune, который является соучредителем и куратором данных в Исследовательской лаборатории случайных нонсов. В течение последней пары недель мы вместе с ним сутками напролёт работали, пытаясь подготовить всё, как надо. Большой объём исследований пришёлся конкретно на прошлую неделю, а слайды готовились последнюю пару часов. Так что большое спасибо за такое тесное сотрудничество. Также я хотел бы поблагодарить Исследовательскую лабораторию Monero, мой второй дом, за проведение Konferenco. И, наконец, если здесь присутствует кто-то из XMRChain, я прошу прощения за нападки на ваш API пару недель назад. Сейчас мы уже настроили свой приватный блокчейн-эксплорер, но мне было сложно построить этот график. Так что спасибо вам за ту роль, которую вы сыграли в презентации. И да, спасибо Serhack за помощь с инфраструктурой.

Краткий план этого выступления будет следующим: очень быстро о мотивации, вступление и прочее, а затем я расскажу о трёх различных видах эвристического анализа, позволяющих отследить Monero, о комиссиях, которые, по сути, применяются другими анонимными монетами.

Так что давайте перейдём к делу. Где я могу всё показать, так, правильно? Ok, здорово.

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

Если говорить кратко о взаимозаменяемости и идеале Monero, цель всегда состоит в том, чтобы 100% транзакций и выходов были совершенно неотличимы друг от друга. Таким образом, по сути, мы имеем дело с единственным анонимным пулом. Короткое замечание: во время этой презентации я собираюсь использовать слова транзакция и выход как взаимозаменяемые, поскольку если у вас имеется странный выход, то и транзакция будет выглядеть странно, и наоборот. Так что вы просто можете не обращать внимания на это. Теперь со статистической точки зрения у нас есть один большой анонимный пул, содержащий большинство транзакций. И ещё есть несколько пулов поменьше, которые мы можем назвать «анонимными лужами», это подряды транзакций, которые не смешиваются с остальными. И сегодня я собираюсь говорить о трёх из них, которые занимают что-то порядка процента. Хорошая новость заключается в том, что всё можно исправить на уровне протокола. Таким образом, я также представлю возможные пути решения проблемы. Безусловно, я никогда бы не стал в одностороннем порядке вносить изменения в протокол консенсуса, поэтому всё это просто вступительные слова, которые мы можем обсудить всем сообществом в ближайшие пару месяцев.

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

Давайте сделаем некоторое базовое введение в анализ транзакций. Здесь я делаю пару упрощений: первое, чтобы было можно отслеживать график, один я использую для входящих и один для исходящих транзакций. Как правило, у вас есть один или два входа, и мы считаем, что во всех транзакциях должно быть два или большее количество выходов — для получателя и для сдачи. По сути, это ещё не было реализовано на уровне протокола, поэтому мы имеем примерно 2000 транзакций с одним выходом, но будем надеяться, что ситуация изменится со следующим обновлением. Затем я использую размер кольца равный трём. На данный момент размер кольца равен 11, но в моём случае такой размер выбран для того, чтобы было проще отслеживать схему.

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

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

Мною уже упоминалась ранее аномальная структура транзакций. Таким образом, если у вас имеется транзакция с одним выходом, то я надеюсь, что смогу убрать их при реализации следующего обновления. И тут одним из факторов являются аномальные комиссии, о которых я собираюсь проговорить в первой части этой презентации. Это касается не только Monero, но и многих других анонимных монет, как на базе CryptoNote, так и других протоколов. Затем я поговорю о транзакциях, игнорирующих добровольное время блокировки. Это будет во второй части. И, наконец, в третьей части я расскажу о неправильном выборе участников кольца.

Я говорю о том, что есть целый ряд различных причин, по которым транзакция может выделяться и становиться красным квадратом. Что же происходит, когда мы сталкиваемся с подобным? Ну, если бы у меня была одна из этих красных квадратных транзакций, я бы вернулся назад и по течению, вероятно, нашёл бы подобную или что-то ещё благодаря выходам сдачи. Итак, они, вероятно, пришли из красной, но мы не знаем этого наверняка, тут один вариант из трёх. Что если бы я начал копать глубже? Хорошо, теперь я начинаю просматривать блокчейн. И, конечно же, вам попадаются случайные выходы, которые выбираются в качестве ложных, но если вы реально начнёте перемещаться назад по дереву транзакций, и вы увидите ряд из этих транзакций или выходов с недочётами во взаимозаменяемости, то статистически вы сможете вычислить настоящий поток средств. Таким образом, мы имеем дело с некоторой ментальной моделью, на которую ориентируемся по мере продвижения. И когда я говорю об «анонимных лужах», я, по сути, говорю о тех местах, где появляются вот эти красные квадратные транзакции.

Итак, первая часть и необычные комиссии. Люди, использующие базовое программное обеспечение, вероятно, сталкивались вот с этим экраном, где вы можете выбрать медленную комиссию, нормальную комиссию, быструю или самую быструю. И заканчивается всё тем, что Monero использует «рынок» динамических комиссий, что довольно круто, но я не буду углубляться в это. Тем не менее здесь будет зависящая от трафика транзакций, размера блока, чего-то другого некая базовая комиссия, и тут вы сможете выбрать различные множители, которые будут зависеть от того, насколько быстро вы хотите, чтобы прошла ваша транзакция, или же, например, у вас будет достаточно времени в запасе. И вы видите, что большинство пользователей попадает в одну из этих четырёх категорий, они выбрали базовое программное обеспечение и нормальную комиссию.

Теперь я хотел бы очень быстро обратить ваше внимание на некоторые необычные комиссии, которые иногда встречаются. Если вы взглянете на этот график, на ось x, извините, я привык ходить, поэтому позвольте мне попробовать использовать графики без этого, итак, ось x указывает нам на комиссию, закреплённую за определённой транзакцией, а ось y показывает, как много транзакций использовало такую комиссию. Тут показаны все транзакции RingCT, начиная с момента реализации протокола в мае 2019. И мы видим, что большинство пользователей платит практически нулевую или очень небольшую комиссию, и забавный факт: фактически есть две транзакции RingCT, по которым была уплачена нулевая комиссия. Но это уже совсем другой вопрос. Если мы взглянем на тот же самый график, на ось y или логарифмическую ось, то мы более отчётливо увидим странные вещи, которые происходят по мере распределения. И я просто хотел поделиться этим, чтобы отметить, что есть те, кто платили комиссии в размере 7, 10 и 12 Monero. Не уверен, что это было случайно, или же что они действительно так сильно торопились — я не особо над этим задумывался.

Теперь давайте посмотрим, как комиссии изменялись со временем. Я покажу вам блоки по оси x, в которых содержатся транзакции RingCT, а по оси y указана абсолютная комиссия в micromonero. И тут всплывает пара вещей. Прежде всего, нами наблюдаются различные уровни комиссий. Есть транзакции с более низким приоритетом, с приоритетом от среднего до высокого, и большинство транзакций в этих строках говорят о том, что используется базовое программное обеспечение или же программное обеспечение, регулирующее правильный рынок комиссий.

Кто-нибудь знает, откуда взялось это падение непосредственно перед блоком 1,7 миллиона? Бинго! Именно тогда были реализованы Bulletproofs, и так как транзакции стали меньше, то и размер комиссий очень сильно уменьшился. Я не уверен, сможете ли вы разглядеть, но если приблизить, то видно, как нижние полосы подрастают до обязательного ограничения, так как люди начали обновлять своё программное обеспечение на ранних этапах.

Теперь давайте взглянем на первую «анонимную лужу». Есть некоторая определённая часть программного обеспечения, которая добавляет комиссию в точном объёме 0,002 Monero к каждой отельной транзакции, и это создаёт отдельную «анонимную лужу». И это из, по-моему, 3,7 миллионов транзакций RingCT. Только 100 000 из них используют такую точную комиссию. Так что это слегка необычно, и эти транзакции выделяются, раз этот красный след проходит через них.

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

Итак, чтобы свернуть всё обратно, я переключил ось y на относительную комиссию. Она составляет micromonero на килобайт транзакции. И картина становится довольно интересной. Вы снова можете видеть разные уровни приоритета, как мне кажется, от самого низкого до среднего. А в конце происходит некоторое расхождение. Тут я не уверен на 100%, возможно, тут дело в воровстве комиссий. Если поразмыслить над этим, если блок полностью или, скажем, на 80% заполняется транзакциями, за которые выплачиваются комиссии второго уровня приоритета, и вы хотите, чтобы одна из ваших транзакций в следующем блоке имела пару опций: вы либо можете выплатить комиссию второго уровня приоритета, либо вы можете выплатить 1,1, а затем заскочить в один ряд с теми, кто платит по первому уровню. Таким образом, по сути, вы ускоряете попадание транзакции в блок, но не платите за следующий уровень.

А теперь последний вид «лужи», продемонстрированный мной, подразумевает наличие абсолютной комиссии, но тут мы тоже видим, что некоторые люди используют аппаратно настраиваемое программное обеспечение с точными относительными комиссиями. Таким образом, мы получаем очередную «анонимную лужу», в которой комиссия указывается, по-моему, что-то около восьми значимых чисел, что уже немного чрезмерно. Но, опять же, это 22 000 транзакций из 3,7 миллиона, так что это очень небольшая «анонимная лужа». И просто чтобы привлечь ваше внимание к вопросу, чтобы вы поняли, насколько разница в комиссиях «разбивает» наш пул, если вы начнёте с этой белой линии снизу и срежете путь наверх, то вы пересечёте по крайней мере четыре, возможно, пять различных анонимных пулов: те, которые используются по умолчанию, статичные, очень высокие, вы наткнётесь на все эти нестандартные значения. Я бы не стал утверждать, что это неидеально. И эти показатели высоки, поскольку мы используем высокие комиссии с множеством значимых чисел, которые мы бы не использовали, не будь утечки информации или же возможности утечки.

Моё предложение, возможное решение, ведь есть и другие, оно состоит в том, чтобы транзакции считались действительными только в том случае, если комиссия будет выражена целым числом в степени двойки. И вот что я сделал здесь: я взял все реальные транзакции RingCT, 3,7 миллиона транзакций, а затем ретроактивно округлил всё, возведя в степень двойки. И рынок комиссий никуда не делся: люди по-прежнему могут платить больше, платить меньше, в зависимости от размера блока, в зависимости от того, как быстро им надо всё сделать. Но теперь у нас есть ограничение, связанное с тем, насколько ваше программное обеспечение может оставлять след в виде комиссий. Это применимо к абсолютным комиссиям, это применимо к относительным комиссиям — у меня нет никаких конкретных мыслей по этому поводу на данный момент. И тут забавно то, что это фактически сокращает размер транзакций, поскольку вы переходите от использования множества значимых чисел к указанию целого числа.

В конце этой части мы можем прийти к некоторым выводам: у нас есть четыре отдельных анонимных пула, в зависимости от комиссий: есть правильный базовый пул, в котором люди выбирают комиссии с первым, вторым, третьим или четвёртым уровнем приоритета, затем есть пул, где люди выбирают фиксированные комиссии, например, 0,002 Monero, как мы видели ранее, есть люди, которые используют аппаратно определяемые комиссии, в зависимости от веса, например, 0,01 Monero за килобайт. А есть исключения из всех трёх случаев. Всё это разделяет ваш анонимный пул на части. А если я могу разделить что-то, то я могу отделить и всех остальных.

Одна из моих основных рекомендаций состоит в том, чтобы избегать высоких точных комиссий. Чем меньше будут комиссии, тем меньше информации будет утекать. И очень короткое отступление: след, который оставляют комиссии, можно использовать в комбинации с другими эвристическими данными. По факту любые эвристические данные можно объединить с другими эвристическими данными. И в этом и состоит одна из хитростей в данном случае.

Одним из примеров может служить временной анализ. Возвращаясь к этому графику, когда я впервые разбирался с ним, я обратил особое внимание на пару последних недель. Как и следовало ожидать, открылась пара вещей. Итак, используются низкие комиссии, и иногда проводятся транзакции с высокими комиссиями. И я пробежался по ним, просмотрел топологию дерева транзакций, и с достаточной долей вероятности можно отследить транзакции от одной к другой. Я бы не назвал это даже «анонимной лужей», это «анонимная капля». Это очередное напоминание о том, что нужно быть аккуратными при выборе времени.

Переходим ко второй части. Поговорим о «молодых» участниках колец. Здесь следует начать с небольшого вступления, а также рассказать о том, как происходит выбор ложных выходов. Допустим, у меня есть весь ряд блоков, начиная с 2017 и заканчивая 2019, и я хотел бы потратить средства, обозначенные зелёной точкой. Мой кошелёк должен выбрать ряд ложных выходов, которые являются не принадлежащими мне ключами, но при создании подписи я беру публичный ключ и смешиваю его. А затем они берутся все вместе, выход, который действительно тратится, и ложные выходы, они смешиваются в кольцевой подписи, а затем транзакция выкладывается как новый выход. Теперь внешний наблюдатель может видеть только эту внешнюю часть. Очевидно, наблюдателю неизвестно, какой выход действительно тратится. Он может видеть только то, что попадает в подпись. И всё, что вы можете сделать, будучи таким внешним наблюдателем, вы можете посмотреть, какой из участников кольца является самым «молодым», и сделать это, определив, когда транзакция была создана, и таким образом узнав самого молодого участника кольца.

Снова вернусь к этому, спасибо XMRChain, я наскрёб 400 000 подписей. Большинство из них попало в «молодой» диапазон. Если взглянуть на трёхмесячный отрезок, 99,7% можно отнести к «молодому» диапазону. А затем происходит странное — в случае с 0,3% транзакций используется другой алгоритм. И снова я переключился в логарифмический масштаб, чтобы вы могли лучше увидеть, что происходит. Слева показаны правильно построенные транзакции, а справа — пара отличных анонимных пула. Я не собираюсь разбирать их здесь, но вы видите, что что-то происходит не так.

И вот одна из интересных вещей, которую мне хотелось бы рассмотреть: время блокировки у нас составляло десять блоков, поэтому самый молодой участник должен был появиться по крайней мере за десять блоков, поскольку через это время вы могли бы потратить ваши Monero. А теперь давайте посмотрим, как происходило распределение с этого момента. Меня удивило наличие людей, которые обошли блокировку на десять блоков. То есть в случае с базовым кошельком базовое программное обеспечение считает ваши средства недоступными в течение десяти блоков, то есть в течение 20 минут, но 1,6% транзакций были проведены, и их участники были даже моложе. Это составило очень небольшой анонимный пул. Это очень странное поведение. Я снова просмотрел всё, я сам просканировал топологию дерева транзакций, и вы можете увидеть, что это повторяется много раз: перепрыгивается один или два блока.

И теперь мы перейдём к тепловой карте, потому что мне хотелось узнать, было ли это внезапное явление последствием одного случайного события, или же это происходит постоянно. И вот что мы видим: ось x указывает на время, несколько недель, а ось y указывает, какой из участников был самым молодым. Никто из них не должен был быть менее десяти. Ниже временной линии должно быть пусто. Но мы видим, что находились люди, которые создавали эти «молодые» транзакции. Вот всё представлено в логарифмическом масштабе.

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

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

Чуть раньше сегодня у меня была и четвёртая рекомендация, которая заключалась… в чём она заключалась? Ах да, спасибо, она заключалась в том, что мы могли бы задерживать транзакции с молодыми участниками кольца в пуле памяти и не пропускать их, пока не прошло бы достаточное количество времени. Это было бы хорошо для тех, кто занимается ретроспективным анализом блокчейна. Это бы не защитило от злоумышленника, который действует в нашей [неразборчиво] сети. Да, и короткое замечание: это не касается покупателей, совершающих покупки с предоставлением доказательств с нулевым разглашением конфиденциальной информации. Если вы покупаете у меня футболку, а я говорю вам: «Ok, пять баксов», то меня ничто не беспокоит, и мы расходимся. Всё чудесно, это не имеет ничего общего с протоколом.

Ещё короткое примечание: мне кажется, что блокировка на десять блоков была выбрана произвольно. Это вне темы данного выступления. Этот вопрос требует исследования.

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

Это правильный способ. И реально неправильно использовать единообразный выбор случайных ложных выходов. Если я бы выбирал всего 11 случайных участников за всю историю, то получил бы некий ментальный образ: зелёные точки — хорошие, красные точки — плохие.

Здорово. Отлично. Теперь настало время для сквиза: Кто считает, что значение A было сгенерировано правильно? Что насчёт B, всё выглядит верно? Что насчёт C? Как насчёт D? Хорошо. По большей степени все всё поняли. Значения A и D неверны или сгенерированы другим алгоритмом, B и C правильны. И этим я хочу сказать, что если что-то не является детерминированным, то это не означает, что мы не можем этого проверить. Вы все интуитивно справились с этим.

Быстрым способом получения статистической метрики из этого является выбор среднего значения, и он удобен, если у вас есть ряд из 11 участников, самым большим средним значением будет шесть. Таким образом, если вы взглянете на среднее значение в данном случае, те, которые были сгенерированы правильно, будут иметь среднее значение относительно близкое к сегодняшнему, а те, которые были сгенерированы путём выбора единообразных ложных выходов, будут значительно отличаться. Опять же, чтобы не пересчитывать, разница гораздо больше, чем мы могли ожидать. Поэтому, если мы взглянем на среднее значение, возвращаясь к тому, что могут проанализировать сторонние наблюдатели, медианный возраст участника кольца будет шестым кольцом. И тут я собираюсь использовать то, что называют откорректированным по смещению медианным возрастом, и я буду игнорировать время до первого участника кольца. И это [неразборчиво] задержанной трансляции. Я генерирую транзакцию, у меня нет доступа к сети интернет в течение дня, и затем я её транслирую. Таким образом, смещение игнорируется, и всё получается.

Давайте рассмотрим откорректированный по смещению медианный возраст. Это ось x. Главное, что мы видим, так это то, что поскольку большинство людей пользуется правильным алгоритмом, в большинстве случаев он короток. 99% людей использует правильный алгоритм выбора ложных выходов. Если я установлю метку в 500 дней, то вы увидите всего пару людей, которые ведут себя странно. Опять же, я не буду углубляться в это, но вы видите правильный анонимный пул слева и несколько небольших «анонимных луж» справа. Просто смотрите на это в двойном логарифмическом масштабе, теперь медианный возраст и весь подсчёт приводятся в логарифмическом масштабе. Этот скачок указывает на транзакции, сгенерированные при помощи правильного алгоритма. Это очевидно, мне кажется, в этой точке, даже просто интуитивно, и мы смогли отбросить те, что были сгенерированы странным образом.

Мне очень нравятся тепловые карты, как вы уже могли заметить. Глядя на то, как всё развивается со временем, можно отметить, что ось x снова уходит высоко эквивалентно времени. Ось y является некоторого рода скорректированной по смещению медианной метрикой. И чтобы было понятнее, нижний ряд представлен как один день, один месяц, один год. И вы можете видеть эту большую жёлтую полосу посередине — это основной анонимный пул. Вам необходимо, чтобы ваши транзакции попали именно в этот анонимный пул. Всё, что было создано путём странного выбора ложных выходов за последний месяц или год, определённо не использовало стандартного алгоритма. Вот этим здесь 500 дней, в частности, тут имеются особые эвристические данные, поэтому нам хотелось бы этого избежать.

В данном случае можно прийти к выводу, что большинство использует правдоподобное распределение. Небольшие «анонимные лужи» чётко используют нерегулярный выбор, часто он единообразен, но здесь мы можем иметь дело и с более ненадёжными вещами. Я уверен в том, что метод скорректированных по смещению средних значений является самым надёжным методом для выявления нарушителей, которые являются причиной самых серьёзных утечек анонимных данных — вот этим, в частности, 500 дней.

Я бы порекомендовал, чтобы протокол консенсуса отклонял транзакции, скорректированные по смещению, медианный возраст которых был бы выше какого-то порогового значения. Самое мягкое пороговое значение могло бы составить 500 дней, что настолько абсурдно, что надлежащим образом построенное кольцо никогда бы не было отклонено. Фактически мы могли бы установить более строгий приемлемый стандарт, но мне не хотелось бы нырять в кроличью норму выбора параметров в рамках этого выступления — этот разговор состоится в ближайшие недели и месяцы.

Итак, предлагаю двигаться дальше.

Мои заключительные мысли будут на несколько высоком уровне. Визуализируйте свои данные, пользуйтесь своей интуицией. Действительно сложно разбираться в текстовых данных, но если вы импортируете их в Python, быстро составите пару графиков, то вы лучше сможете интерпретировать то, на что смотрите. Мой совет разработчикам анонимных протоколов будет состоять в том, чтобы они пользовались наилучшими методами согласно правилам консенсуса. Нельзя просто надеяться на то, что все разработчики будут соблюдать идеальную базовую реализацию. Это сложно. Здесь многое нужно исправить, здесь очень легко ошибиться, и было бы полезно, если бы протокол отклонял то, что будет сделано неправильно, это помогло бы отладчикам кошельков в выявлении ошибок, чтобы их кошельки работали правильно. Разработчики программного обеспечения анонимных монет, старайтесь обеспечить соответствие базовым кошелькам. А приближение и упрощение, как в случае со случайным выбором ложных выходов, могут привести к утечке удивительного объёма информации. Это может происходить незаметно, и вы не увидите этого, пока не произведёте визуализацию.

А теперь я обращусь к пользователям: пользуйтесь проверенным и одобренным сообществом открытым кошельком. Вы найдёте всё на боковой панели на Reddit. Если сомневаетесь, пользуйтесь базовым программным обеспечением, которое можно взять на getmonero. А если вам любопытно, то вы можете просмотреть свои транзакции при помощи блок-эксплорера. Я всегда делаю так, если пытаюсь создать новое программное обеспечение, я быстро просматриваю свои транзакции. Правильный ли алгоритм был использован? Была ли установлена нормальная комиссии? Всё, что можно.

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

А теперь я готов ответить на вопросы. Вот указан мой электронный адрес, а все слайды и код будут выложены на k2019.noncesense.org. Слайды уже загружены мной. Я хочу ещё немного доработать код и выложить его в ближайшие пару дней. Спасибо.

Вопрос из зала: Привет! Мне интересно, кого вы считаете самыми опасными виновниками: это кошельки, биржи, майнеры? Кто, по-вашему, отвечает за такой странный выбор ложных выходов или за время подтверждения?

Ответ: Хороший вопрос. У меня нет какого-то определённого ответа на это. Что касается комиссий, я смог увидеть, что здесь замешана целая группа сторон. Что касается возможности траты быстрее, чем через десять блоков, не имею ни малейшего понятия, я могу только догадываться. За последние пару недель было порядка 10 000 транзакций, я не думаю, что это один человек или как минимум, ну я не знаю, какой-то веб-сайт, какая-то биржа. Фактически мне даже непонятно, почему бирже может понадобиться обходить такое ограничение — это не имеет никакого смысла. Поэтому я не могу быть уверен. Я просто пытался докопаться до сути, проанализировать всё с точки зрения блокчейна. Я пока не пытался всё сопоставить с лицами из реального мира.

Большое спасибо за внимание.

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