Головоломка 135 вскрыта
Головоломка 135 вскрыта

Продолжаем серию статей о биткойн-головоломках. Начало истории, тесты программ для головоломок ч.1.

Для всех, кто в теме: 28 июля 2026 года произошло важное событие — головоломка на 13.5 биткойна была вскрыта. Осталось ~903 BTC.

Удивительным фактом остаётся то, что головоломки 120, 125, 130 и 135 (суммарно около 40.2 BTC) вскрыл один и тот же человек — RetiredCoder. В этой статье я немного расскажу о том, как он это сделал, и попробую разгадать кто он.

Что произошло 28 июля

В 08:20 UTC 28 июля 2026 года (блок 959946) с адреса 16RGFo6hjq9ym6Pj7N5H7L1NR1rVPJyw2v ушло 13.5 BTC одной транзакцией.

Через 19 минут RetiredCoder написал в свою тему на Bitcointalk:

Yeah, finally I solved #135, it took about 5 months on 200GPUs. It was… long. I quit, officially. Happy solving #140 without me.

Пять месяцев на 200 видеокартах. И объявление об уходе из проекта. В подписи у него теперь стоит: «I’ve solved #120, #125, #130, #135».

Ещё через полтора часа он выложил RCKangaroo v4.0 — с исходниками ассемблерных turbo-ядер, которые до этого дня были только у него. Приватный ключ он назвал на следующий день, 29 июля, разыграв его через мини-головоломку:

#135 pk is: 0000000000000000000000000000006D9392A16883F90903D5F78DA57AF07EB2

Проверяем ключ

Приватный ключ от 135-й головоломки должен быть 135-битным числом, а публичный ключ раскрыт с 2019 года. Выложенный ключ — настоящий, публичный ключ от него полностью совпадает с тем, что лежит в подписи потратившей транзакции, а адрес — с адресом головоломки 16RGFo6hjq9ym6Pj7N5H7L1NR1rVPJyw2v.

В десятичном виде это 37286935858852539926448623437930621337266, и лежит он на 71.2% глубины интервала — для алгоритма кенгуру Полларда это, впрочем малозначительный факт, метод не идёт по диапазону слева направо.

Сколько стоит вскрыть 135-ю головоломку

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

N = K \cdot \sqrt{W}

Коэффициент K — это и есть то, за что идёт вся борьба. У классической реализации он равен 2.1, у метода 4-х кенгуру Гаудри-Шоста — 1.661. Огромная заслуга RetiredCoder в том, что в своём RCKangaroo он успешно совместил метод 4-х кенгуру и использование зеркальной симметрии X-координат точек на эллиптической кривой относительно нуля. Именно это комбо позволило снизить коэффициент до рекордных 1.15. Ещё одна его важнейшая инновация — простой и малозатратный в вычислительном смысле алгоритм обнаружения и выхода из бесплодных циклов (fruitless loops), в которые неизбежно попадают псевдослучайно прыгающие «кенгуру».

Кстати, в теории он смог этот коэффициент довести до идеальной единицы (1.0). Для этого в сочетании с предыдущими методами нужно использовать только чётные X-координаты за счёт «дешёвой» второй точки (когда берётся \pm P). Но на практике это второе улучшение почти лишено смысла, кроме как для уменьшения числа выдающихся точек (distinguished points) и экономии памяти. Более того, «в ноль» оно работает только на CPU, а на видеокартах из-за расхождения варпов ветвление даёт чистый убыток в скорости. Поэтому в релиз для GPU пошла версия с коэффициентом 1.15, как самая оптимальная для GPU.

Ключ 135-й головоломки лежит в диапазоне от 2^{134} до 2^{135}, то есть ширина интервала — 2^{134}:

N = 1{,}15 \cdot \sqrt{2^{134}} = 1{,}15 \cdot 2^{67} \approx 1{,}70 \cdot 10^{20}

Возьмём RTX 5090 на секретных ассемблерных ядрах, выдающую 19.5 гигаключей в секунду. Одна карта:

t_1 = \frac{1{,}70 \cdot 10^{20}}{19{,}5 \cdot 10^{9}} \approx 8{,}72 \cdot 10^{9}\ \text{c} \approx 2\,421\,000\ \text{часов}

Это 276 лет непрерывной работы. Двести карт делят это число на двести:

