
После того как я написал статью «Головоломка на 1000 BTC» мне стали писать в личку авторы программ для их решения. В этой статье я расскажу о целом семействе таких программ и протестирую все те, что попали мне в руки, на скорость.
А заодно расскажу, как авторы этих программ выжимают соки из железа.
Речь идёт про головоломки, у которых известен только BTC-адрес формата P2PKH, но не известен публичный ключ. Это головоломки с номерами 71-159, кроме тех, чей номер кратен 5. У головоломок кратных 5 известен публичный ключ и для них применяются совсем другие алгоритмы — кенгуру Полларда или BSGS, на порядки более быстрые, чем bruteforce. Самая лёгкая ещё не вскрытая головоломка с известным публичным ключом — 135.
Краткая хронология программ
Я не претендую на полное знание этой сферы, поэтому, если я что-то упустил, пишите в личку или оставьте комментарий.
Год начала разработки |
Программа |
Автор |
Платформа |
Язык |
|---|---|---|---|---|
2018 |
BitCrack |
brichard19 |
CUDA + OpenCL |
C++ |
2019 |
VanitySearch |
JeanLucPons |
CPU + CUDA |
C++ |
2021 |
KeyHunt |
albertobsd |
CPU |
C++ |
2021 |
KeyHunt-Cuda |
Qalander |
CUDA |
C++ |
2024 |
Cyclone |
dookoo2 |
CPU (AVX2/512) |
C++ |
2024 |
ecloop |
vladkens |
CPU |
C |
2025 |
CUDACyclone |
dookoo2 |
CUDA |
CUDA |
2025 |
BtcMole |
keymole |
CPU (x86-64, ARM64) + CUDA + AMDGPU |
closed source |
BitCrack (2018)
Старейшина жанра. Первая массовая программа для перебора приватных ключей на GPU, поддерживает и CUDA, и OpenCL. Сегодня морально устарела — отстаёт от лидеров примерно в 5 раз. Технические причины разберём в разделе «Что используют авторы для ускорения перебора».
VanitySearch (2019)
Программа Жан-Люка Понса (JeanLucPons) задумывалась для генерации «красивых» биткойн-адресов (1Love…, 1Btc…), но архитектурно оказалась настолько удачна, что почти все последующие проекты связанные с биткойн-головоломками — её прямые потомки или форки. Канонические трюки массовой инверсии Монтгомери и работы с PTX зародились именно здесь.
KeyHunt (2021)
Программа-комбайн для CPU от Alberto: поддерживает Bloom-фильтр по списку адресов, режим BSGS (Baby-step Giant-step) для подбора по известному pubkey, несколько типов целей (BTC, ETH).
KeyHunt-Cuda (2021)
Порт логики KeyHunt + VanitySearch на CUDA от Qalander. Долгое время держался в топе по CUDA-производительности.
Cyclone (2024)
Современная CPU-перебиралка от @dookoo2. Некоторым эта программа знакома из комментариев к моей статье «Головоломка на 1000 BTC» — там автор объясняет принятые им архитектурные решения. За точку отсчёта в наших таблицах берётся именно Cyclone.
ecloop (2024)
Минималистичный C-проект от русскоязычного разработчика vladkens: main.c + несколько библиотек для хэшей, минимум зависимостей.
CUDACyclone (2025)
CUDA-версия Cyclone от того же @dookoo2.
BtcMole (2025)
Свежий проект от автора под ником keymole. Распространяется в виде бинарных сборок. Поддерживает Windows, Linux; процессоры amd64, arm64, arm; видеокарты Nvidia, AMD.
Методика бенчмаркинга
Почему нельзя верить «попугаям»
Каждая из этих программ во время работы рисует на экране собственную скорость в Mkey/s (миллионах ключей в секунду). Доверять этим цифрам нельзя по нескольким причинам:
Скам в крипте — обыденность. Цифру можно нарисовать любую.
Холодный VS горячий старт. Первые несколько секунд GPU/CPU показывают результат заметно выше среднего рабочего.
Внутренние счётчики бывают просто кривые.
В моём бенчмарке замеряется только время от запуска процесса до того момента, когда он в поток вывода попал искомый приватный ключ. Никаких внутренних метрик в зачёт.
Технически это «реши одну и ту же задачу»: каждой программе даётся одинаковый диапазон и случайный ключ-цель внутри него. Время — по системным часам, факт находки — по поиску известного hex в выводе.
Размер выборки: почему 100 итераций. Сначала я делал по 10–20 прогонов на программу. На таких выборках одна «неудачная» позиция ключа могла кардинально перевернуть таблицу: разные программы сканируют диапазон в разном порядке (последовательно, со смещением, случайно), и один и тот же случайный ключ оказывается для одной программы «на старте», а для другой «в самом конце». Один такой выброс при 10 запусках сдвигал среднее на десятки процентов. Мне пришлось увеличить поисковые интервалы примерно вдвое относительно первой версии бенча и поднять число прогонов до 100 на каждую программу — итоговый бенчмарк работал всю ночь. Стандартная ошибка среднего теперь ≈ σ/√100 ≈ σ/10, чего вполне достаточно для статистической достоверности.
Репозиторий бенчмарка
Скрипт и все патчи доступны на GitHub.
Дизайнерские решения в `bench.py`
Все программы — с настройками по умолчанию. Я сознательно не подбирал размер батча, число потоков, grid/slices и т.п. — предполагаю, что авторы выставляют оптимальные настройки по умолчанию. Точные команды можно посмотреть в скрипте.
Один источник случайности. SEED фиксирован (
SEED = 42), так что на повторных запусках набор ключей-целей идентичный — можно честно сравнивать прогон с прогоном.Per-device параметры. Для CPU и CUDA задаются разные интервалы (
2^33и2^35соответственно) и одинаковое число итераций (100). Для AMDGPU — короткий интервал и мало итераций (см. соответствующий раздел).Единый разбор вывода. Каждой программе сопоставлен
success_re— регулярное выражение, по которому распознаётся «нашёл этот ключ».Тайм-аут с принудительным завершением. Если программа уходит в бесконечный цикл или зависает, через
BENCH_TIMEOUTсекунд ей шлётсяSIGTERM, потомSIGKILL. Итерация засчитывается как FAIL.Изоляция подпрограмм. Каждая программа клонируется и собирается в отдельной папке
work/<name>/(кроме BtcMole — cpu/cuda/amdgpu делят одну папку, так как репозиторий один на все версии).Патчи под сборку. Часть программ из обзора без правок просто не собирается на свежем GCC/CUDA/ROCm. Для таких случаев в бенче лежат собственные патчи (bug-fix Makefile’ов, замены deprecated CUDA-API, правки include’ов), которые применяются перед сборкой.
Запуск: ./bench.py --device cpu, ./bench.py --device cuda или ./bench.py --device amdgpu. Перед первым запуском — --prepare (clone + build). Все настройки (число итераций, прогревов, размер интервала, seed) — вверху скрипта.
Сам скрипт bench.py написан с помощью Claude Code.
Оборудование стенда
CPU: AMD EPYC 7C13 (64 ядра / 128 потоков, 2.45 GHz base)
GPU: NVIDIA CMP 90HX (Ampere, sm_86, 50 SM, 1530 MHz @ 200 W power-limit)
AMDGPU: Radeon R9 Fury (gfx803, 56 CUs)
OS: Linux (Calculate Linux, kernel 6.18)
Тестирование CPU-программ
Особенности тестирования на CPU
Эти программы рассчитаны на круглосуточную работу — в реальности процессор нагрет, может сбрасывать частоту. Холодный замер дал бы завышенные цифры. Поэтому перед каждой программой идёт прогревочный прогон, результаты которого не учитываются (константа WARMUP_PER_DEVICE в bench.py).
Сколько потоков отдаётся программе. Каждой CPU-программе передаётся 115 потоков из 128 доступных (~90%). Оставшиеся 13 потоков остаются за графической оболочкой, фоновыми службами, самим bench.py и т.п. Если отдать программе все 128, она будет конкурировать за процессорное время с GUI и системой — итог станет менее точным.
Важная оговорка про SIMD. На моей машине нет AVX-512, есть только AVX-2. Поэтому Cyclone собирается и тестируется именно в этом варианте. Бенчмарк ARM64 я тоже не проводил.
Тестируемые программы
Параметры прогона
Диапазон поиска:
[0x200000000, 0x3ffffffff](size =2^33≈ 8.6 миллиарда ключей).Ключи: 100 (разные случайные внутри диапазона).
Эталон скорости: Cyclone (за 1.00× принят его суммарный результат).
Результаты
Программа |
OK / FAIL |
Σ время (s) |
Avg (s) |
Скорость (× эталон) |
|---|---|---|---|---|
BtcMole (CPU) |
100 / 0 |
1111.15 |
11.11 |
1.32 |
ecloop |
100 / 0 |
1384.45 |
13.84 |
1.06 |
Cyclone (AVX-2) |
100 / 0 |
1469.36 |
14.69 |
1.00 |
KeyHunt |
100 / 0 |
3691.10 |
36.91 |
0.40 |
Тестирование GPU-программ
Особенности тестирования на GPU
Холодная карта ≠ рабочая карта: на холодной частота держится на разгонной, после прогрева начинаются сброс частот (так называемый тротлинг — защита от перегрева). Любитель публиковать рекорды просто запустит свою программу первой. Чтобы убрать этот эффект, частота и power limit GPU зафиксированы:
CMP 90HX (NVIDIA):
power-limit 200 W,clock 1530 MHz— при этих параметрах частота не сбрасывается, сколько бы карта ни работала. Откуда взялись именно такие значения — подробно разобрано в моей предыдущей статье «Максимально выгодно используем видеокарты с помощью школьной формулы из физики».
Плюс 2 прогревочных прогона перед общим тестированием, как и на CPU.
Что заявляют сами авторы
Заявленные скорости на топовой RTX 5090 (Blackwell, sm_120):
CycloneCUDA (dookoo2) — 6200 Mkey/s.
BtcMole (keymole) — 9520 Mkey/s.
Значения приведены для справки, в тестах мы на них не ориентируемся.
Карты Nvidia
Тестируемые программы
Параметры прогона
Диапазон поиска:
[0x800000000, 0xfffffffff](size =2^35≈ 34.4 миллиарда ключей).Ключи: 100.
Эталон скорости: CUDACyclone (за 1.00× принят его суммарный результат).
Карта: NVIDIA CMP 90HX (sm_86, 50 SM, 200 W @ 1530 MHz).
Результаты
Программа |
OK / FAIL |
Σ время (s) |
Avg (s) |
Скорость (× эталон) |
|---|---|---|---|---|
BtcMole (CUDA) |
100 / 0 |
901.99 |
9.02 |
1.46 |
KeyHunt-Cuda |
100 / 0 |
1302.08 |
13.02 |
1.01 |
CUDACyclone |
100 / 0 |
1320.70 |
13.21 |
1.00 |
KeyKiller-Cuda |
100 / 0 |
2952.25 |
29.52 |
0.45 |
KeyScanner |
92 / 8 |
6166.90 |
67.03 |
0.21 |
BitCrack (CUDA) |
100 / 0 |
6289.19 |
62.89 |
0.21 |
Карты AMD
Единственная программа, авторы которой заморочились с поддержкой AMD-карт — это BtcMole. Остальные авторы живут в парадигме «есть только NVIDIA».
Да, есть ещё clBitCrack (OpenCL), внешне работающая под AMD, но в реальности она совсем не ищет ключи. Она сдулась на первом же ключе из бенча: диапазон 0x40000000:0x7fffffff (всего 2³⁰ ≈ 1.07 млрд ключей), цель — адрес 1Q4U2cBxgduTyEiWFWBF16tjsb4hR7zee9, известный приватный ключ 0x6d06ef13. BtcMole-AMDGPU нашёл ключ за секунды. clBitCrack прокрутил весь диапазон и завершился сообщением Reached end of keyspace — ключ не найден. То же самое — на остальных трёх итерациях. Похоже, в OpenCL-ядре BitCrack есть баг арифметики или хеширования. Поэтому скрипт пометил все запуски clBitCrack как FAIL.
Грубая оценка скорости clBitCrack. На независимом тесте на AMD RX 580 clBitCrack показывает ~9.42 Mkey/s, btcmole-AMDGPU на той же карте — ~240 Mkey/s. То есть даже если бы clBitCrack находил ключи, отрыв был бы в 25 раз в пользу BtcMole. Это уже не «оптимизация», а просто другая весовая категория.
Тестируемые программы
Параметры прогона
Диапазон поиска:
[0x40000000, 0x7fffffff](size =2^30≈ 1.07 миллиарда ключей) — короткий, потому что BitCrack-OpenCL заведомо FAIL и тратить на него больше времени смысла нет.Ключи: 4 — достаточно для проверки работоспособности BtcMole-AMDGPU, не претендует на статистическую значимость.
Карта: AMD Radeon RX 580.
Результаты
Программа |
OK / FAIL |
Σ время (s) |
Avg (s) |
|---|---|---|---|
BtcMole (AMDGPU) |
4 / 0 |
16.73 |
4.18 |
BitCrack (OpenCL) |
0 / 4 |
— |
— |
Если кто-то знает другие живые программы-решатели для карт AMD — сообщите мне.
Что используют авторы для ускорения перебора
Все рассматриваемые проекты решают одну и ту же задачу — массовое сложение точек на кривой secp256k1, хеширование SHA-256 + RIPEMD-160, сравнение хэша с целевым. Ниже — основные технические приёмы, упорядоченные по программам.
BitCrack — «в лоб», без массовой инверсии
Старейшина. Считает каждое сложение точек отдельно. На каждом шаге — инверсия по модулю (InvMod в конечном поле). Это самая дорогая операция в EC-арифметике (в ~60 раз медленнее умножения). VanitySearch и все последующие снижают эту цену через одну инверсию на большой батч точек (массовая инверсия) — отсюда и пятикратное отставание BitCrack.
VanitySearch — массовая инверсия Монтгомери
Здесь нужно отдельно сказать спасибо Жан-Люку Понсу (JeanLucPons на GitHub). Его проект VanitySearch 2019 года — это, без преувеличения, фундамент всей программ-решателей. По моим оценкам, больше 90% всех CPU- и GPU-программ для перебора приватных ключей так или иначе содержат куски его кода на C++: классы Int, IntGroup, IntMod, Point, SECP256K1, файлы Random.cpp, базовые PTX-макросы для 256-битной арифметики. Это видно невооружённым глазом — открываешь репозиторий любого «нового» решателя, а внутри лежит копия этих файлов с минимальными правками. KeyHunt, KeyHunt-Cuda, KeyKiller, KeyScanner, Cyclone — все они стоят на плечах этого человека.
Ценность работы Понса не в одной идее, а в их сочетании: он принёс в нишу высокопроизводительный 256-битный классы Int и IntMod для 256-битной арифметики, компактную реализацию EC-арифметики над secp256k1 без зависимости от тяжёлого OpenSSL/libsecp256k1. Запрограммировал на C++ передовой алгоритм инверсии DivStep62, Монтгомери-батчи для обработки точек.
Идея массовой инверсии: копим произведение разностей (x_i − x_target), делаем единственный InvMod от полного произведения, потом «раскручиваем» обратно, получая инверсию каждой разности по очереди. Эффективная стоимость самой дорогой операции в EC-арифметике падает до 3 умножений на точку. Эту схему сейчас использует каждая CUDA-программа из обзора, кроме BitCrack — и каждая вторая CPU-программа.
То, что один человек проделал такую колоссальную работу и выложил её под свободной лицензией, — большое везение для всех. Без VanitySearch не было бы ни KeyHunt-Cuda, ни Cyclone, ни большинства проектов, которые мы здесь сравниваем.
KeyHunt — гибкость и BSGS
KeyHunt берёт код secp256k1 от Жан-Люка Понса, но накручивает поверх Bloom-фильтр (для проверки по большому списку адресов) и BSGS (для поиска по известному pubkey). Никаких AVX, никакой массовой инверсии в основных режимах перебора. Зато умеет: BTC + ETH, P2PKH + P2SH + bech32, файлы со списками целей. Сила этой программы в алгоритме BabyStep-GiantStep (работает с известными публичными ключами), в простом брутфорсе P2PKH она работает хорошо, но отстаёт от лидеров.
KeyHunt-Cuda и CUDACyclone — inline PTX
На первый взгляд — там C++ код, но если присмотреться, то многие макросы разворачиваются в inline PTX-ассемблер для 256-битной арифметики:
#define UADDO(c, a, b) asm volatile ("add.cc.u64 %0, %1, %2;" : "=l"(c) : "l"(a), "l"(b) : "memory"); #define UADDC(c, a, b) asm volatile ("addc.cc.u64 %0, %1, %2;" : "=l"(c) : "l"(a), "l"(b) : "memory");
CUDACyclone дополнительно реализует батчевую инверсию — тот же приём массовой инверсии Монтгомери, перенесённый в ядро. По умолчанию: батч в 128 точек.
Cyclone — AVX-2 интринсики для хешей
Cyclone использует __m256i напрямую: SHA-256 и RIPEMD-160 для 8 параллельных потоков сжимаются в одно 256-битное регистр-поле. Файлы sha256_avx2.cpp и ripemd160_avx2.cpp — почти учебник по SIMD-хешированию:
#define Maj(x, y, z) _mm256_or_si256(_mm256_and_si256(x, y), _mm256_and_si256(z, _mm256_or_si256(x, y))) #define Ch(x, y, z) _mm256_xor_si256(_mm256_and_si256(x, y), _mm256_andnot_si256(x, z)) #define ROR(x, n) _mm256_or_si256(_mm256_srli_epi32(x, n), _mm256_slli_epi32(x, 32 - n))
Модулярная арифметика — на стандартных C+±операторах + наработки Жана-Люка. Есть отдельный AVX-512-вариант для процессоров с поддержкой AVX-512.
ecloop — компиляторные builtin’ы + AVX2
ecloop сознательно отказался от inline-ассемблера, но взял AVX2-интринсики. 256-битная арифметика — через GCC/Clang-builtin’ы:
__builtin_addcll(x, y, carryin, &carryout) // add-with-carry __builtin_uaddll_overflow(x, y, &rs) // overflow detection
Расчёт на то, что современный clang сам поднимет это в adc/adcx-инструкции (вместо ручного inline-asm).
Хеши — полноценный AVX2 и AVX-512 в lib/rmd160s.c: SHA-256 и RIPEMD-160 параллельно по 8 потоков через __m256i и т.п. Размер батча для инверсии — 2048 точек. Итог — 1.06× от Cyclone при компактном коде.
BtcMole — возможные оптимизации
С BtcMole сложнее — исходники закрыты, все суждения только по бинарникам. Что можно утверждать наверняка:
Аппаратная поддержка x86-64 + ARM64 — обычно достигается компиляторными SIMD-интринсиками (
__m256i/__m512iпод Intel,vqaddq_*/vmlal_*под NEON), либо отдельными asm-вставками для каждой архитектуры. Раз скорость на x86 опережает Cyclone, велика вероятность использования более подходящих интрисинков и ручных asm-вставок.CUDA-сборка единая для sm_50…sm_120 — это Fat Binary с заранее скомпилированными
.cubin-ами. Внутри почти наверняка inline PTX (как у конкурентов) или даже SASS (если автор пошёл дорогой Retired Coder).AMDGPU-сборка покрывает GCN 3-4, CDNA, RDNA1-4
Массовая инверсия Монтгомери — с такой скоростью без неё нельзя; вопрос только в размере группы.
Fat Binary — почему некоторые программы такие большие
Технология Fat Binary в CUDA-мире — это упаковка нескольких прекомпилированных .cubin-ов под разные архитектуры карт Nvidia в один исполняемый файл, плюс PTX-код для остальных, для которых нет предкомпилированных ядер. Преимущество: один бинарник работает и на 1080Ti, и на RTX 4090, и на новых Blackwell без перекомпиляции. Недостаток — размер.
Программа |
Размер бинарника |
Архитектуры в FatBin |
|---|---|---|
KeyHunt-Cuda |
~1.5 МБ |
одна (выбирается через |
CUDACyclone |
~2.6 МБ |
три (sm_75/86/89) + автодетект текущей карты |
BtcMole (GPU) |
~16 МБ |
11 NVIDIA + ~10 AMD |
CycloneCUDA и BtcMole заработали без всяких патчей. KeyHunt-Cuda требует ручной сборки под целевую архитектуру (например, так: make CCAP=89).
Сводка по стеку оптимизаций
Программа |
Mass-inverse |
Inline asm |
SIMD-хеши |
Fat Binary |
Особое |
|---|---|---|---|---|---|
BitCrack |
❌ |
❌ |
❌ |
❌ |
— |
VanitySearch |
✅ (родоначальник) |
PTX |
— |
❌ |
— |
KeyHunt |
в спец-режимах |
❌ |
❌ |
❌ |
BSGS, Bloom |
KeyHunt-Cuda |
✅ |
PTX |
— |
❌ |
— |
Cyclone |
✅ |
❌ |
AVX2/512 |
n/a |
— |
ecloop |
✅ (2048) |
builtin’ы |
AVX2 |
n/a |
компактность |
CUDACyclone |
✅ (один-на-батч) |
PTX |
— |
✅ (3 arch) |
настраиваемые параметры запуска |
BtcMole |
✅ |
предположительно да |
предположительно да |
✅ (~20 arch) |
мульти-платформа CPU+CUDA+AMDGPU |
Двигаемся к потолку производительности
Retired Coder и проект RCAsm
Разработчик под ником Retired Coder (RC) известен как автор серии быстрых решателей биткойн-головоломок по алгоритму кенгуру Полларда. На днях он опубликовал проект RCAsm — Python-обёртку над cuAssembler для написания CUDA-ядер прямо на уровне SASS, машинного кода самого низкого уровня для карт Nvidia.
Зачем это нужно? Цитирую RC из README:
PTX is not powerful enough: 1. You still cannot control registers usage. 2. PTX does not provide all instructions, some of them can be really important. 3. There is no way to declare fast functions. 4. There is no way to use uniform registers and instructions directly. 5. There is no way to specify control codes. 6. There is no good management for carry flags. 7. You have to check what SASS is generated every time.
PTX — это промежуточное представление, которое NVIDIA-компилятор ptxas потом транслирует в реальный машинный код для GPU (SASS). На многих этапах ptxas принимает решения «за разработчика» в ущерб эффективности.
RCAsm обходит это, давая прямой доступ к SASS ценой головной боли — синтаксис SASS намного ужаснее обычного ассемблера — для каждой ассемблерной команды нужно указывать массу технических параметров, типа числа тактов задержки, биты барьеров, синхронизаций и т.п.
Работает только с CUDA v12.8 (другие версии не поддерживаются).
Работает хакерским образом — вначале пишется обычное ядро, компилируется, а потом патчится.
Это и есть последнее слово индустрии для перебора приватных ключей. Если кто-то решит побить рекорды Retired Coder (19 Mkey/s на 5090 в алгоритме кенгуру Полларда), наверное, ему придётся идти тем же путём.
Команды для решения 71 головоломки
Если хочется попробовать всё-таки вскрыть нерешённую головоломку — это для тех, кто верит в удачу или у кого куча собственного железа (см. ниже про математику лотереи). Команды ниже — для головоломки № 71 (BTC-адрес 1PWo3JeB9jrGwfHDNpdGK54CRas7fsVzXU, диапазон 2^70..2^71-1). Подставьте свой кошелёк/диапазон по аналогии для других номеров.
CPU
# Cyclone (AVX2) ./Cyclone -t 24 -r 400000000000000000:7fffffffffffffffff \ -a 1PWo3JeB9jrGwfHDNpdGK54CRas7fsVzXU # ecloop — режим mul (умножение точек) ./ecloop mul -t 24 -f target.h160 \ -r 400000000000000000:7fffffffffffffffff # keyhunt — последовательный режим по адресу ./keyhunt -m address -t 24 -l c \ -r 400000000000000000:7fffffffffffffffff \ -a 1PWo3JeB9jrGwfHDNpdGK54CRas7fsVzXU # BtcMole — единый бинарник для всех устройств ./bm bf -pz 71 +cpu # только CPU
CUDA
CUDACyclone
Больше примеров в README автора.
./CUDACyclone --address 1PWo3JeB9jrGwfHDNpdGK54CRas7fsVzXU \ --range 400000000000000000:7fffffffffffffffff \ --grid 128,8 --slices 64
KeyHunt-Cuda
./KeyHunt -t 0 -g --gpui 0 --gpux 256,256 \ -m address -l c -r 400000000000000000:7fffffffffffffffff \ 1PWo3JeB9jrGwfHDNpdGK54CRas7fsVzXU
KeyKiller-Cuda — принимает только размер диапазона в битах
./kk -r 71 -a 1PWo3JeB9jrGwfHDNpdGK54CRas7fsVzXU
KeyScanner
./keyscanner -a 1PWo3JeB9jrGwfHDNpdGK54CRas7fsVzXU \ -r 400000000000000000:7fffffffffffffffff
BitCrack (CUDA)
./cuBitCrack --keyspace 400000000000000000:7fffffffffffffffff \ -o found.txt 1PWo3JeB9jrGwfHDNpdGK54CRas7fsVzXU
BtcMole — CUDA с тонкой настройкой числа SM
./bm bf -pz 71 -cpu +cuda # все SM ./bm bf -pz 71 -cpu +cuda:30,100% # 30 SM на карте 0, 100% SM на карте 1
AMDGPU
BtcMole — единственный реально работающий вариант на картах AMD.
./bm bf -pz 71 -cpu -cuda +amdgpu # Оставляем 20% GPU для интерфейса и роликов ./bm bf -pz 71 -cpu -cuda +amdgpu:80%
Сохранение прогресса между рестартами
После проверки CLI каждой программы и кода — поддержка чек-поинтов есть у большего числа проектов, чем казалось:
Программа |
Сохраняет прогресс с возможностью продолжения |
Как включить |
|---|---|---|
BitCrack |
да |
|
BtcMole |
да, для каждого устройства при диапазонах размером в 2^40 ключей и выше |
автоматически подхватывается |
Cyclone (CPU) |
пишет log в |
|
KeyKiller-Cuda |
да (только в range-режиме, не в random) |
флаг |
KeyScanner |
да (только в range-режиме) |
|
KeyHunt (CPU) |
нет |
|
KeyHunt-Cuda |
нет |
|
CUDACyclone |
нет |
|
ecloop |
нет |
Вероятность открытия головоломки
Если у вас нет сотен видеокарт, то вскрытие нерешённой головоломки (№ 71, 72, …) — это лотерея. Победит либо тот, кто сильно раньше начал, либо тот, у кого больше железок.
Поясню масштаб. Размер диапазона головоломки № 71 — 2^70 ≈ 1.18 × 10^21 ключей. Производительность одной CMP 90HX в btcmole-cuda ≈ 1950 Mkeys/s (среднее по нашему бенчу). Одной картой полный перебор 50% интервала займёт 9 599 лет. То есть если вы 1 год перебираете, то у вас примерно 1 шанс из 19 000, что именно вы вскроете головоломку. Это выше, чем сорвать джекпот в лотерею, но всё равно мало.
Заключение
Победители:
-
Среди программ с открытым кодом:
На CPU — ecloop (1.06× относительно Cyclone). Cyclone почти не уступает (1.00×).
На CUDA — KeyHunt-Cuda (1.01×) с минимальным отрывом от CUDACyclone (1.00×); фактически паритет.
-
Среди всех программ (включая закрытый код):
На CPU — btcmole (1.32× относительно Cyclone).
На CUDA — btcmole (1.46× относительно CUDACyclone).
На AMD GPU — btcmole (единственный, кто работает; остальные либо не пытались поддержать AMD, либо не работают на свежем ROCm).
Конкретные источники преимущества BtcMole проверить нельзя — код закрыт. Но судя по поведению, набор приёмов мало отличается от лидеров с открытым кодом: массовая инверсия Монтгомери, низкоуровневая работа с флагами переноса, толстый Fat Binary под все актуальные железки.
Про внутренние «попугаи». В целом, к моему удивлению, заявленные авторами цифры более или менее соответствуют реальности — относительный расклад программ на «их» Mkey/s примерно совпадает с тем, что показывает наш честный wall-clock-бенчмарк. Единственное яркое исключение — KeyKiller-Cuda: там внутренний счётчик завышал результат раза в полтора (учитывалось только GPU-время, без CPU-составляющей), и без патча программа выглядела бы намного сильнее, чем есть. У CUDACyclone цифры в Mkey/s заметно «пляшут» от запуска к запуску, но среднее всё равно близко к реальной скорости. Так что общее правило «не верьте экранным цифрам» сохраняется, но конкретно у этих авторов — без злого умысла.
Индустрия не стоит на месте. Retired Coder (человек решивший 120, 125 и 130 головоломки) уже показал, что чистый SASS даёт ещё 15-25 процентов по сравнению с PTX. Правда, по его словам, программироание на SASS несёт серьёзные риски потери психического здоровья.
Про пулы. На базе почти каждой программы из списка есть свой пул для совместного перебора. Я не буду брать на себя ответственность кого-то рекомендовать: основатели пулов, как правило, анонимны, проверить их репутацию невозможно, гарантий выплаты вашей доли в случае находки нет.
Я прошу прощения у авторов непротестированных программ — я протестировал всё, что нашёл из поиска гугла и телеграм-чатов. Хотя, уверен, что есть масса авторов со своими самописными решениями, которые не попали в обзор.
Но комментарии открыты — напишите там о своих программах. Запускайте бенчмарк на своём железе со своими программами, пишите свои результаты.
В следующей части (она будет не ранее чем через месяц) мы будем рассматривать программы для решения 135-й и 140-й головоломок. Так что допиливайте ваш софт и присылайте ссылки в личку.
Всем цифровым кладоискателям — удачи!
© 2026 ООО «МТ ФИНАНС»
Комментарии (4)

DooKoo2
30.04.2026 18:34Да, и дополню. При текущей сложности головоломок, что скорость условно X, что даже 2X на карту - даже не капля в море, а атом в капле. Нужен пул и толпа энтузиастов с деньгами для аренды GPU. При текущей цене BTC взлом текущего кошелька экономически не выгоден, стоимость аренды GPU для его гарантированного взлома превышает потенциальную награду.
Я принимал участие, был свой пул, в пике было до 6.000 GPU или около того, скорость до 28Tkeys/s, пройденный диапазон - 0.014% от всего диапазона поиска:)
Удача отвернулась, ставка не сыграла, вовремя уйти с дистанции тоже показатель:) Всего наковыряли 1.4 миллиона диапазонов по 40 бит каждый, использовался мой CUDACyclone + CUDAPool.
Кстати, скорость CUDACyclone на 5090 в пике до 9.1Gkeys/s (при потреблении 500 ватт).
Про последние нововведения типа SASS прямых оптимизаций, да легче на petooh или brainfuck сэмитировать алгоритм Шора, чем заниматься этим. Надо иметь кучу свободного воемени и гору энтузиазма, которых у меня увы нет, на текущий момент.
Собственно вот мой гитхаб, кому интересно - велком: https://github.com/Dookoo2?tab=repositories
Arioch
Ну... как минимум было бы любопытно сравнить одну и ту же программу/задание на nVidia vs AMD
Правда, пока она только одна такая, непонятно что это покажет. Скорость самих карточек (включая compute-драйвера), или умение/внимание единственного автора к оптимизации под этот бренд.
inetstar Автор
Надеюсь, кто-то найдётся из читателей с современной картой АМД. Типа 9070. Или 7900-серии.
DooKoo2
На AMD нативом является OpenCL и он стабильно медленнее вылизанной CUDA. В последнее время продвигается HIP для портирования CUDA кода на AMD, но это костыль. Там где счет идет на наносекунды это приговор.