VanitySearch เป็นเครื่องมือค้นหาคำนำหน้าที่อยู่ Bitcoin หากคุณต้องการสร้างคีย์ส่วนตัวที่ปลอดภัย ให้ใช้ตัวเลือก -s เพื่อป้อนข้อความรหัสผ่านของคุณซึ่งจะใช้ในการสร้างคีย์ฐานตามมาตรฐาน BIP38 ( VanitySearch.exe -s "My PassPhrase" 1MyPrefix ) คุณยังสามารถใช้ VanitySearch.exe -ps "My PassPhrase" ซึ่งจะเพิ่ม crypto Secure Seed ให้กับข้อความรหัสผ่านของคุณ
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 ต้องใช้ split-key
อลิซสร้างคู่คีย์บนคอมพิวเตอร์ของเธอ จากนั้นส่งคีย์สาธารณะที่สร้างขึ้นและคำนำหน้าที่ต้องการให้กับ Bob สามารถทำได้ทางอีเมล ไม่มีอะไรเป็นความลับ อย่างไรก็ตาม อลิซต้องเก็บคีย์ส่วนตัวไว้อย่างปลอดภัยและไม่เปิดเผย
VanitySearch.exe -s "AliceSeed" -kp
Priv : L4U2Ca2wyo721n7j9nXM9oUWLzCj19nKtLeJuTXZP3AohW9wVgrH
Pub : 03FC71AE1E88F143E8B05326FC9A83F4DAB93EA88FFEACD37465ED843FCC75AA81
หมายเหตุ: คู่คีย์คือคู่คีย์ SecpK1 มาตรฐานและสามารถสร้างได้ด้วยซอฟต์แวร์ของบริษัทอื่น
Bob รัน VanitySearch โดยใช้กุญแจสาธารณะของ Alice และคำนำหน้าที่ต้องการ
VanitySearch.exe -sp 03FC71AE1E88F143E8B05326FC9A83F4DAB93EA88FFEACD37465ED843FCC75AA81 -gpu -stop -o keyinfo.txt 1ALice
มันสร้างไฟล์ keyinfo.txt ที่มีคีย์ส่วนตัวบางส่วน
PubAddress: 1ALicegohz9YgrLLa4ADCmam7X2Zr6xJZx
PartialPriv: L2hbovuDd8nG4nxjDq1yd5qDsSQiG8xFsAFbHMcThqfjSP6WLg89
Bob ส่งไฟล์นี้กลับมาให้อลิซ ก็สามารถทำได้ทางอีเมล คีย์ส่วนตัวบางส่วนไม่อนุญาตให้ใครเดาคีย์ส่วนตัวสุดท้ายของอลิซได้
จากนั้นอลิซสามารถสร้างคีย์ส่วนตัวสุดท้ายขึ้นมาใหม่ได้โดยใช้คีย์ส่วนตัวของเธอ (อันที่สร้างในขั้นตอนที่ 1) และ keyinfo.txt จาก Bob
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 part +k Secret (mod n) โดยที่ k part คือคีย์ส่วนตัวบางส่วนที่ผู้ค้นหาพบ และ k Secret คือคีย์ส่วนตัวของ Q (Q=k Secret .G) นี่คือจุดประสงค์ของตัวเลือก -rp
ผู้ค้นหาพบการจับคู่สำหรับ addr(k part .G+k Secret .G) โดยไม่ทราบ k Secret ดังนั้นผู้ขอจึงมีที่อยู่ที่ต้องการ addr(k part .G+Q) และคีย์ส่วนตัวที่เกี่ยวข้อง k part +k Secret ( ม็อด เอ็น) ผู้ค้นหาไม่สามารถเดาคีย์ส่วนตัวสุดท้ายนี้ได้เนื่องจากเขาไม่รู้ ความลับ (เขารู้เพียงคำถามเท่านั้น)
หมายเหตุ: คำอธิบายนี้เรียบง่าย ไม่ได้ดูแลการปรับสมมาตรและเอนโดมอร์ฟิซึม แต่แนวคิดก็เหมือนกัน
ที่อยู่ bitcoin (P2PKH) ประกอบด้วย hash160 (แสดงในรูปแบบ Base58) ซึ่งหมายความว่ามีที่อยู่ที่เป็นไปได้ 2,160 แห่ง ฟังก์ชันแฮชที่ปลอดภัยสามารถมองเห็นได้ว่าเป็นเครื่องกำเนิดตัวเลขหลอก โดยจะแปลงข้อความที่กำหนดเป็นตัวเลขสุ่ม ในกรณีนี้ ตัวเลข (กระจายสม่ำเสมอ) ในช่วง [0,2 160 ] ดังนั้น ความน่าจะเป็นที่จะได้ตัวเลขเฉพาะหลังจาก n พยายามคือ 1-(1-1/2 160 ) n เราทำการทดลองแบบ Bernoulli โดยอิสระทางสถิติ
หากเรามีรายการที่อยู่ที่แตกต่างกัน 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.9จ-29 |
1 ปี | 2.1จ-26 |
10 ปี | 2.1จ-25 |
1,000 ปี | 2.1จ-23 |
อายุของโลก | 8.64จ-17 |
อายุของจักรวาล | 2.8e-16 (น้อยกว่าถูกลอตเตอรีมาก) |
การคำนวณเสร็จสิ้นโดยใช้เครื่องคิดเลขออนไลน์ที่มีความแม่นยำสูง
อย่างที่คุณเห็น แม้จะมีฮาร์ดแวร์ของคู่แข่ง แต่ก็ไม่น่าเป็นไปได้มากที่คุณจะพบการชนกัน Birthday Paradox ใช้ไม่ได้กับบริบทนี้ แต่จะใช้ได้ก็ต่อเมื่อเรารู้คีย์สาธารณะแล้ว (ไม่ใช่ที่อยู่ แฮชของคีย์สาธารณะ) ที่เราต้องการค้นหา โปรแกรมนี้จะไม่ค้นหาการชนกันระหว่างคีย์สาธารณะ ค้นหาเฉพาะการชนกันกับที่อยู่ที่มีคำนำหน้าบางอย่างเท่านั้น
ติดตั้ง CUDA SDK และเปิด VanitySearch.sln ใน Visual C++ 2017
คุณอาจต้องรีเซ็ต เวอร์ชัน Windows SDK ของคุณในคุณสมบัติของโปรเจ็กต์
ใน Build->Configuration Manager เลือก Release configuration
สร้างและเพลิดเพลิน
หมายเหตุ: รีลีสปัจจุบันได้รับการคอมไพล์ด้วย CUDA SDK 10.0 หากคุณมี CUDA SDK รุ่นอื่น คุณอาจต้องอัปเดตพาธ CUDA SDK ใน VanitySearch.vcxproj โดยใช้โปรแกรมแก้ไขข้อความ ตัวเลือก 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 และตั้งค่า CUDA SDK และเส้นทางคอมไพเลอร์ที่เหมาะสมสำหรับ nvcc หรือส่งผ่านเป็นตัวแปรเพื่อ make
ร้องขอ
CUDA = /usr/local/cuda-8.0
CXXCUDA = /usr/bin/g++-4.8
คุณสามารถป้อนรายการสถาปัตยกรรมได้ (โปรดดูเอกสารประกอบของ nvcc) หากคุณมี GPU หลายตัวที่มีสถาปัตยกรรมต่างกัน
ตั้งค่า CCAP เป็นความสามารถในการคำนวณที่ต้องการตามฮาร์ดแวร์ของคุณ ดูส่วนนักเทียบท่าสำหรับข้อมูลเพิ่มเติม ความสามารถในการคำนวณ 2.0 (Fermi) เลิกใช้งานแล้วสำหรับ CUDA SDK ล่าสุด
ไปที่ไดเร็กทอรี VanitySearch
หากต้องการสร้างเวอร์ชันเฉพาะ CPU (ไม่รองรับ CUDA):
$ make all
วิธีสร้างด้วย CUDA:
$ make gpu=1 CCAP=2.0 all
Runnig VanitySearch (ซีพียู Intel(R) Xeon(R), 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/นักเทียบท่าไฟล์)cuda-ccap-2
, cuda-ccap-2.0
(cuda/ccap-2.0.Dockerfile)cpu
(ซีพียู/ด็อคเกอร์ไฟล์) อิมเมจ Docker ได้รับการสร้างขึ้นสำหรับเวอร์ชัน CPU เท่านั้น และสำหรับเวอร์ชันความสามารถในการประมวลผล CUDA ( CCAP
) ที่รองรับแต่ละเวอร์ชัน โดยทั่วไป ผู้ใช้ควรเลือก CCAP
ล่าสุดที่ฮาร์ดแวร์และไดรเวอร์ของตนรองรับ ตารางความเข้ากันได้สามารถพบได้ใน Wikipedia หรือที่หน้าเว็บอย่างเป็นทางการของ NVIDIA ของผลิตภัณฑ์ของคุณ
นักเทียบท่าใช้การสร้างหลายขั้นตอนเพื่อปรับปรุงขนาดภาพสุดท้าย มีสคริปต์ไว้เพื่ออำนวยความสะดวกในกระบวนการสร้าง
เมื่อสร้างด้วยตัวเอง คุณสามารถปรับแต่งชื่ออิมเมจแบบเต็ม (รวมถึงเจ้าของ/ส่วนของ repo) ผ่านตัวแปรสภาพแวดล้อม IMAGE_NAME
โดยค่าเริ่มต้นจะเป็นเพียง vanitysearch
โดยไม่มีส่วนที่เป็นเจ้าของ อิมเมจที่สร้างไว้ล่วงหน้ามีอยู่ใน Docker hub จาก @ratijas
สร้างและแท็ก vanitysearch:cpu
image:
$ ./docker/cpu/build.sh
สร้างด้วยการสนับสนุน GPU "เริ่มต้น" ซึ่งอาจไม่เหมาะกับระบบของคุณ:
$ ./docker/cuda/build.sh
สร้างด้วยการรองรับ GPU แบบกำหนดเอง:
$ env CCAP=5.2 CUDA=10.2 ./docker/cuda/build.sh
สำหรับผู้ที่เขียนนักเทียบท่า ขออภัย GPU ที่เขียนโดยนักเทียบท่ายังไม่รองรับสาขา 3.x แต่(หวังว่า)คงจะเปลี่ยนแปลงเร็วๆ นี้
หมายเหตุ: อิมเมจ 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