t_{200} = \frac{2\,421\,000}{200} \approx 12\,105\ \text{часов} \approx 504\ \text{дня} \approx 16{,}5\ \text{месяцев}

Ожидание — около 16.5 месяцев. А RetiredCoder уложился в 5.

Почему перебор здесь вообще не рассматривается

Для сравнения — если бы публичного ключа не было и приходилось перебирать диапазон целиком, те же 19.5 гигаключей/сек на 200 картах дали бы:

t = \frac{2^{134}}{19{,}5 \cdot 10^{9} \cdot 200} \approx 1{,}77 \cdot 10^{20}\ \text{лет}

Возраст Вселенной — 1{,}38 \cdot 10^{10} лет. То есть в 40 миллиардов раз дольше. Раскрытие публичного ключа в 2019 году сократило задачу с невозможной до дорогой.

Что именно он улучшил

Разрыв между 16.5 месяцами и 5 месяцами закрывается не только удачей, но и крутым кодом. В changelog v4.0 написано:

added turbo kernels (asm) for 4xxx and 5xxx cards, about 14.5GH/s for 4090 and 19.5GH for 5090.

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

Карта

Публичная сборка

Turbo-ядра v4.0

Выигрыш

RTX 5090

~10 000 Мключ/с

19 500 Мключ/с

1.95×

RTX 4090

~8 200 Мключ/с

14 500 Мключ/с

1.76×

RTX 3090

~5 000 Мключ/с

не поддерживаются

Почти двукратное ускорение на одном и том же железе! Без этих ядер ожидание составило бы 32 месяца, а не 16.5. Ядра написаны на чистом ассемблере, и главный трюк автор назвал сам:

I managed to exclude inverse calculation from main loop and applied Montgomery trick three times in total, so I call it «Triple Montgomery trick»

Вычисление обратного элемента в конечном поле (инверсия) — самая дорогая операция при сложении точек на эллиптической кривой. Тройной трюк Монтгомери убрал её из основного цикла целиком, оставив на инверсию около 3% ресурсов GPU.

До 28 июля turbo-ядер в открытом доступе не было. Все пять месяцев, пока сообщество копало 135-ю головоломку на публичной сборке, у автора программы была почти вдвое более быстрая приватная. Выложил он её в тот же день, когда забрал деньги.

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

Сколько работы он реально сделал

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

\log_2\!\left(19{,}5 \cdot 10^{9} \cdot 3600 \cdot 24 \cdot 30{,}5 \cdot 5 \cdot 200\right) = 65{,}48f_{135} = \frac{2^{65{,}48}}{1{,}15 \cdot 2^{67}} = 0{,}30

30 процентов. Он нашёл ключ, сделав меньше трети средней работы.

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

Точная вероятность того, что решение найдётся не позже доли f от среднего объёма работы, равна:

P(f) = 1 - e^{-\frac{\pi}{4}f^{2}}

Квадрат в показателе f^2 всё меняет. На старте поиска, пока пройденных точек мало, парадокс дней рождения играет против нас: вероятность коллизии растет крайне медленно.

Подставляем наши 30% (f = 0{,}30):

P_{135} = 1 - e^{-\frac{\pi}{4} \cdot 0{,}30^{2}} = 6{,}8\%

Из-за квадратичной зависимости реальная вероятность падает с «наивных» 30% до скромных 6.8%. Найти коллизию на таком коротком отрезке пути — это действительно колоссальная удача.

Для сравнения: один из публичных пулов, пытавшихся взломать 135-ю головоломку, успел перебрать 8\,467\,384\,703\,152\,816\,128 ключей. В линейной, «наивной» модели это выглядит как доля f = 0{,}0498, то есть почти 5% от требуемого объёма. Кажется, что работа проделана немалая. Но если подставить эту долю в формулу Рэлея, то реальная вероятность пула найти ключ составит всего 0{,}195\% (меньше двух десятых процента!). С такими мощностями и без секретных ассемблерных ядер у них просто было очень мало шансов против RetiredCoder.

То же самое для 130-й головоломки. Диапазон 2^{129}, значит N = 1{,}15 \cdot 2^{64{,}5}, а по его словам было 400 карт RTX 4090 и два месяца. Turbo-ядер в сентябре 2024 года ещё не существовало — RCKangaroo вообще вышел в открытый доступ только в декабре, — поэтому берём публичные 8.2 гигаключа:

