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並且發現衝突的機率經過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 獲得許可。