Эпизод 04 - Разветвление блокчейна (атака с повторным использованием образа ключа)

14/01/2019

В этом эпизоде Саранг, Брэндон (Шурэ) и Джастин обсуждают вопросы, связанные с повторным использованием образов ключей. Разъясняются некоторые технологии, обеспечивающие безопасность и защиту анонимности в ряде обстоятельств. В конечном счёте говорится о том, что пользователям не следует пользоваться средствами, полученными «эйрдропом», если они не уверены в последствиях.

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

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

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

Джастин: Точно.

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

Джастин: Чтобы прояснить ситуацию, Саранг, в случае с примером использования ранее существующего блокчейна и формирования собственных новых двух и формы Y. Иногда, даже во многих случаях, это получает название «эйрдропа», правильно?

Саранг: Хммм.

Джастин: Хорошо.

Саранг: Да-да. Обычно так и происходит с этими проектами: они могу попросить перейти на свой кошелёк и ввести свои приватные ключи Monero, после чего пообещают вам скинуть несколько «самодельных» Monero на ваш «самодельный» кошелёк.

Джастин: OK, спасибо. Теперь мне хотелось бы уделить время нескольким слайдам, представленным мною ранее на Defcon, и снова поговорить об анализе разветвления блокчейна при помощи образов ключей. Чтобы понять, как это вообще происходит. Сейчас я покажу их вам… OK, эта презентация довольно удобна. Итак, вот вам пример. Два разных кольца: слева и справа по кольцу в виде зелёного круга — две разные транзакции. Слева — блокчейн номер один. Допустим, это блокчейн Monero, а справа — блокчейн номер два. Допустим, это «самодельная» Monero с изменениями, например. И если вы хотите провести две транзакции в обоих блокчейнах, вы в конечном счёте будете использовать один и тот же источник средств, то есть этот источник средств будет существовать до разветвления по форме Y, то есть будет сгенерирован до такого разветвления. А после разветвления эти средства будут представлены в обоих этих блокчейнах. Видишь вот этот жёлтый выход в как бы горшке с золотом (как объяснялось в прошлых эпизодах) — это деньги, которые вы фактически тратите и из которых выводится образ ключа, все эти чёрные горшки или другие ложные выходы, которые выбираются из блокчейна Monero. Так что можно увидеть, если производится попытка проведения двух транзакций в двух различных блокчейнах (по ошибке или по невнимательности), и в большинстве случаев для каждой транзакции будут выбраны различные выходы. И тут можно уже сказать: «OK, вот две транзакции с одним и тем же образом ключа, но только один из выходов в соответствующих кольцах может быть реально потрачен». Безусловно, они независимы, один из этих выходов действителен и один из этих семи в данном примере может быть потрачен. Но если взглянуть на эти оба случая, то видно, что совпадает только один выход, который может быть потрачен при проведении обеих этих транзакций. Поэтому в результате можно сказать: «OK, я знаю, что конкретно этот выход тратится». Таким образом, оба этих кольца становятся «взломанными», а этот конкретный выход при дальнейшем использовании вызовет цепную реакцию, ведь вы знаете, что он был потрачен в определённой транзакции, так что он повлияет и на другие транзакции тоже. Теперь, если вы можете выбрать более простой путь, как нами объяснялось ранее, вместо выбора совершено разных ложных выходов или, опять же, этих чёрных горшков в обеих транзакциях, если вы будете использовать точно те же ложные выходы в обеих транзакциях, то вы снова сможете найти соответствующие образы ключей, но каждый из этих выходов будет совпадать, и вы уже более не сможете сузить поиск для определения тех выходов, которые были потрачены. Так что это уже более высокий уровень изучения, что представляет собой разветвление блокчейна, и как их можно использовать в качестве инструмента для анализа. И с этого момента к нам присоединяется Брендон, который расскажет, что происходит, если вы решаете принять участие в таком разветвлении блокчейна, какие риски это несёт для пользователей, и существуют ли методы избежать этого.