\log_2\!\left(8{,}2 \cdot 10^{9} \cdot 3600 \cdot 24 \cdot 30{,}5 \cdot 2 \cdot 400\right) = 63{,}87f_{130} = \frac{2^{63{,}87}}{1{,}15 \cdot 2^{64{,}5}} = 0{,}58 \quad \Rightarrow \quad P_{130} = 1 - e^{-\frac{\pi}{4} \cdot 0{,}58^{2}} = 23{,}0\%

Здесь его слова про везение тоже подтверждаются: реальная вероятность составила 23% против 44% при «наивном» линейном расчёте. Это заметно лучше среднего.

А вот два таких попадания подряд:

P = P_{130} \cdot P_{135} = 0{,}230 \cdot 0{,}068 = 0{,}0156 \approx 1{,}6\%

1 шанс к 64. Маловероятно, но реально. Но списывать всё на удачу уже неловко, тем более что модель карт для 135-й он не назвал: если это были не 5090, а 4090, доля падает до 22.5%, вероятность — до 3.9%, а суммарная — до 0.9%, то есть 1 шанс к 117.

Версия про датацентр

Всё вышенаписанное объясняет, как ключ был найден, но не объясняет главного: откуда взялись 200 карт RTX 5090 на пять месяцев.

Дело в том, что не так просто арендовать 200 карт 5090 или 400 карт 4090. У публичных провайдеров (Vast.ai, Clore.ai и подобные) я таких опций не видел, такого количества карт одновременно просто нет. У крупных провайдеров в основном предлагаются ускорители для ИИ. А ему были нужны строго карты 4000 или 5000 серии. Говорят, что есть какие-то непубличные майнеры с такими мощностями именно из таких карт. Возможно, но это сложно.

Дело в том, что 15 сентября 2022 года сеть Ethereum перешла на алгоритм Proof-of-Stake, и майнинг на видеокартах был остановлен навсегда. А релиз RTX 4090 состоялся только 12 октября 2022 года (анонс был 20 сентября). Вспомним 130-ю головоломку, где фигурировали 400 карт RTX 4090 (со слов RetiredCoder). Большинство майнеров просто не закупали эти карты в промышленных масштабах, потому что в этом больше не было смысла.

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

Косвенный аргумент — дни, в которые он выводил деньги:

120 — 27.02.2023, понедельник, 09:40 UTC
125 — 09.07.2023, воскресенье, 10:24 UTC
130 — 23.09.2024, понедельник, 08:13 UTC
135 — 28.07.2026, вторник,     08:20 UTC

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

Я собрал время публикации всех его 104 постов на форуме. Статистика интересная: 39 сообщений (почти 40%) оставлены в выходные дни (суббота и воскресенье). Пик активности размазан с 06:00 до 17:00 UTC. Это отлично укладывается в версию человека, который на выходных имеет доступ к серверам или фермам, где может «погонять» свои тесты, а в будни занимается основной работой.

А может реально арендовал? Экономика аренды и головоломок

Давайте посчитаем экономику. Допустим, мы арендуем мощности на Vast.ai по $0.4 за час работы одной топовой карты, и с учётом опта получаем скидку 20% (итого 0.32 $/час).

Чтобы получить 50% вероятность найти ключ, нам нужно выполнить долю работы f = 0{,}94.

N_{50\%} = 0{,}94 \cdot 1{,}15 \cdot 2^{67} \approx 1{,}60 \cdot 10^{20}\ \text{операций}

Карта RTX 5090 (19.3 GH/s) проходит 6{,}95 \cdot 10^{13} ключей в час. На нужный объём уйдёт порядка 2.3 миллиона карто-часов. Умножаем на 0.32 $/час и получаем затраты в ~$736 000.

Много это или мало? Приз за 135-ю головоломку — 13.5 BTC. При курсе в $65 000 это ~$877 000.

Экономика сходится, но посмотрите на это с точки зрения рисков. Если RetiredCoder действительно арендовал мощности, то его поступок выглядит так: он взял весь свой выигрыш со 130-й головоломки (около $845 000) и пошёл в своеобразное «казино». Чтобы получить шансы 50/50 (бросок монетки или ставка «на чёрное»), он был готов сжечь в топке аренды $736 000. В случае победы он забирает банк в $877 000. В случае поражения — теряет свой прошлый выигрыш и время.

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

