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 باستخدام مفتاح Alice العام والبادئة المطلوبة.
VanitySearch.exe -sp 03FC71AE1E88F143E8B05326FC9A83F4DAB93EA88FFEACD37465ED843FCC75AA81 -gpu -stop -o keyinfo.txt 1ALice
يقوم بإنشاء ملف keyinfo.txt يحتوي على المفتاح الخاص الجزئي.
PubAddress: 1ALicegohz9YgrLLa4ADCmam7X2Zr6xJZx
PartialPriv: L2hbovuDd8nG4nxjDq1yd5qDsSQiG8xFsAFbHMcThqfjSP6WLg89
يرسل بوب هذا الملف إلى أليس. ويمكن أيضا أن يتم ذلك عن طريق البريد الإلكتروني. لا يسمح المفتاح الخاص الجزئي لأي شخص بتخمين المفتاح الخاص النهائي لأليس.
يمكن لـ Alice بعد ذلك إعادة بناء المفتاح الخاص النهائي باستخدام مفتاحها الخاص (المفتاح الذي تم إنشاؤه في الخطوة 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 + 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 ( وزارة الدفاع ن). لا يستطيع الباحث تخمين هذا المفتاح الخاص الأخير لأنه لا يعرف سر k (يعرف فقط Q).
ملاحظة: هذا الشرح مبسط، فهو لا يهتم بتحسينات التناظر والتشكل الداخلي ولكن الفكرة واحدة.
يتكون عنوان البيتكوين (P2PKH) من hash160 (معروض بتنسيق Base58) مما يعني أن هناك 2160 عنوانًا محتملاً. يمكن اعتبار دالة التجزئة الآمنة بمثابة مولد أرقام زائفة، فهي تقوم بتحويل رسالة معينة إلى رقم عشوائي. في هذه الحالة، رقم (موزع بشكل منتظم) في النطاق [0,2 160 ]. لذا، فإن احتمال الوصول إلى رقم معين بعد n من المحاولات هو 1-(1-1/2 160 ) n . نقوم بإجراء تجارب برنولي بشكل مستقل إحصائيًا.
إذا كانت لدينا قائمة بالعناوين المميزة m (m<=2 160 )، فسيتم تقليل مساحة البحث إلى 2 160 /m، ويصبح احتمال العثور على تصادم بعد محاولة واحدة m/2 160 واحتمال العثور على تصادم بعد n المحاولات تصبح 1-(1-m/ 2160 ) n .
مثال:
لدينا جهاز قادر على توليد 1GKey/s ولدينا قائمة إدخال مكونة من 10 6 عناوين، ويوضح الجدول التالي احتمال العثور على تصادم بعد فترة زمنية معينة:
وقت | احتمال |
---|---|
1 ثانية | 6.8ه-34 |
1 دقيقة | 4ه-32 |
1 ساعة | 2.4e-30 |
يوم واحد | 5.9ه-29 |
1 سنة | 2.1ه-26 |
10 سنوات | 2.1ه-25 |
1000 سنة | 2.1ه-23 |
عمر الأرض | 8.64e-17 |
عمر الكون | 2.8e-16 (أقل بكثير من الفوز في اليانصيب) |
تم إجراء الحساب باستخدام هذه الآلة الحاسبة عالية الدقة عبر الإنترنت
كما ترون، حتى مع وجود أجهزة تنافسية، فمن غير المرجح أن تجد تصادمًا. لا تنطبق مفارقة عيد الميلاد في هذا السياق، فهي تعمل فقط إذا كنا نعرف بالفعل المفتاح العام (وليس العنوان، أو تجزئة المفتاح العام) الذي نريد العثور عليه. لا يبحث هذا البرنامج عن التصادمات بين المفاتيح العامة. فهو يبحث فقط عن التصادمات مع العناوين ذات بادئة معينة.
قم بتثبيت CUDA SDK وافتح VanitySearch.sln في Visual C++ 2017.
قد تحتاج إلى إعادة تعيين إصدار Windows SDK الخاص بك في خصائص المشروع.
في Build->Configuration Manager، حدد تكوين الإصدار .
بناء والتمتع بها.
ملاحظة: تم تجميع الإصدار الحالي باستخدام 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++.
تثبيت دول مجلس التعاون الخليجي الأخيرة. يجب تجميع VanitySearch وربطه بنسخة حديثة من دول مجلس التعاون الخليجي (>=7). تم تجميع الإصدار الحالي مع gcc 7.3.0.
قم بتحرير ملف makefile وقم بإعداد CUDA SDK ومسارات المترجم المناسبة لـ nvcc. أو قم بتمريرها كمتغيرات make
الاستدعاء.
CUDA = /usr/local/cuda-8.0
CXXCUDA = /usr/bin/g++-4.8
يمكنك إدخال قائمة معمارية (ارجع إلى وثائق nvcc) إذا كان لديك العديد من وحدات معالجة الرسومات ذات بنية مختلفة.
قم بتعيين 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.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
(وحدة المعالجة المركزية/ملف Docker) تم تصميم صور Docker لإصدار وحدة المعالجة المركزية (CPU) فقط ولكل إصدار يدعم قدرة حوسبة CUDA ( CCAP
). بشكل عام، يجب على المستخدمين اختيار أحدث CCAP
المدعوم من قبل الأجهزة وبرامج التشغيل الخاصة بهم. يمكن العثور على جدول التوافق على Wikipedia أو على صفحة الويب الرسمية لـ NVIDIA الخاصة بمنتجك.
يستخدم Docker تصميمات متعددة المراحل لتحسين حجم الصورة النهائية. يتم توفير البرامج النصية لتسهيل عملية البناء.
عند إنشاء الصورة بنفسك، يمكن تخصيص اسم الصورة الكامل (بما في ذلك أجزاء المالك/الريبو) عبر متغير البيئة IMAGE_NAME
. يتم افتراضيًا البحث vanitysearch
فقط مع جزء المالك الخاص بنا. الصور المعدة مسبقًا متاحة على Docker hub من @ratijas.
بناء ووضع علامة على vanitysearch:cpu
:
$ ./docker/cpu/build.sh
الإنشاء باستخدام دعم GPU "الافتراضي"، والذي قد لا يكون مناسبًا لنظامك:
$ ./docker/cuda/build.sh
البناء باستخدام دعم GPU المخصص:
$ env CCAP=5.2 CUDA=10.2 ./docker/cuda/build.sh
أما بالنسبة للأشخاص الذين يقومون بتأليف عامل الإرساء، فعذرًا، وحدات معالجة الرسومات المكونة من عامل الإرساء غير مدعومة (حتى الآن) على فرع 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.