Брендон: Довольно забавно то, если вы попытаетесь разработать новый проект и захотите использовать код Bitcoin, например, то вам придётся скопировать его, и если вам захочется, чтобы люди участвовали в вашем проекте, то вам, возможно, придётся попросить их перевести свои средства из блокчейна Bitcoin в ваш новый блокчейн. Но, если вы захотите сделать это в случае с Monero, вы наткнётесь на препятствие. Когда мы говорим о Bitcoin, это может и не сложно будет сделать, но в случае с Monero возникает проблема по тем причинам, которые указаны на диаграммах, которые только что вам показал Джастин. Если у вас есть один образ ключа и два совершенно не связанных кольца, в которых совпадает только один ключ, то вам не повезло. Фактически, если взять пересечение двух колец, и у вас будет только три ключа, то вы по-прежнему исключаете все остальные ключи. Таким образом, проблема состоит в том, что наблюдатель может зайти в блокчейн Monero и отбросить все те ключи, которые были раскрыты в других кольцах, прошу прощения, ключ, который был потрачен вами в пересекающейся транзакции. Его можно вычеркнуть из всех остальных колец, и это может привести к тому, что известно, как цепная реакция. Но в целом об этом можно особо не беспокоиться. Аарон тут рассказывал ещё более подробно про это. Но… чем вы реально рискуете, если используете множество блокчейнов. Если вы публикуете подпись в двух разных блокчейнах с одинаковым ключом, вы даёте больше информации, чем дали бы в случае одной подписи. Это кажется вполне очевидным наблюдением, но одной из серьёзных вещей, которые сейчас открываются в мире науки, занимающейся изучением данных, является то, что при наличии двух наборов анонимных данных при их сложении вы получаете их полную деанонимизацию. Поэтому, если вы начнёте тратить вашу приватную информацию или приватные ключи в разных реестрах, вы рискуете той анонимностью, которую вам пытается дать Monero. Но, на самом деле, один из самых больших рисков представляет собой программное обеспечение кошелька, потому что факт предложения командой разработчиков нового проекта вовсе не означает, что они обязательно являются именно теми, кто собирается сделать кошелёк для этого проекта, а следовало бы из соображений безопасности. Но если некая третья сторона предлагает некий «простой кошелёк для самодельной Monero», то это может закончиться тем, что вы положите свои ключи Monero в кошелёк какого-то случайного разработчика, и кто знает, не отправит ли этот кошелёк ключи на email такого разработчика. Кто может знать это? Для этого нужно строчку за строчкой прочитать их код. Вот в чём плюс открытого исходного кода. Но это также означает, что для обеспечения реальной безопасности в этой ситуации необходимо понимать, что вы делаете, и в некотором роде быть экспертом в этой области. Итак, эти монеты, получаемые в результате «эйрдропа», довольно опасны по ряду причин. Поэтому единственным способом избежать ситуации, описанной Джастином несколько минут назад, является использование одного и того же кольца в обоих блокчейнах. Если вы собираетесь создать кольцевую подпись, необходимо использовать оба. Одно и то же кольцо и оба блокчейна. В данном случае проблема состоит в том, что иногда, к сожалению, некоторые из членов кольца берутся из версии, которая была до разветвления, а некоторые из той, что была уже после, а затем те, что были взяты после разветвления, могут быть исключены. Правильно, и у тебя гораздо меньший, эффективный размер кольца. Посмотрим. Я просмотрю свои записи, чтобы убедиться, что ничего не упустил. Да. Итак, если вы используете в своих кольцевых подписях только те ложные выходы, что были созданы до форка, то, вероятно, всё у вас будет хорошо. Если вы можете построить транзакцию, которая не будет включать в себя два или три ложных выхода, которые были созданы до или после форка, то, вероятно, всё будет хорошо. А если вы сделаете то, что мы в мире Monero называем «вспениванием», то вы тоже молодец («вспенивание» — это процесс многократной отправки транзакций самому себе, а сам термин происходит из анонимных сетей передачи данных). Но, к сожалению, главной проблемой всех этих методов является то, что мы не можем дать точных гарантий защиты ни для одного из них. Я не могу сказаться вам провернуть всё это семь, восемь или девять раз, и что после этого вы гарантированно получите 256 бит безопасности с точки зрения вашей анонимности. Так что даже несмотря на то, что эти методы являются основными, позволяющими избежать проблем, которые могут возникнуть при разветвлении блокчейна, лучше просто не использовать их. Другим способом является использование совершенно новых горячих ключей, и всякий раз, когда вы собираетесь потратить деньги в вашем новом блокчейне, следует убедиться в том, что вы тратите ключи, которые пока ещё не существуют в вашем другом блокчейне, поскольку вы «вспенили» транзакции, отправляя их сами себе, или же вы просто генерируете полный счёт, и вы уже больше никогда не коснётесь этих средств.

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

