Перевод «Кошелёк Rich Wallet» - научно-фантастический рассказ в стиле Monero

Тема в разделе "Статьи", создана пользователем Mr. Pickles, 9 янв 2021.

  1. Mr. Pickles

    Команда форума Модератор Редактор

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

    Теперь вы можете оставить всё как есть и начать пользоваться своим кошельком. Но в вашей голове уже зарождается новый вопрос: если я получил какой-то случайный адрес, ведь вполне возможно, что кто-то другой так же случайно получит точно такой же? А это может закончиться просто плачевно, ведь этот человек сможет украсть ваши драгоценные монеты.

    Ответ, конечно, «да». Да, это возможно.

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

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

    В этот момент вы уже можете просто поверить случайному парню и доверить свои с трудом заработанные деньги криптовалютному кошельку или же вы можете продолжить падение в кроличью нору и спросить: насколько мала?

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

    Однажды ученые приложили серьезные усилия, чтобы оценить общее количество песчинок на планете Земля. Результат был следующим: 7,5*10^18 или 7 500 000 000 000 000 000.

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

    Если вам нравится такая история, и вы находите её убедительной, я могу сказать, что у неё есть один серьёзный недостаток: количество возможных кошельков Monero значительно превосходит количество песчинок. По предполагаемым оценкам, в известной наблюдаемой вселенной содержится от 10^77 до 10^82 атомов, в то время как существует примерно 10^77 возможных секретных ключей Monero. Да! Кошелёк Monero может быть создан для каждого атома во вселенной.

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

    Похоже, что у группы анонимов, стоящих за Rich Wallet Inc., бездонные карманы. Изначально такое заманчивое предложение ограничивалось первыми 100 000 пользователей, но позже было расширено до 500 000, что помогло Rich Wallet стать наиболее часто используемым кошельком Monero для смартфонов, что является просто замечательным показателем для подобных новичков.

    Они даже всерьёз не пытались предотвратить многократные попытки обмана и вывода получаемого бонуса со стороны пользователей.

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

    Но с точки зрения безопасности в этом был смысл. Из-за того, что программное обеспечение кошелька напрямую передаёт адрес кошелька через интернет на сервер какой-либо компании, вы как пользователь никогда не можете быть уверены, что исходящие данные также не включают секретный ключ кошелька, что позволяет Rich Wallet Inc. украсть все ваши XMR впоследствии.

    При помощи QR-кода вы могли банально убедиться в том, что кошелёк просто отображает 95 символов основного адреса вашего кошелька в машиночитаемой форме и ничего больше.

    Доверие всегда представляется очень острой проблемой в случае с криптовалютными кошельками. Известны реальные случаи, когда вредоносные приложения-кошельки различных монет, включая Monero, рано или поздно тайно отправляли ключи, что приводило к краже средств.

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

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

    Разобраться в криптовалютном мире новичку совсем непросто, и люди постоянно совершают всевозможные ошибки, начиная «строить карьеру в собственном банке». Но тут было кое-что ещё: вы не могли нажать какие-то не те кнопки при создании нового кошелька, даже будучи чёртовым новичком. Обнаружение монет в «новых» кошельках означало, что Rich Wallet создал дубликаты секретных ключей, что, как вы понимаете после моей истории об «атомах во вселенной», невозможно было сделать по чистой случайности.

    Что-то произошло, и я хотел знать, что именно.

    Я обратился к Дэвиду, моему другу и опытному специалисту по компьютерной безопасности, чтобы тот помог мне разгадать эту загадку.

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

    «Но в любом случае у нас нет сообщений о краже монет, у нас есть проблема с дубликатами ключей, поэтому поиск секретных ключей на выходе из устройств, вероятно, будет бесперспективен, верно?»

    Я был вынужден согласиться: «Да, конечно, но пока нет никакого иного следа, нам следовало бы это проверить».

    «А что насчёт получения бонуса? Я, конечно, знаю, что эти QR-коды, которые требуется сфотографировать, действительно содержат только адрес Monero и ничего больше. Но есть также логотип и изображение, отображаемые на экране вокруг кодов. Может, в них что-то спрятано?»

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

    Таким образом, быстро и успешно разгадать загадку не получилось.

    В течение последующих нескольких дней мы с Дэвидом всячески продумывали возможный подход к краже монет без необходимости в предварительном похищении секретных ключей: нужно было найти какой-то способ сделать эти секретные ключи «предсказуемыми». Требовался так называемый «детерминированный» процесс генерации ключей.

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

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

    Отметили элегантность такого подхода? И невозможно поймать какое-либо приложение вроде Rich Wallet, совершающее подозрительную передачу данных, которая могла бы выдать его, потому что подобная передача данных просто не происходит.

    Что, если приложения будут молчать и выжидать с отправкой ключей вплоть до дня экзит-скама? Ну, разве не хорошая стратегия? Мы бы сказали, что нет, поскольку, зная ключи заранее, вы также захватите всех пользователей, не использующих Rich Wallet в этот день, плюс у вас не будет серверов, принимающих ключи, которые кто-либо мог бы вычислить достаточно быстро.

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

    Мы очень гордились своей идеей, пока не оказалось, что Дэвид не может придумать реальный способ реализовать её в приложении для смартфона.

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

    «Уникальные идентификаторы смартфонов представляют собой проблему, — объяснил мне Дэвид. — Разработчики приложений использовали их в прошлом, чтобы отслеживать пользователей различными способами. Вот почему доступ к номеру телефона, к IMEI, серийному номеру телефона и подобной информации в настоящее время закрыт для приложений на всех ОС смартфонов, которые имеют широкое распространение».

    Я уже был практически готов сдаться, когда примерно через две недели Дэвид объявил мне о прорыве.

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

    «И вот в чём тут хитрость: по одному из запросов на выборку блоков этот демон на самом деле возвращает не блок, а простое число. И это число, кажется, подсчитывается для каждого приложения Rich Wallet, которое обращается к демону при создании первого кошелька. Это серийный номер, если угодно».

    Вот так, наконец, мы узнали, как эти секретные ключи стали уникальными и предсказуемыми!

    «А тебе удалось узнать, почему это не срабатывает в небольшом количестве случаев?» — спросил я Дэвида.

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

    Я засмеялся: «Слушай, мне это хорошо знакомо. Проклятие любой программы на C++ — не инициализированные переменные!»

    Чуть позже Дэвид также выяснил, как именно секретные ключи были получены на основе серийных номеров. Это было несложно. Программисты явно не полагали, что кто-то узнает всё это и зайдёт настолько далеко.

    Я не сразу осознал тот факт, что теперь Дэвид и я, как и люди, стоявшие за Rich Wallet, знали секретные ключи многих тысяч кошельков Monero.

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

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

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

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

    Что в некотором смысле было недалеко от истины. Как если бы мы телепортировали эти монеты в глубокий космос, выбирая новое место для каждого из кошельков, и только у нас с Дэвидом была какая-либо информация о том, где именно во вселенной оказалась та или иная XMR.

    Как мы сделали это? Мы разработали неочевидный способ взять серийный номер Rich Wallet, преобразовать его в другой номер, который все ещё был уникальным, сделать из него секретный ключ Monero, а затем передать его на соответствующий адрес.

    Для второго шага нами было создано собственное программное обеспечение кошелька Monero, которое мы гордо назвали Monero Rescue Wallet (Кошелёк спасения Monero). После установки на смартфон вместе с приложением Rich Wallet создавался новый кошелёк с правильным случайным ключом, он получал серийный номер Rich Wallet для данного конкретного устройства, использовал нашу функцию получения ключа из «глубокого космоса» для вычисления секретного ключа, необходимого для возвращения монет, и передавал соответствующую транзакцию в сеть.

    И здесь снова время имело существенное значение, и прежде чем мы выпустили наше «спасательное» приложение, мы всё подробно объяснили общественности. Как только бы злоумышленники завладели приложением, они бы попытались произвести его обратный анализ, чтобы узнать, как работает наша схема получения секретного ключа, и сразу после успешного решения восстановили бы доступ к монетам и смогли бы переместить их в кошельки, находящиеся у них под контролем.

    Однако этого не произошло, и каждый пользователь Rich Wallet, который озаботился установкой нашего приложения, получил обратно свои XMR, правда, за вычетом комиссии за две транзакции.

    День выхода нашего кошелька стал известен как «День повторного обогащения».

    Спустя какое-то время, когда всё произошедшее стало покрываться мхом, Дэвид вновь связался со мной.

    «Попробуй-ка угадать, какие слухи о Rich Wallet ходят среди специалистов по компьютерной безопасности? Слухи о его истинном предназначении, так-то».

    Я был в недоумении: «Ты имеешь в виду, украсть как можно больше монет и превратить их в виллы на каких-нибудь чудесных островах. Не в этом ли состояла основная цель?»

    «По слухам, да. Представь, что ошибки дублирования ключей никогда не происходит, просто не случается. Rich Wallet захватывает большую часть рынка программного обеспечения для кошельков Monero и сохраняет его в спокойном состоянии в течение длительного времени».

    Я задумался над этим и начал что-то подозревать: «Что ж, люди, стоящие за этим, получают данные значительной части всех транзакций отправителей, данные сумм и даже получателей, если они, опять же, являлись бы пользователями Rich Wallet».

    «Точно так, — подтвердил Дэвид. — Всё это было умной и масштабной атакой на приватность Monero».

    ---

    Источник: "Rich Wallet" - A Monero Science Fiction Short Story

    Перевод:
    Mr. Pickles (@v1docq47)
    Редактирование:
    Agent LvM (@LvMi4)
    Коррекция:
    Kukima (@Kukima)
     
    #1 Mr. Pickles, 9 янв 2021
    Последнее редактирование: 9 янв 2021
    Сатошин нравится это.
  • О нас

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