Статья написана Славой Карпенко, CTO пула 2Miners.

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

Как работает майнинг

Перед началом обсуждения механики возможных обходов защиты криптовалют вкратце остановимся на принципе работы механизма майнинга в частности и блокчейна в целом. Здесь настоятельно рекомендуем ознакомиться со всеми статьями из “Криптовалютной Библии” о майнинге. Или как минимум почитать статью «Что такое майнинг? Удача в майнинге».

Блокчейн представляет из себя связанную цепочку записей, которые содержат ноль или более транзакций (или другой информации). Каждая следующая запись ссылается на предыдущую. В криптовалютах каждая такая запись в цепочке называется блоком. В этой статье мы говорим о криптовалютах, в которых генерация блоков идёт при помощи майнинга — то есть алгоритма Proof of Work (PoW). К ним относятся Bitcoin, Ethereum и многие другие.

Майнеры. Источник: 2Биткоина

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

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

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

Майнер. Источник: 2Биткоина

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

Но какими путями нечистый на руку программист с доступом к изменению исходного кода криптовалюты может получить “несанкционированные” монеты в личное пользование? Отвечаем и заодно рассматриваем минусы таких подходов.

“Привилегированный адрес” в криптовалютах

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

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

“Математически-ботанический способ”

Можно заранее заложить в алгоритм поиска решения математическую бомбу. Речь идёт о закладке, которая позволит находить решения нужной сложности, не тратя значительные вычислительные ресурсы. Другими словами, в математической формуле вычислений оставляется лазейка, из-за чего при определённых (например, граничных) значениях результат выполнения формулы будет предсказуем.

Разработчик криптовалюты. Источник: 2Биткоина

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

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

“Защищённые транзакции”

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

Monero XMR. Источник: 2Биткоина

Из хранящейся в блокчейне информации невозможно понять, не была ли произведена двойная трата, или не создались ли защищённые монеты “из воздуха”.

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

“Отложенный бэкдор”

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

Хакер. Источник: 2Биткоина

Красть криптовалюту — слишком трудно

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

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

Как может воровать блоки майнинг-пул

Последний блок — бонус-тема от создателей пула 2Miners. Этот легендарный вопрос обсуждается во всех чатах и форумах различных пулов для майнинга. У нас в Телеграм-чате 2Miners даже есть специальный стикер с парнишкой с блоком из стены в руках, который намекает на воровство. К сожалению, многие юные майнеры не разбираются в принципе работы майнинга и тут же считают, что их обманывают все вокруг. Всем новичкам рекомендуем начать знакомство с криптовалютами с нашей библии.

Легендарный вор блоков. Источник: Телеграм-чат 2Miners

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

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

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

Майнер. Источник: 2Биткоина

Каждое решение блока подойдёт только той ноде, которая сгенерировала задачу. Можно, конечно, просто “зажать” найденный блок, не показывать его в интерфейсе пула и не выплачивать награду майнерам, присвоив её целиком себе. Однако в этом случае всё будет видно, ведь список найденных блоков на пуле будет отличаться от списка в блокчейн-эксплорере.

Например, вот список блоков для пула PPLNS Ethereum PoW ethw.2miners.com в эксплорере, а вот этот же список блоков на самом пуле. Любой человек может сопоставить блоки, найденные адресом пула в блокчейне с таким же списком на своём пуле. Как вы понимаете, редкий пул пойдёт на подобный репутационный риск.

ПОДПИСЫВАЙТЕСЬ НА НАШ КАНАЛ В ТЕЛЕГРАМЕ. У НАС ХОРОШО!