Рисковать своими деньгами в таких объёмах при столь мизерных шансах на старте — это чистое безумие. Но если он всё-таки пошёл ва-банк на свои кровные, рискнул и сорвал этот куш, то я поздравляю его от всей души!

Лично мой вывод: скорее всего, он использовал служебный датацентр, к которому имел доступ. Обратите внимание — он так и не назвал модель тех самых 200 карт. Это могли быть ИИ-ускорители. Мы лишь косвенно вычислили, что это архитектура Blackwell по тому факту, что он тщательно оптимизировал ассемблерные ядра именно под RTX 5090.

Куда ушли деньги

13.5 BTC ушли на адрес 1Prestige1zSYorBdz94KA2UbJW3hYLTn4 — это самодельный красивый (vanity) адрес. Обычно для их генерации используют программу VanitySearch. Первый символ 1 является обязательным префиксом адреса, а дальше идёт кастомная часть. В данном случае подобрано не просто слово Prestige (8 символов), а Prestige1 (9 символов), где единица работает как визуальный разделитель. Сложность подбора 9 символов в алфавите Base58 составляет 58^9 \approx 7{,}4 \cdot 10^{15} вариантов. Программа VanitySearch на одной видеокарте RTX 4090 выдаёт скорость около 4 миллиардов ключей в секунду (4 GK/s). Значит, на подбор такого адреса на одной RTX 4090 уйдёт в среднем около 21 дня непрерывной работы. Но этот кошелёк впервые засветился при выводе средств со 130-й головоломки, когда, по словам автора, у него в распоряжении была ферма из 400 видеокарт. На таких мощностях генерация этого адреса заняла у него чуть больше часа.

Этот же адрес 23 сентября 2024 года получил 13 BTC с адреса головоломки 130. А выигрыши с головоломок 120 и 125 в 2023 году ушли на другой общий адрес — 3Emiwzxme7Mrj4d89uqohXNncnRM15YESs.

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

Полная картина по всем четырём:

Адрес головоломки

Дата вывода (UTC)

Сумма

Куда ушло

120

17s2b9ksz5y7abUm92cHwG8jEPCzK3dLnT

27.02.2023 09:40

1.2 BTC

3Emiwzxme7Mrj4d89uqohXNncnRM15YESs

125

1PXAyUB8ZoH3WD8n5zoAthYjN15yN5CVq5

09.07.2023 10:24

12.5 BTC

3Emiwzxme7Mrj4d89uqohXNncnRM15YESs

130

1Fo65aKq8s8iquMt6weF1rku1moWVEd5Ua

23.09.2024 08:13

13.00006 BTC

1Prestige1zSYorBdz94KA2UbJW3hYLTn4

135

16RGFo6hjq9ym6Pj7N5H7L1NR1rVPJyw2v

28.07.2026 08:20

13.5 BTC

1Prestige1zSYorBdz94KA2UbJW3hYLTn4

В сумме 40.20006 BTC. За 120-ю дали всего 1.2 BTC, потому что призовой фонд умножили на 10 только 16 апреля 2023 года — уже после того, как RetiredCoder её забрал. Не повезло на 11.3 BTC.

Хотя 13 BTC от 130-й головоломки он почти сразу перевёл на свой старый кошелёк 3Emiwzxme7Mrj4d89uqohXNncnRM15YESs, свежие 13.5 BTC с адреса Prestige пока не двигались.

Who is RetiredCoder?

Из какой страны RetiredCoder

Для начала проверим, в каком часовом поясе сохранено время постов на форуме. Форумное время — это часовой пояс +0 по Гринвичу (UTC).

Анализ 104 сообщений не только говорит нам про его занятость, но и позволяют построить наглядную диаграмму активности:

Час (UTC) | Активность (кол-во постов)
----------|----------------------------------------
00:00     |  0
01:00     |  0
02:00     |  0
03:00     |  0
04:00     |  0
05:00     | ████ 4
06:00     | █████████ 9
07:00     | ██ 2
08:00     | ██████ 6
09:00     | ██████████ 10
10:00     | ████ 4
11:00     | ███████ 7
12:00     | ████ 4
13:00     | █████████ 9
14:00     | ████ 4
15:00     | ██████ 6
16:00     | ████████ 8
17:00     | █████████ 9
18:00     | █████ 5
19:00     | ███ 3
20:00     | ████████ 8
21:00     | █████ 5
22:00     | █ 1
23:00     |  0