Саранг: Да, конечно. Итак, как уже тут было сказано, существует множество опасностей, связанных с вашим решением принять участие в подобном разделении блокчейна. Поэтому самым простым решением будет просто не участвовать в этом. Лично я не участвую в подобных вещах и не собираюсь. Но, как уже говорилось, ребята, которые тратят средства в обоих блокчейнах, безусловно, могут открыть, какой из членов кольца является истинным выходом траты в обоих этих блокчейнах. И мы можем использовать анализ цепной реакции, чтобы удалить этот определённый потраченный одноразовый ключ из других колец в обоих блокчейнах, везде, где он появится. И так в полной мере сработает цепная реакция. И нам также известно, что одной из причин того, что мы повышаем размер кольца со временем, является попытка снизить вероятность цепной реакции и её значение. Если у меня размер кольца составляет 11, и один из ложных выходов становится частью процесса разветвления блокчейна, я снижаю размер своего кольца до 10. И если это происходит многократно, то это уже очень-очень сильная вовлеченность в процесс цепной реакции. Затем я сокращаю эффективный размер кольца всё больше и больше. И снова я не участвую в чём-либо. Я просто пользуюсь Monero, как и ожидалось, все мои транзакции содержат кольца с другими ложными выходами, которые могли участвовать в этом. И если мы не участвуем, то что же делать? Ну, по большей части всё зависит от того, какие ложные выходы мы выбираем. Самым безопасным, если вы не знаете, насколько популярным будет изменение и насколько эффективной может стать цепная реакция относительно ваших выходов. В целом, возможно, если удобство использования не является для вас серьёзной проблемой на тот момент, когда вы не проводите транзакции чрез ваш оригинальный блокчейн Monero в течение пары дней до и после разветвления. О причине мы поговорим в следующем эпизоде, в котором будет обсуждаться то, как мы выбираем ложные выходы в целом, но это, пожалуй, самая безопасная вещь, которую вы можете сделать. Таким образом, ложные выходы, которые существуют между, то есть ложные выходы, которые были созданы в транзакциях в пределах двухдневного диапазона до и после. К ним нужно относиться как к очень опасным ложным выходам, представляющим очень высокую степень риска, так как они могут быть раскрыты тем, кто их создал, а затем использованы при разветвлении блокчейна. Так что если вам не всё равно, то лучше не использовать их. Опять же, это не очень привлекательно с точки зрения удобства использования, но это результат принципов работы механизмов защиты транзакций Monero от двойной траты. Тем не менее, если вам приходится пользоваться Monero в это время, и, конечно же, мы очень хотим, чтобы Monero было удобно использовать, то мы можем предположить, что кто-то будет пользоваться ей в это время. Ну, если так сложились обстоятельства, то нужно расставить приоритеты по ложным выходам. Вы выбираете ложные выходы для транзакции, которые были созданы после разветвления блокчейна. В конечном счёте, если ложный выход был создан после разветвления, его нет по другую сторону этого Y. А следовательно, он не может быть потрачен по ту сторону Y, поэтому ложные выходы, созданные после разветвления, являются более удачным выбором. Теперь, опять же, если мы собираемся поговорить о следующем эпизоде, метод выбора выходов действительно является очень тонкой темой. Совсем не обязательно это можно назвать идеальным решением, но оно вполне разумно, если вы собираетесь пользоваться Monero за два дня до или после разветвления блокчейна. Мы также ранее говорили о так называемом «отрицательном отборе» или инструменте анализа потраченных выходов (хотя его применение и требует времени), который можно использовать для различных Y-образных форков для определения тех выходов, которые были потрачены и которые не следует использовать в кольце. Опять же, это необходимо только если вас очень сильно беспокоит популярность разветвления блокчейна, и тут следует оговориться, что среди нас такие разветвления не особо популярны. Так что это не такой уж и важный вопрос. И, наконец, небольшой социальный совет, в подобном случае следите за сообществом, которое всегда в курсе и во многом определяет популярность такого разветвления блокчейна. У нас богатая история возникновения подобных ситуаций. Так что, если вам интересно, когда состоится разветвление и когда будет этот двухдневный диапазон, максимально пристально следите за сообществом. И, безусловно, нами уже затрагивалась тема «вспенивания», когда вы отправляете средства самим себе. Это тоже нужно делать, если вы пользуетесь Monero в указанный двухдневный период. Но, опять же, «вспенивание» ещё недостаточно исследовано и понято нами. Поэтому абсолютно безопасным решением является отказ от использования Monero в этот период. Но если вы всё-таки делаете это, при выборе ложных выходов отдавайте приоритет тем выходам, которые были созданы после разветвления.

