Криптовалюты — продолжаем наши исследования.

Posted: 2017-06-20 in IT, Software
Метки:,

Примерно год назад я писал о криптовалютах:
https://aminux.wordpress.com/2016/05/08/small-bitcoin-probe/

И теперь настало время написать ещё.

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

Я решил попробовать сделать себе красивый BTC-адрес. Для этого есть готовое решение — VanityGen-Plus
После сборки/скачивания там будет два бинарника — vanitygen и oclvanitygen. Логика работы этих утилит проста — получив шаблон (какие первые символы мы хотим видеть в адресе), программа начинает в кучу потоков генерить ключи, считать хэши открытой части и сравнивать их с шаблоном. Поскольку хэши на выходе непредсказуемы, то перебор будет вероятностный. В отличие от линейного перебора по словарям, тут нельзя заранее сказать, за сколько шагов будет найден нужный ключ, но можно дать вероятностную оценку.

Первая утилита использует только процессор, и на Core-i7-7700K (4.2 ГГц) перебирает примерно 1,2 млн btc-ключей в секунду.
Для коротких шаблонов (до 6 символов) можно и этой утилитой. Она небыстрая, зато работает сразу и без лишней возни.
Вторая утилита использует OpenCL и вычисления на видеокарте. Чтобы она заработла, мне потребовалось помимо проприетарного драйвера нивидиа также поставить CUDA-фреймворк и пакеты поддержки OpenCL.

Эту утилиту обязательно надо проверить на коротких шаблонах — без корректно поставленных библиотек opencl видяху она грузить будет, а вот решения искать — нет. Убедившись, что решения ищутся, запускаем перебор вот такой командой:

./oclvanitygen -f patterns.txt -C BTC -o ./btc_nice.priv.key

где patterns.txt — файл с шаблонами (одна строка на шаблон, пустая строка в конце), а btc_nice.priv.key — файл, куда будут записаны приватные и публичные ключи.

Если у вас две и больше карт ( ферма/ранчо/платнация =] ), то вывод может быть такой:

./oclvanitygen -C BTC -f patterns.txt
Generating BTC Address
Difficulty: 873388193410
Available OpenCL platforms:
0: [NVIDIA Corporation] NVIDIA CUDA
0: [NVIDIA Corporation] GeForce GTX 1080 Ti
1: [NVIDIA Corporation] GeForce GTX 1070
2: [NVIDIA Corporation] GeForce GTX 1070

В этом случае надо несколькими параметрами -D указать, на каких именно картах считать:

./oclvanitygen -C BTC -f patterns.txt -D 0:0 -D 0:1 -D 0:2
Мощность брутфорса масштабируется без проблем.
GTX 1080 Ti выдает около 100 млн ключей в секунду. Отличный бенчмарк =)

Вывод должен быть примерно такой (я указал два шаблона: «1BTCe» и «1User»):

$ ./oclvanitygen -f patterns.txt -C BTC -o ./btc_nice.priv.key

Generating BTC Address
Next match difficulty: 4401737 (2 prefixes)
BTC Pattern: 1BTCe
BTC Address: 1BTCe62AaD1B...JbPzsH
BTC Privkey: 5KLsUj....DMo75LK
Difficulty: 264104224
BTC Pattern: 1User
BTC Address: 1UsernJEj8J...q4ejkD
BTC Privkey: 5Jeq4...w4Gtf

Здесь строки после «BTC Address: » — это хэши публичного ключа, начало которого соответствует нашему шаблону , который мы брутили.
Их мы можем опубликовать или отослать тому, кто будет нам перечислять монеты.
А вот строчки после «BTC Privkey: » — это приватные ключи. Их надо максимально секурно сохранить, чтобы они не потерялись и не попали к злоумышленникам, поскольку именно с помощью этих ключей делается подписывание транзакций на расходование ваших средств. Некоторые клиенты умеют импортировать их сразу из текстового файла (каждый приватный ключ своей строкой), некоторые умеют читать их через QR-код. При работе с криптовалютами QR-коды приватных ключей (если это единственный способ добавить красивый адрес на мобильное устройство) надо генерить локально, не доверяя никаким внешним сервисам.

Есть один трикс с шаблонами: часто есть ряд пожеланий по регистру. Например, шаблоны Vasya, VASYA и VaSiA — могут подойти вам, а вот шаблоны vASIA, VaSIa или vasYa — нет. Стоит перед началом большого перебора добавить все подходящие вам варианты — тогда вероятность нахождения хотя бы одного красивого адреса возрастает в разы, что особенно важно для подбора длинных префиксов.

В вероятностном переборе есть замечательная особенность — если вы прервете его, и начнёте заново через какое-то время, вероятность найти решение уже будет выше, так что держать брутилку постоянно запущенной необязательно. Вероятность, она такая =)

После нескольких дней расчетов на GTX-1070 я получил себе красивый адрес для этого блога, перебрав десяток-другой-третий триллионов ключей:

1AminBLogc4py89Xu9WKxj9Fph1yts1bCd

Важно помнить, что разные криптовалюты налагают разные требования к допустимым символам в адресе — так, в биткоине адрес начинается с единицы, и там не может быть большой буквы О или малой l.
Моя видеокарта содержит на борту почти 2000 cuda-ядер и брутит BTC-адреса со скоростью около 56 млн ключей в секунду.

