VanitySearch — это инструмент для поиска префиксов биткойн-адресов. Если вы хотите сгенерировать безопасные закрытые ключи, используйте опцию -s для ввода парольной фразы, которая будет использоваться для создания базового ключа в соответствии со стандартом BIP38 ( VanitySearch.exe -s «My PassPhrase» 1MyPrefix ). Вы также можете использовать VanitySearch.exe -ps «My PassPhrase» , который добавит криптобезопасное начальное значение к вашей парольной фразе.
VanitySearch может не рассчитать подходящий размер сетки для вашего графического процессора, поэтому попробуйте другие значения, используя опцию -g, чтобы получить наилучшую производительность. Если вы хотите использовать графические процессоры и процессоры вместе, вы можете добиться наилучшей производительности, сохранив одно ядро ЦП для обработки обмена графическими процессорами/ЦП (используйте опцию -t, чтобы установить количество потоков ЦП).
Обсуждение VanitySearch@bitcointalk
Вы можете загрузить последнюю версию с https://github.com/JeanLucPons/VanitySearch/releases.
VanitySearch [-check] [-v] [-u] [-b] [-c] [-gpu] [-stop] [-i inputfile]
[-gpuId gpuId1[,gpuId2,...]] [-g g1x,g1y,[,g2x,g2y,...]]
[-o outputfile] [-m maxFound] [-ps seed] [-s seed] [-t nbThread]
[-nosse] [-r rekey] [-check] [-kp] [-sp startPubKey]
[-rp privkey partialkeyfile] [prefix]
prefix: prefix to search (Can contains wildcard '?' or '*')
-v: Print version
-u: Search uncompressed addresses
-b: Search both uncompressed or compressed addresses
-c: Case unsensitive search
-gpu: Enable gpu calculation
-stop: Stop when all prefixes are found
-i inputfile: Get list of prefixes to search from specified file
-o outputfile: Output results to the specified file
-gpu gpuId1,gpuId2,...: List of GPU(s) to use, default is 0
-g g1x,g1y,g2x,g2y, ...: Specify GPU(s) kernel gridsize, default is 8*(MP number),128
-m: Specify maximun number of prefixes found by each kernel call
-s seed: Specify a seed for the base key, default is random
-ps seed: Specify a seed concatened with a crypto secure random seed
-t threadNumber: Specify number of CPU thread, default is number of core
-nosse: Disable SSE hash function
-l: List cuda enabled devices
-check: Check CPU and GPU kernel vs CPU
-cp privKey: Compute public key (privKey in hex hormat)
-kp: Generate key pair
-rp privkey partialkeyfile: Reconstruct final private key(s) from partial key(s) info.
-sp startPubKey: Start the search with a pubKey (for private key splitting)
-r rekey: Rekey interval in MegaKey, default is disabled
Пример (Windows, Intel Core i7-4770 3,4 ГГц, 8 многопоточных ядер, GeForce GTX 1050 Ti):
C:C++VanitySearchx64Release>VanitySearch.exe -stop -gpu 1TryMe
VanitySearch v1.17
Difficulty: 15318045009
Search: 1TryMe [Compressed]
Start Fri Jan 31 08:12:19 2020
Base Key: DA12E013325F12D6B68520E327847218128B788E6A9F2247BC104A0EE2818F44
Number of CPU thread: 7
GPU: GPU #0 GeForce GTX 1050 Ti (6x128 cores) Grid(48x128)
[251.82 Mkey/s][GPU 235.91 Mkey/s][Total 2^32.82][Prob 39.1%][50% in 00:00:12][Found 0]
PubAddress: 1TryMeJT7cfs4M6csEyhWVQJPAPmJ4NGw
Priv (WIF): p2pkh:Kxs4iWcqYHGBfzVpH4K94STNMHHz72DjaCuNdZeM5VMiP9zxMg15
Priv (HEX): 0x310DBFD6AAB6A63FC71CAB1150A0305ECABBE46819641D2594155CD41D081AF1
C:C++VanitySearchx64Release>VanitySearch.exe -stop -gpu 3MyCoin
VanitySearch v1.11
Difficulty: 15318045009
Search: 3MyCoin [Compressed]
Start Wed Apr 3 14:52:45 2019
Base Key:FAF4F856077398AE087372110BF47A1A713C8F94B19CDD962D240B6A853CAD8B
Number of CPU thread: 7
GPU: GPU #0 GeForce GTX 1050 Ti (6x128 cores) Grid(48x128)
124.232 MK/s (GPU 115.601 MK/s) (2^33.18) [P 47.02%][50.00% in 00:00:07][0]
Pub Addr: 3MyCoinoA167kmgPprAidSvv5NoM3Nh6N3
Priv (WIF): p2wpkh-p2sh:L2qvghanHHov914THEzDMTpAyoRmxo7Rh85FLE9oKwYUrycWqudp
Priv (HEX): 0xA7D14FBF43696CA0B3DBFFD0AB7C9ED740FE338B2B856E09F2E681543A444D58
C:C++VanitySearchx64Release>VanitySearch.exe -stop -gpu bc1quantum
VanitySearch v1.11
Difficulty: 1073741824
Search: bc1quantum [Compressed]
Start Wed Apr 3 15:01:15 2019
Base Key:B00FD8CDA85B11D4744C09E65C527D35E231D19084FBCA0BF2E48186F31936AE
Number of CPU thread: 7
GPU: GPU #0 GeForce GTX 1050 Ti (6x128 cores) Grid(48x128)
256.896 MK/s (GPU 226.482 MK/s) (2^28.94) [P 38.03%][50.00% in 00:00:00][0]
Pub Addr: bc1quantum898l8mx5pkvq2x250kkqsj7enpx3u4yt
Priv (WIF): p2wpkh:L37xBVcFGeAZ9Tii7igqXBWmfiBhiwwiKQmchNXPV2LNREXQDLCp
Priv (HEX): 0xB00FD8CDA85B11D4744C09E65C527D35E2B1D19095CFCA0BF2E48186F31979C2
Можно безопасно создать личный адрес для третьей стороны с помощью разделенного ключа.
Например, Алисе нужна хорошая приставка, но у нее нет мощности процессора. У Боба есть запрошенная мощность процессора, но он не может знать закрытый ключ Алисы, Алисе приходится использовать разделенный ключ.
Алиса генерирует пару ключей на своем компьютере, а затем отправляет сгенерированный открытый ключ и желаемый префикс Бобу. Это можно сделать по электронной почте, ничего секретного. Тем не менее, Алиса должна надежно хранить закрытый ключ и не раскрывать его.
VanitySearch.exe -s "AliceSeed" -kp
Priv : L4U2Ca2wyo721n7j9nXM9oUWLzCj19nKtLeJuTXZP3AohW9wVgrH
Pub : 03FC71AE1E88F143E8B05326FC9A83F4DAB93EA88FFEACD37465ED843FCC75AA81
Примечание. Пара ключей представляет собой стандартную пару ключей SecpK1 и может быть создана с помощью стороннего программного обеспечения.
Боб запускает VanitySearch, используя открытый ключ Алисы и желаемый префикс.
VanitySearch.exe -sp 03FC71AE1E88F143E8B05326FC9A83F4DAB93EA88FFEACD37465ED843FCC75AA81 -gpu -stop -o keyinfo.txt 1ALice
Он генерирует файл keyinfo.txt, содержащий частичный закрытый ключ.
PubAddress: 1ALicegohz9YgrLLa4ADCmam7X2Zr6xJZx
PartialPriv: L2hbovuDd8nG4nxjDq1yd5qDsSQiG8xFsAFbHMcThqfjSP6WLg89
Боб отправляет этот файл обратно Алисе. Это также можно сделать по электронной почте. Частичный закрытый ключ не позволяет никому угадать окончательный закрытый ключ Алисы.
Затем Алиса может восстановить окончательный закрытый ключ, используя свой закрытый ключ (сгенерированный на шаге 1) и файл keyinfo.txt от Боба.
VanitySearch.exe -rp L4U2Ca2wyo721n7j9nXM9oUWLzCj19nKtLeJuTXZP3AohW9wVgrH keyinfo.txt
Pub Addr: 1ALicegohz9YgrLLa4ADCmam7X2Zr6xJZx
Priv (WIF): p2pkh:L1NHFgT826hYNpNN2qd85S7F7cyZTEJ4QQeEinsCFzknt3nj9gqg
Priv (HEX): 0x7BC226A19A1E9770D3B0584FF2CF89E5D43F0DC19076A7DE1943F284DA3FB2D0
По сути, -sp (стартовый открытый ключ) добавляет указанный начальный открытый ключ (назовем его Q) к стартовым ключам каждого потока. Это означает, что при поиске (используя -sp) вы ищете не addr(kG), а addr(k part .G+Q), где k — закрытый ключ в первом случае, а k — «частичный закрытый ключ». "во втором случае. G — точка генератора SecpK1.
Затем запрашивающая сторона может восстановить окончательный закрытый ключ, выполнив k часть +k секрет (mod n), где k часть — это частичный секретный ключ, найденный искателем, а k secret — это закрытый ключ Q (Q=k secret .G). Это цель опции -rp.
Искатель нашел совпадение с адресом addr(k часть .G+k секрет .G), не зная k секрета , поэтому запрашивающая сторона имеет искомый адрес addr(k часть .G+Q) и соответствующий закрытый ключ k часть +k секрет ( мод н). Искатель не может угадать этот окончательный закрытый ключ, поскольку он не знает секрета k (он знает только Q).
Примечание. Это объяснение упрощено, оно не учитывает оптимизацию симметрии и эндоморфизма, но идея та же.
Биткойн-адрес (P2PKH) состоит из хеша 160 (отображается в формате Base58), что означает, что существует 2160 возможных адресов. Безопасную хэш-функцию можно рассматривать как генератор псевдочисла: она преобразует данное сообщение в случайное число. В данном случае это число (равномерно распределенное) в диапазоне [0,2 160 ]. Таким образом, вероятность попасть в определенное число после n попыток равна 1-(1-1/2 160 ) n . Мы проводим n испытаний Бернулли статистически независимо.
Если у нас есть список из m различных адресов (m<=2 160 ), пространство поиска сокращается до 2 160 /m, вероятность найти коллизию после 1 попытки становится m/2 160 , а вероятность найти коллизию после n попыток становится 1-(1-m/2 160 ) n .
Пример:
У нас есть оборудование, способное генерировать 1GKey/s , и у нас есть входной список из 10 6 адресов. В следующей таблице показана вероятность обнаружения коллизии через определенное время:
Время | Вероятность |
---|---|
1 секунда | 6.8е-34 |
1 минута | 4е-32 |
1 час | 2.4e-30 |
1 день | 5.9e-29 |
1 год | 2.1e-26 |
10 лет | 2.1e-25 |
1000 лет | 2.1e-23 |
Возраст земли | 8.64e-17 |
Возраст Вселенной | 2,8e-16 (намного меньше, чем выигрыш в лотерею) |
Расчет был произведен с помощью высокоточного онлайн-калькулятора.
Как видите, даже при наличии конкурентоспособного оборудования вероятность коллизии очень мала. Парадокс дня рождения в этом контексте неприменим, он работает только в том случае, если мы уже знаем открытый ключ (а не адрес, хэш открытого ключа), который хотим найти. Эта программа не ищет коллизии между открытыми ключами. Он ищет только коллизии с адресами с определенным префиксом.
Установите CUDA SDK и откройте VanitySearch.sln в Visual C++ 2017.
Возможно, вам придется сбросить версию Windows SDK в свойствах проекта.
В разделе «Сборка->Диспетчер конфигураций» выберите конфигурацию выпуска .
Стройте и наслаждайтесь.
Примечание. Текущая версия была скомпилирована с использованием CUDA SDK 10.0. Если у вас другая версия CUDA SDK, вам может потребоваться обновить пути CUDA SDK в VanitySearch.vcxproj с помощью текстового редактора. Текущая опция nvcc настроена на архитектуру начиная с версии 3.0, для более старого оборудования добавьте нужные вычислительные возможности в список в свойствах GPUEngine.cu, CUDA C/C++, Device, Code Generation.
Встроенный CUDA SDK.
Установите более старую версию g++ (только для CUDA SDK). В зависимости от версии CUDA SDK и вашего дистрибутива Linux вам может потребоваться установить более старую версию g++.
Установите последнюю версию gcc. VanitySearch необходимо скомпилировать и связать с последним gcc (>=7). Текущая версия скомпилирована с помощью gcc 7.3.0.
Отредактируйте make-файл и настройте соответствующие пути CUDA SDK и компилятора для nvcc. Или передайте их как переменные make
вызова.
CUDA = /usr/local/cuda-8.0
CXXCUDA = /usr/bin/g++-4.8
Вы можете ввести список архитектур (см. документацию nvcc), если у вас есть несколько графических процессоров с разной архитектурой.
Установите CCAP на желаемую вычислительную мощность в соответствии с вашим оборудованием. Дополнительную информацию см. в разделе Docker. Вычислительные возможности 2.0 (Fermi) устарели для последней версии CUDA SDK.
Перейдите в каталог VanitySearch.
Чтобы собрать версию только для ЦП (без поддержки CUDA):
$ make all
Для сборки с помощью CUDA:
$ make gpu=1 CCAP=2.0 all
Запуск VanitySearch (ЦП Intel(R) Xeon(R), 8 ядер, @ 2,93 ГГц, Quadro 600 (x2))
$ export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64
$ ./VanitySearch -t 7 -gpu -gpuId 0,1 1TryMe
# VanitySearch v1.10
# Difficulty: 15318045009
# Search: 1TryMe [Compressed]
# Start Wed Mar 27 10:26:43 2019
# Base Key:C6718D8E50C1A5877DE3E52021C116F7598826873C61496BDB7CAD668CE3DCE5
# Number of CPU thread: 7
# GPU: GPU #1 Quadro 600 (2x48 cores) Grid(16x128)
# GPU: GPU #0 Quadro 600 (2x48 cores) Grid(16x128)
# 40.284 MK/s (GPU 27.520 MK/s) (2^31.84) [P 22.24%][50.00% in 00:02:47][0]
#
# Pub Addr: 1TryMeERTZK7RCTemSJB5SNb2WcKSx45p
# Priv (WIF): Ky9bMLDpb9o5rBwHtLaidREyA6NzLFkWJ19QjPDe2XDYJdmdUsRk
# Priv (HEX): 0x398E7271AF3E5A78821C1ADFDE3EE90760A6B65F72D856CFE455B1264350BCE8
latest
, cuda-ccap-6
, cuda-ccap-6.0
(cuda/Dockerfile)cuda-ccap-5
, cuda-ccap-5.2
(cuda/Dockerfile)cuda-ccap-2
, cuda-ccap-2.0
(cuda/ccap-2.0.Dockerfile)cpu
(процессор/Dockerfile) Образы Docker создаются для версии только для ЦП и для каждой поддерживаемой версии возможностей вычислений CUDA ( CCAP
). Как правило, пользователям следует выбирать последнюю версию CCAP
поддерживаемую их оборудованием и драйвером. Таблицу совместимости можно найти в Википедии или на официальной веб-странице NVIDIA вашего продукта.
Docker использует многоэтапные сборки для улучшения конечного размера образа. Предоставляются сценарии для облегчения процесса сборки.
При самостоятельном создании полное имя образа (включая части владельца/репозитория) можно настроить с помощью переменной среды IMAGE_NAME
. По умолчанию это просто vanitysearch
без участия владельца. Готовые образы доступны в Docker Hub от @ratijas.
Создайте и пометьте vanitysearch:cpu
образ:
$ ./docker/cpu/build.sh
Сборка с поддержкой графического процессора «по умолчанию», которая может не подойти для вашей системы:
$ ./docker/cuda/build.sh
Сборка с индивидуальной поддержкой графического процессора:
$ env CCAP=5.2 CUDA=10.2 ./docker/cuda/build.sh
Что касается людей, создающих докеры, извините, графические процессоры, созданные докером, (пока) не поддерживаются в ветке 3.x. Но это (надеюсь) скоро изменится.
Примечание. Образ VanitySearch не требует (и не должен) доступа к сети. Чтобы гарантировать отсутствие утечки данных из работающего контейнера, всегда передайте --network none
в команду запуска Docker.
$ docker run -it --rm --gpus all --network none ratijas/vanitysearch:cuda-ccap-5.2 -gpu -c -stop 1docker
# VanitySearch v1.18
# Difficulty: 957377813
# Search: 1docker [Compressed, Case unsensitive] (Lookup size 3)
# Start Sat Jul 11 17:41:32 2020
# Base Key: B506F2C7CA8AA2E826F2947012CFF15D2E6CD3DA5C562E8252C9F755F2A4C5D3
# Number of CPU thread: 1
# GPU: GPU #0 GeForce GTX 970M (10x128 cores) Grid(80x128)
#
# PubAddress: 1DoCKeRXYyydeQy6xxpneqtDovXFarAwrE
# Priv (WIF): p2pkh:KzESATCZFmnH1RfwT5XbCF9dZSnDGTS8z61YjnQbgFiM7tXtcH73
# Priv (HEX): 0x59E27084C6252377A8B7AABB20AFD975060914B3747BD6392930BC5BE7A06565
VanitySearch распространяется под лицензией GPLv3.