Джастин: Превосходно. Большое спасибо тебе, Саранг. Я на практике использовал этот инструмент анализа потраченных выходов, который, когда я им пользовался, назывался инструментом «отрицательного отбора» в ходе нескольких Y-разветвлений блокчейна Monero. Я пользовался им с версией 6 Monero, которая была оригинальным нулевым классическим форком, а также с версией 4 Monero, чтобы определить, каковыми будут фактические результаты. Насколько негативно скажутся форки на отдельных пользователях, и, говоря об этом, мы можем рассуждать о том, в какой мере кольцевые подписи Monero обеспечили защиту, и что нам делать с этим дальше. Я дважды использовал инструмент в августе 2018 и обнаружил 31 359 колец. Это примерно пол процента колец, в которых, очевидно, повторно использовался образ ключа, и в этих кольцах столь же очевидны были реально потраченные выходы. Это было как: «OK, этот выход был очевидно потрачен точно вот в этой транзакции». И в результате произошла цепная реакция, которая задела восемь других колец в блокчейне, что составляет менее 0,001 процента транзакций Monero.

Брендон: У меня есть один короткий вопрос.

Джастин: Yeah, go ahead.

Брендон: Начиная примерно с тридцати двух тысяч было повреждено 8 колец. Для вас это приемлемо, ребята? Как по-вашему? С точки зрения анонимности?

Саранг: Ну, цифры очень сильно разнятся. Следует помнить о том, что среди этой тридцати одной или этих тридцати двух тысяч колец в основном были выходы тех людей, которые принимали участие в самом форке и сами испытали этот эффект. Так что в некоторой мере, если вы продолжаете участвовать в этом, то мы рекомендуем всё-таки воздержаться от этого. Крайне вероятно, что вы скомпрометируете сами себя, но вы будете одним из тридцати двух тысяч. Восемь колец или восемь абсолютно разных колец принадлежат людям, которые, предположительно, не принимали участия в том форке. Так что тут не 8 из 32 000. Тут 32 000 выходов, которые подставили себя, а также эффект воздействия на другие выходы. Это крайне небольшое число. Хотя я считаю, что любое число, отлично от нуля, в идеале неприемлемо. Тем не менее, опять же, это последствие того факта, что разветвление блокчейна сказывается на других. Так же важно, и я уверен, что Джастин собирался упомянуть это (позвольте мне похитить молнии ненадолго), что это происходило во время, когда мы увеличивали размер кольца. Также хотелось бы напомнить, что повышение размера кольца, о котором мы говорили, позволяет избежать эффекта цепной реакции. Так что мы будем иметь разветвление такого масштаба сейчас, когда размер кольца составляет уже 11, можно ожидать, что теперь это число, я бы сказал, будет равным … 0, что великолепно.

Джастин: Да, точно так. Первые мои наблюдения проводились, когда размер кольца увеличивался с 5 до 7. Так что предыдущий блокчейн протянулся до следующего разветвления, и в нём сохранялся размер, равный 5. Теперь размер кольца увеличен до 11, так что кольцевые подписи имеют некоторый буфер. То есть была создана защита от атак такого типа. Так что, к счастью, 8 — это совсем небольшая часть от общего количества транзакций. Но мне тоже хотелось бы, чтобы в конечном счёте эта цифра упала до нуля. Забегая вперёд: мне бы не хотелось, чтобы в результате этих разветвлений произошла очередная цепная реакция. Я практически уверен в том, что при отсутствии реально значительного разветвления, которое разделило бы сообщество Monero, мы едва ли не увидим такую сильную цепную реакцию. К счастью. Так что я надеюсь, худшее осталось позади, так сказать. Это мое мнение… И ещё одна, пожалуй, заключительная мысль: атаки, связанные с разветвлением блокчейна, являются частично социальными атаками. Нельзя просто вот так сидеть дома за компьютером и раз за разом разбивать блокчейн Monero, производить форки и наблюдать за информацией. Необходимо наличие множества людей, которые интересуются Monero, необходимо стать частью этой группы. Так что мы можем сказать… извините, я потерял ход своей мысли. А, вот: это отчасти социальные атаки. В них должна принимать участие значительная часть сообщества. И, к счастью, так как это социальные атаки, частично их легко наблюдать, так как людям необходимо знать, сколько средств тратится и какое влияние оказывают эти средства. Это многоуровневая, многоярусная атака. Ну и заключительные комментарии от вас двоих перед тем, как я завершу эпизод?

Брендон: Ну, мне хотелось бы поделиться одним наблюдением. Эта проблема характерна не только для монет, связанных с «эйрдропом». Тут существует ещё множество вопросов, связанных с безопасностью. Это проблема монет, распространяемых «эйрдропом», которая применима, в частности, к криптовалютам на базе Cryptonote, использующим кольцевые подписи. Так что я думаю, что можно найти другие статьи, связанные с монетами, распространяемыми «эйрдропом», и эти проблемы будут совершенно не связаны с нашей темой.

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

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

Саранг: Спасибо!

Брендон: Пока!

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