Next match difficulty: 7361414773035 (7 prefixes)
[55.09 Mkey/s][total 1120744243200][Prob 10.0%][50% in 1.8d][Found 1/8]

Сборка данного софта под федорой зело геморная, требует кучу девелоперских пакетов, дров и фреймворков, курения манов и компиляния, но полученный результат того стоит.
Если история команд не врёт, я ставил вот такое непотребство как минимум :

opencl-filesystem opencl-utils opencl-utils-devel
mesa-libOpenCL mesa-libOpenCL-devel
cuda-command-line-tools-8-0 cuda-demo-suite-8-0 cuda-driver-dev-8-0 cuda-drivers cuda-npp-8-0 cuda-npp-dev-8-0 cuda-runtime-8-0. cuda-samples-8-0 cuda-visual-tools-8-0

У меня есть ещё впереди большие планы на параллельные вычисления.

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

В процессе расчёта видеокарта полностью загружена:

и неплохо греется:

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

$ nvidia-smi
Thu Jun 8 08:17:54 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI ***** Driver Version: ***** |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 1070 Off | 0000:01:00.0 On | N/A |
| 54% 74C P2 116W / 151W | 2223MiB / 8113MiB | 100% Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 5199 G /usr/libexec/Xorg 102MiB |
| 0 5536 G /usr/bin/krunner 9MiB |
| 0 5538 G /usr/bin/plasmashell 52MiB |
| 0 5587 G /usr/bin/korgac 2MiB |
| 0 5591 G /usr/bin/kgpg 2MiB |
| 0 6129 G /usr/bin/akonadi_archivemail_agent 2MiB |
| 0 6137 G /usr/bin/akonadi_mailfilter_agent 2MiB |
| 0 6140 G /usr/bin/akonadi_newmailnotifier_agent 2MiB |
| 0 6142 G /usr/bin/akonadi_sendlater_agent 2MiB |
| 0 6415 G /usr/bin/kwin_x11 30MiB |
| 0 9765 C ./oclvanitygen 2011MiB |
+-----------------------------------------------------------------------------+

Последняя строчка — это и есть наш брутфорсер, сожравший 2 Гб видеопамяти. Впрочем, Xorg и плазма тоже старой видяхе могут дать прикурить ;D .

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

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

Есть и досадная сторона — жалею, что не купил 1080-Ti. Теперь разве что ждать 2000-ю серию.

В следующий раз ешё чего-нибудь посчитаем какой-нить подобной тулзой. Думаю, это будет hashcat vs пароли.

Реклама
- комментарии
  1. alexanderlazarev:

    Пара хинтов:
    1. Если есть интегрированная GPU в материнке или в CPU, Xorg лучше перенести туда и не будет проблем с лагами интерфейса
    2. Видеокарту лучше держать ниже 70 градусов, иначе будет жить меньше
    3. 1070 отлично гониться и можно получить +20% на майнинге. В конфиге Xorg ставим coolbits=12, перезагружаемся и можем ставить параметры разгона в nvidia-settings

  2. Вадим:

    А есть схема сборки фермы или рекомендации, какие компоненты для нее покупать?
    Последний раз собирал компьютер в 1996 году 🙂

  3. Amin:

    1. Ну, я ещё на основной машине и погамать люблю с топовыми настройками. Да и на моей материнке нет видеовыхода встроенного гпу. Я больше экспериментирую пока, но если считать много — однозначно отдельная ферма. Для вычислений на видяхе Xorg вообще стартовать не надо в этом случае, главное дрова и CUDA/OpenCL поставить.
    Хотя когда у тебя KVM под VGA, а на видеокартах топовых такого разъёма нет, встроенное видео выручает очень кстати. За совет спасибо.

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

    3. Я предпочитаю скриптами из консоли, те же nvidia-settings. Да и греться оно начинает зверски, а под нагрузкой они и на штатных частотах греют помещение. Карту на рабочем/домашнем компе я не готов так насиловать, замена её может превратиться в аховый геморрой =)

    Вадим, ферма — это просто комп с одной/несколькими картами. Самое ценное там и ключевое — это видеокарты. В ферму их лучше брать одного семейства — скажем, только из Radeon RX 4-й серии или нвидиа-1000-ые.

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

    Смысл имеют энергоэффективные видеокарты топового сегмента — отношение вычислительной мощности, цены и тепловыделения самые подходящие.
    Материнка — любая, где достаточно слотов PCI-E. Совсем говно брать не стоит, но и какие-то «супер-пердложения для майнеров» тоже особо не нужны.
    Проц, память, диск — минимальные. А вот блок питания нужен мощный и качественный.

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

    Прикольно собирать на раме из алюминиевых уголков — дополнительный отвод тепла карточкам, легкая, удобно переносить.
    https://forum.bits.media/index.php?/topic/4297-moskva-karkasy-dlia-maining-ferm/

    Вообще с 1996 года очень много чего поменялось =)

  4. […] Amin на Криптовалюты — продолжае… […]

  5. […] Ещё немного параллел… на Криптовалюты — продолжае… […]

  6. […] а сменить систему почти 10-и летней давности меня смогла сподвигнуть только сдохшая видеокарта. Аналогичный подход я практиковал и к накопителям, […]

  7. Вроде как вантигеном не безопасно генерировать адреса — часто бывает колизия…

  8. Amin:

    Подтверждения небезопасности ? Хоть одно ?