VanitySearch 是一个比特币地址前缀查找器。如果您想生成安全的私钥,请使用 -s 选项输入您的密码,该密码将用于生成 BIP38 标准的基本密钥( VanitySearch.exe -s "My PassPhrase" 1MyPrefix )。您还可以使用VanitySearch.exe -ps "My PassPhrase"它将向您的密码添加加密安全种子。
VanitySearch 可能无法为您的 GPU 计算出合适的网格大小,因此请使用 -g 选项尝试不同的值以获得最佳性能。如果您想同时使用 GPU 和 CPU,则保留一个 CPU 核心来处理 GPU/CPU 交换(使用 -t 选项设置 CPU 线程数)可能会获得最佳性能。
关于 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.4GHz 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
可以使用分裂密钥以安全的方式为第三方生成虚荣地址。
例如,Alice 想要一个好的前缀,但没有 CPU 能力。 Bob 拥有请求的 CPU 能力,但无法知道 Alice 的私钥,Alice 必须使用分裂密钥。
Alice 在她的计算机上生成密钥对,然后将生成的公钥和所需的前缀发送给 Bob。可以通过电子邮件完成,没有什么秘密。尽管如此,Alice 必须安全地保管私钥,不要泄露它。
VanitySearch.exe -s "AliceSeed" -kp
Priv : L4U2Ca2wyo721n7j9nXM9oUWLzCj19nKtLeJuTXZP3AohW9wVgrH
Pub : 03FC71AE1E88F143E8B05326FC9A83F4DAB93EA88FFEACD37465ED843FCC75AA81
注意:密钥对是标准SecpK1密钥对,可以使用第三方软件生成。
Bob 使用 Alice 的公钥和想要的前缀运行 VanitySearch。
VanitySearch.exe -sp 03FC71AE1E88F143E8B05326FC9A83F4DAB93EA88FFEACD37465ED843FCC75AA81 -gpu -stop -o keyinfo.txt 1ALice
它生成一个包含部分私钥的 keyinfo.txt 文件。
PubAddress: 1ALicegohz9YgrLLa4ADCmam7X2Zr6xJZx
PartialPriv: L2hbovuDd8nG4nxjDq1yd5qDsSQiG8xFsAFbHMcThqfjSP6WLg89
鲍勃将此文件发回给爱丽丝。也可以通过电子邮件完成。部分私钥不允许任何人猜测最终Alice的私钥。
然后,Alice 可以使用她的私钥(步骤 1 中生成的私钥)和 Bob 的 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秘密是Q的私钥(Q=k秘密.G)。这就是 -rp 选项的目的。
搜索者在不知道 k秘密的情况下找到了 addr(k部分.G+k秘密.G) 的匹配项,因此请求者拥有所需的地址 addr(k部分.G+Q) 和相应的私钥 k部分+k秘密(模n)。搜索者无法猜测这个最终的私钥,因为他不知道 k秘密(他只知道 Q)。
注意:这个解释是简化的,它不考虑对称性和同态优化,但想法是相同的。
比特币地址(P2PKH)由 hash160(以 Base58 格式显示)组成,这意味着有2160个可能的地址。安全哈希函数可以被视为伪数生成器,它将给定的消息转换为随机数。在本例中,为 [0,2 160 ] 范围内的数字(均匀分布)。因此,在 n 次尝试后击中特定数字的概率为 1-(1-1/2 160 ) n 。我们执行 n 次统计上独立的伯努利试验。
如果我们有一个包含 m 个不同地址的列表 (m<=2 160 ),则搜索空间会减少到 2 160 /m,1 次尝试后发现冲突的概率变为 m/2 160,而发现冲突的概率则变为 m/2 160经过 n 次尝试后变为 1-(1-m/2 160 ) n 。
一个例子:
我们有一个能够生成1GKey/s 的硬件,并且我们有一个10 6 个地址的输入列表,下表显示了在一定时间后发现冲突的概率:
时间 | 可能性 |
---|---|
1秒 | 6.8e-34 |
1分钟 | 4e-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并在Visual C++ 2017中打开VanitySearch.sln。
您可能需要在项目属性中重置Windows SDK 版本。
在“构建”->“配置管理器”中,选择“发布”配置。
构建并享受。
注意:当前版本已使用 CUDA SDK 10.0 编译,如果您有其他版本的 CUDA SDK,您可能需要使用文本编辑器更新 VanitySearch.vcxproj 中的 CUDA SDK 路径。当前的 nvcc 选项设置为从 3.0 功能开始的架构,对于较旧的硬件,请将所需的计算功能添加到 GPUEngine.cu 属性、CUDA C/C++、设备、代码生成中的列表中。
安装CUDA SDK。
安装旧版 g++(仅适用于 CUDA SDK)。根据 CUDA SDK 版本和您的 Linux 发行版,您可能需要安装较旧的 g++。
安装最新的 gcc。 VanitySearch 需要使用最新的 gcc (>=7) 进行编译和链接。当前版本是使用 gcc 7.3.0 编译的。
编辑 makefile 并为 nvcc 设置适当的 CUDA SDK 和编译器路径。或者将它们作为变量传递以make
调用。
CUDA = /usr/local/cuda-8.0
CXXCUDA = /usr/bin/g++-4.8
如果您有多个具有不同架构的 GPU,您可以输入架构列表(请参阅 nvcc 文档)。
根据您的硬件将 CCAP 设置为所需的计算能力。有关更多信息,请参阅 docker 部分。最近的 CUDA SDK 已弃用计算能力 2.0 (Fermi)。
转到 VanitySearch 目录。
要构建仅 CPU 版本(不支持 CUDA):
$ make all
使用 CUDA 构建:
$ make gpu=1 CCAP=2.0 all
Runnig VanitySearch(Intel(R) Xeon(R) CPU,8 核,@ 2.93GHz,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
(CPU/Dockerfile)Docker 映像是针对仅 CPU 版本和每个受支持的 CUDA 计算功能版本 ( CCAP
) 构建的。一般来说,用户应该选择其硬件和驱动程序支持的最新CCAP
。兼容性表可以在维基百科或您产品的 NVIDIA 官方网页上找到。
Docker 使用多阶段构建来提高最终镜像的大小。提供脚本来促进构建过程。
当您自己构建时,可以通过IMAGE_NAME
环境变量自定义完整映像名称(包括所有者/存储库部分)。它默认仅进行带有我们所有者部分的vanitysearch
。 @ratijas 在 Docker hub 上提供了预构建的映像。
构建并标记vanitysearch:cpu
镜像:
$ ./docker/cpu/build.sh
使用“默认”GPU 支持进行构建,这可能不适合您的系统:
$ ./docker/cuda/build.sh
使用定制 GPU 支持进行构建:
$ env CCAP=5.2 CUDA=10.2 ./docker/cuda/build.sh
至于 docker-compose 人员,抱歉,3.x 分支(尚)不支持 docker-composed GPU。但它(希望)很快就会改变。
注意:VanitySearch 图像不需要(也不应该)需要网络访问。为了进一步确保数据不会从正在运行的容器中泄漏,请始终将--network none
传递给 docker run 命令。
$ 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 获得许可。