VanitySearch adalah pencari awalan alamat bitcoin. Jika Anda ingin membuat kunci pribadi yang aman, gunakan opsi -s untuk memasukkan frasa sandi Anda yang akan digunakan untuk membuat kunci dasar seperti standar BIP38 ( VanitySearch.exe -s "My PassPhrase" 1MyPrefix ). Anda juga dapat menggunakan VanitySearch.exe -ps "My PassPhrase" yang akan menambahkan benih aman kripto ke frasa sandi Anda.
VanitySearch mungkin tidak menghitung ukuran grid yang baik untuk GPU Anda, jadi cobalah nilai yang berbeda menggunakan opsi -g untuk mendapatkan performa terbaik. Jika Anda ingin menggunakan GPU dan CPU secara bersamaan, Anda mungkin mendapatkan performa terbaik dengan mempertahankan satu inti CPU untuk menangani pertukaran GPU/CPU (gunakan opsi -t untuk mengatur jumlah thread CPU).
Diskusi tentang VanitySearch@bitcointalk
Anda dapat mengunduh rilis terbaru dari 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
Contoh (Windows, Intel Core i7-4770 3,4GHz 8 core multithread, 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
Dimungkinkan untuk menghasilkan alamat cantik untuk pihak ketiga dengan cara yang aman menggunakan kunci terpisah.
Misalnya, Alice menginginkan awalan yang bagus tetapi tidak memiliki daya CPU. Bob memiliki daya CPU yang diminta tetapi tidak dapat mengetahui kunci pribadi Alice, Alice harus menggunakan kunci terpisah.
Alice membuat pasangan kunci di komputernya kemudian mengirimkan kunci publik yang dihasilkan dan awalan yang diinginkan ke Bob. Bisa melalui email, tidak ada yang rahasia. Meskipun demikian, Alice harus menjaga kunci pribadinya dengan aman dan tidak mengeksposnya.
VanitySearch.exe -s "AliceSeed" -kp
Priv : L4U2Ca2wyo721n7j9nXM9oUWLzCj19nKtLeJuTXZP3AohW9wVgrH
Pub : 03FC71AE1E88F143E8B05326FC9A83F4DAB93EA88FFEACD37465ED843FCC75AA81
Catatan: Pasangan kunci adalah pasangan kunci SecpK1 standar dan dapat dihasilkan dengan perangkat lunak pihak ketiga.
Bob menjalankan VanitySearch menggunakan kunci publik Alice dan awalan yang diinginkan.
VanitySearch.exe -sp 03FC71AE1E88F143E8B05326FC9A83F4DAB93EA88FFEACD37465ED843FCC75AA81 -gpu -stop -o keyinfo.txt 1ALice
Ini menghasilkan file keyinfo.txt yang berisi kunci pribadi parsial.
PubAddress: 1ALicegohz9YgrLLa4ADCmam7X2Zr6xJZx
PartialPriv: L2hbovuDd8nG4nxjDq1yd5qDsSQiG8xFsAFbHMcThqfjSP6WLg89
Bob mengirimkan kembali file ini ke Alice. Itu juga bisa dilakukan melalui email. Kunci privat parsial tidak memungkinkan siapa pun menebak kunci privat Alice yang terakhir.
Alice kemudian dapat merekonstruksi kunci privat terakhir menggunakan kunci privatnya (yang dihasilkan pada langkah 1) dan keyinfo.txt dari Bob.
VanitySearch.exe -rp L4U2Ca2wyo721n7j9nXM9oUWLzCj19nKtLeJuTXZP3AohW9wVgrH keyinfo.txt
Pub Addr: 1ALicegohz9YgrLLa4ADCmam7X2Zr6xJZx
Priv (WIF): p2pkh:L1NHFgT826hYNpNN2qd85S7F7cyZTEJ4QQeEinsCFzknt3nj9gqg
Priv (HEX): 0x7BC226A19A1E9770D3B0584FF2CF89E5D43F0DC19076A7DE1943F284DA3FB2D0
Pada dasarnya -sp (kunci publik awal) menambahkan kunci publik awal yang ditentukan (sebut saja Q) ke kunci awal setiap thread. Itu berarti ketika Anda mencari (menggunakan -sp), Anda tidak mencari addr(kG) tetapi untuk addr(k part .G+Q) di mana k adalah kunci pribadi dalam kasus pertama dan k bagian dari "kunci pribadi parsial " dalam kasus kedua. G adalah titik pembangkit SecpK1.
Kemudian pemohon dapat merekonstruksi kunci privat akhir dengan melakukan k part +k secret (mod n) dimana k part adalah sebagian kunci privat yang ditemukan oleh pencari dan k secret adalah kunci privat dari Q (Q=k secret .G). Inilah tujuan dari opsi -rp.
Penelusur telah menemukan kecocokan untuk addr(k part .G+k secret .G) tanpa mengetahui k secret sehingga pemohon memiliki alamat yang diinginkan addr(k part .G+Q) dan kunci pribadi yang sesuai k part +k secret ( mod n). Penelusur tidak dapat menebak kunci privat terakhir ini karena dia tidak mengetahui rahasia k (dia hanya mengetahui Q).
Catatan: Penjelasan ini disederhanakan, tidak membahas optimasi simetri dan endomorfisme tetapi idenya sama.
Alamat bitcoin (P2PKH) terdiri dari hash160 (ditampilkan dalam format Base58) yang berarti ada 2.160 kemungkinan alamat. Fungsi hash yang aman dapat dilihat sebagai generator nomor semu, yang mengubah pesan tertentu menjadi nomor acak. Dalam hal ini, suatu bilangan (terdistribusi secara seragam) dalam rentang [0,2 160 ]. Jadi, peluang untuk mencapai angka tertentu setelah n kali mencoba adalah 1-(1-1/2 160 ) n . Kami melakukan uji coba n Bernoulli yang independen secara statistik.
Jika kita mempunyai daftar m alamat yang berbeda (m<=2 160 ), ruang pencarian kemudian dikurangi menjadi 2 160 /m, probabilitas untuk menemukan tabrakan setelah 1 kali percobaan menjadi m/2 160 dan probabilitas untuk menemukan tabrakan setelah n mencoba menjadi 1-(1-m/2 160 ) n .
Contoh:
Kami memiliki perangkat keras yang mampu menghasilkan 1GKey/s dan kami memiliki daftar input 10 6 alamat, tabel berikut menunjukkan kemungkinan menemukan tabrakan setelah jangka waktu tertentu:
Waktu | Kemungkinan |
---|---|
1 detik | 6.8e-34 |
1 menit | 4e-32 |
1 jam | 2.4e-30 |
1 hari | 5.9e-29 |
1 tahun | 2.1e-26 |
10 tahun | 2.1e-25 |
1000 tahun | 2.1e-23 |
Usia bumi | 8.64e-17 |
Usia alam semesta | 2.8e-16 (jauh lebih sedikit dibandingkan menang lotre) |
Perhitungan telah dilakukan menggunakan kalkulator presisi tinggi online ini
Seperti yang Anda lihat, bahkan dengan perangkat keras yang kompetitif, sangat kecil kemungkinannya Anda akan menemukan tabrakan. Paradoks ulang tahun tidak berlaku dalam konteks ini, ini hanya berfungsi jika kita sudah mengetahui kunci publik (bukan alamat, hash dari kunci publik) yang ingin kita temukan. Program ini tidak mencari benturan antar kunci publik. Ia hanya mencari tabrakan dengan alamat dengan awalan tertentu.
Instal CUDA SDK dan buka VanitySearch.sln di Visual C++ 2017.
Anda mungkin perlu menyetel ulang versi Windows SDK di properti proyek.
Di Build->Configuration Manager, pilih konfigurasi Rilis .
Bangun dan nikmati.
Catatan: Rilis saat ini telah dikompilasi dengan CUDA SDK 10.0, jika Anda memiliki rilis CUDA SDK yang berbeda, Anda mungkin perlu memperbarui jalur CUDA SDK di VanitySearch.vcxproj menggunakan editor teks. Opsi nvcc saat ini diatur ke arsitektur mulai dari kemampuan 3.0, untuk perangkat keras yang lebih lama, tambahkan kemampuan komputasi yang diinginkan ke daftar di properti GPUEngine.cu, CUDA C/C++, Perangkat, Pembuatan Kode.
Instal CUDA SDK.
Instal g++ yang lebih lama (hanya untuk CUDA SDK). Bergantung pada versi CUDA SDK dan distribusi Linux, Anda mungkin perlu menginstal g++ yang lebih lama.
Instal gcc terbaru. VanitySearch perlu dikompilasi dan ditautkan dengan gcc terbaru (>=7). Rilis saat ini telah dikompilasi dengan gcc 7.3.0.
Edit makefile dan atur CUDA SDK dan jalur kompiler yang sesuai untuk nvcc. Atau meneruskannya sebagai variabel untuk make
pemanggilan.
CUDA = /usr/local/cuda-8.0
CXXCUDA = /usr/bin/g++-4.8
Anda dapat memasukkan daftar arsitektur (lihat dokumentasi nvcc) jika Anda memiliki beberapa GPU dengan arsitektur berbeda.
Atur CCAP ke kemampuan komputasi yang diinginkan sesuai dengan perangkat keras Anda. Lihat bagian buruh pelabuhan untuk informasi lebih lanjut. Kemampuan komputasi 2.0 (Fermi) tidak digunakan lagi untuk CUDA SDK terbaru.
Buka direktori VanitySearch.
Untuk membuat versi khusus CPU (tanpa dukungan CUDA):
$ make all
Untuk membangun dengan CUDA:
$ make gpu=1 CCAP=2.0 all
Runnig VanitySearch (Intel(R) Xeon(R) CPU, 8 core, @ 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) Gambar Docker dibuat untuk versi khusus CPU dan untuk setiap versi kemampuan Komputasi CUDA ( CCAP
) yang didukung. Umumnya, pengguna harus memilih CCAP
terbaru yang didukung oleh perangkat keras dan drivernya. Tabel kompatibilitas dapat ditemukan di Wikipedia atau di halaman web resmi NVIDIA produk Anda.
Docker menggunakan build multi-tahap untuk meningkatkan ukuran gambar akhir. Skrip disediakan untuk memfasilitasi proses pembuatan.
Saat membuat sendiri, nama gambar lengkap (termasuk bagian pemilik/repo) dapat disesuaikan melalui variabel lingkungan IMAGE_NAME
. Defaultnya hanya vanitysearch
dengan bagian pemilik kami. Gambar yang dibuat sebelumnya tersedia di hub Docker dari @ratijas.
Bangun dan beri tag vanitysearch:cpu
image:
$ ./docker/cpu/build.sh
Bangun dengan dukungan GPU "default", yang mungkin tidak cocok untuk sistem Anda:
$ ./docker/cuda/build.sh
Bangun dengan dukungan GPU yang disesuaikan:
$ env CCAP=5.2 CUDA=10.2 ./docker/cuda/build.sh
Sedangkan untuk pengguna pembuat buruh pelabuhan, maaf, GPU yang dibuat oleh pekerja pelabuhan tidak (belum) didukung pada cabang 3.x. Tapi itu (mudah-mudahan) akan segera berubah.
Catatan: Gambar VanitySearch tidak (tidak seharusnya) memerlukan akses jaringan. Untuk lebih memastikan tidak ada data yang bocor dari container yang sedang berjalan, selalu teruskan --network none
ke perintah 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 dilisensikan di bawah GPLv3.