За всё время активности есть явный провал, когда он спит: с 23:00 до 04:00 по UTC количество постов равно нулю. Это непрерывное окно в 6 часов — классический график сна.

Если предположить, что человек спит с полуночи до 6 утра, то его локальное время опережает UTC на 1 час (Центральная Европа: Германия, Франция, Польша и т.д.). Если же он ложится в 01:00 и встает в 07:00, то это Восточная Европа (UTC+2). А если он классическая «сова» и спит с 02:00 до 08:00, то это часовой пояс UTC+3 (Москва, Минск, Стамбул).

В любом случае, это точно не Америка и не Восточная Азия. С большой долей вероятности RetiredCoder живёт в Европе или СНГ. По слухам в ранних снимках репозитория RCKangaroo в Web Archive были турецкие комментарии в ранних копиях его репозитория. Я не смог их найти. Учитывая, что в Турции часовой пояс UTC+3 действует круглый год (что идеально совпадает с «окном сна»), RetiredCoder, может находиться и там.

А что насчёт его ника — RetiredCoder («Кодер на пенсии»)?

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

Более того, на форуме проскакивало сообщение от пользователя kTimesG о том, что RetiredCoder — разработчик из Nvidia. И это многое бы объяснило: и доступ к предрелизным партиям или огромным кластерам с архитектурой Blackwell, и феноменальный уровень оптимизации ассемблерных ядер под архитектуру этих карт.

Совместив это с нашими выводами про локацию + знание засекреченного SASS-ассемблера Nvidia, мы получаем красивую и логичную гипотезу: возможно, RetiredCoder — сотрудник Nvidia (турецкий офис?) или их удалённый инженер.

Мини-головоломки

Приватный ключ RetiredCoder не выложил сразу, а сначала запустил мини-головоломку №7 — уже седьмую в серии. Закрылась она в тот же вечер, меньше чем за пять часов.

Психологически это объяснимо: человек забрал 13.5 BTC на железе, которого ни у кого в теме нет, и раздача крошек снижает градус обиды в комментариях. А обида там была. Один из участников написал прямо:

Competing against hundreds of GPUs makes these puzzles feel less like a test of skill and more like a contest of who has access to the biggest hardware budget.

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

Что дальше: головоломка 140

На адресах головоломок с 71 по 160 сейчас лежит 903.02 BTC. Пустыми стоят ровно 13 адресов — все кратные пяти от 75 до 135. Следующая цель с раскрытым публичным ключом — 140-я, на ней 14 BTC.

Только вот каждые пять номеров умножают работу на \sqrt{2^5} \approx 5{,}66:

N_{140} = 1{,}15 \cdot 2^{69{,}5} \approx 9{,}6 \cdot 10^{20}

На 200 картах RTX 5090 с turbo-ядрами это 94 месяца — почти восемь лет. Даже тысяча карт даёт 19 месяцев ожидания.

Давайте посчитаем экономику для 50% вероятности (f = 0{,}94):

N_{140(50\%)} = 0{,}94 \cdot 1{,}15 \cdot 2^{69{,}5} \approx 9{,}03 \cdot 10^{20}\ \text{операций}

В пересчёте на часы RTX 5090 это почти 13 миллионов карто-часов. При всё той же цене аренды $0.32/час затраты составят ~$4 150 000.

Приз — 14 BTC (около $910 000). Он окупает едва ли четверть этих затрат. Экономика полностью сломалась. Взлом 140-й головоломки на арендованных мощностях абсолютно нерентабелен, если только курс биткоина не улетит за $300 000. Даже наличие бесплатного датацентра на работе вряд ли поможет — утаить такие объемы вычислений на протяжении многих месяцев будет почти невозможно.

Именно поэтому сам RetiredCoder прямо заявил, что выходит из гонки:

«It was… long. I quit, officially. Happy solving #140 without me.»

Заключение

Головоломки — это одни из немногих кошельков, которые их создатель официально разрешил вскрывать. История 135-й показывает, что решает уже не столько идея, сколько связка «хороший алгоритм + доступ к парку карт»: коэффициент K удалось опустить с 2.1 до 1.15, ассемблерные ядра дали ещё почти двукратное ускорение, но без 200 видеокарт и это не помогло бы.

© 2026 ООО «МТ ФИНАНС»

Комментарии (0)