VanitySearch は、ビットコイン アドレス プレフィックス ファインダーです。安全な秘密キーを生成したい場合は、 -s オプションを使用して、BIP38 標準のベース キーの生成に使用されるパスフレーズを入力します ( VanitySearch.exe -s "My PassPhrase" 1MyPrefix )。 VanitySearch.exe -ps "My PassPhrase"を使用して、暗号化セキュア シードをパスフレーズに追加することもできます。
VanitySearch は GPU に適したグリッド サイズを計算しない可能性があるため、最高のパフォーマンスを得るために -g オプションを使用して別の値を試してください。 GPU と CPU を一緒に使用する場合は、GPU/CPU 交換の処理用に 1 つの CPU コアを保持することで最高のパフォーマンスが得られる可能性があります (CPU スレッドの数を設定するには -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.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 パワーがありません。ボブは要求された CPU 能力を持っていますが、アリスの秘密鍵を知ることができないため、アリスは分割鍵を使用する必要があります。
アリスは自分のコンピュータ上でキー ペアを生成し、生成した公開キーと必要なプレフィックスをボブに送信します。それは電子メールで行うことができ、秘密は何もありません。それにもかかわらず、アリスは秘密鍵を安全に保管し、公開しないようにする必要があります。
VanitySearch.exe -s "AliceSeed" -kp
Priv : L4U2Ca2wyo721n7j9nXM9oUWLzCj19nKtLeJuTXZP3AohW9wVgrH
Pub : 03FC71AE1E88F143E8B05326FC9A83F4DAB93EA88FFEACD37465ED843FCC75AA81
注: キー ペアは標準の SecpK1 キー ペアであり、サードパーティ ソフトウェアで生成できます。
ボブは、アリスの公開キーと必要なプレフィックスを使用して VanitySearch を実行します。
VanitySearch.exe -sp 03FC71AE1E88F143E8B05326FC9A83F4DAB93EA88FFEACD37465ED843FCC75AA81 -gpu -stop -o keyinfo.txt 1ALice
部分的な秘密キーを含む keyinfo.txt ファイルが生成されます。
PubAddress: 1ALicegohz9YgrLLa4ADCmam7X2Zr6xJZx
PartialPriv: L2hbovuDd8nG4nxjDq1yd5qDsSQiG8xFsAFbHMcThqfjSP6WLg89
ボブはこのファイルをアリスに送り返します。電子メールでも行うことができます。部分的な秘密キーを使用すると、誰も最終的なアリスの秘密キーを推測できなくなります。
次に、アリスは自分の秘密鍵 (ステップ 1 で生成されたもの) とボブからの 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の部分が「部分秘密キー」です。 」 2番目のケース。 G は SecpK1 生成ポイントです。
次に、要求者は k part +k Secret (mod n) を実行することで最終的な秘密鍵を再構成できます。ここで、k部分は検索者が見つけた部分秘密鍵、k秘密鍵は Q の秘密鍵です (Q=k Secret .G)。これが -rp オプションの目的です。
検索者は kシークレットを知らずに addr(kパート.G+kシークレット.G) の一致を見つけたので、リクエスタは必要なアドレス addr(kパート.G+Q) と対応する秘密鍵 kパート+kシークレット( mod n)。検索者は、k秘密を知らない (Q しか知らない) ため、この最終秘密鍵を推測することはできません。
注: この説明は簡略化されており、対称性と準同型性の最適化は考慮されていませんが、考え方は同じです。
ビットコイン アドレス (P2PKH) は、ハッシュ 160 (Base58 形式で表示) で構成されます。これは、可能なアドレスが 2 160 個あることを意味します。安全なハッシュ関数は、擬似数値生成器として見ることができ、指定されたメッセージを乱数に変換します。この場合、[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 を編集し、適切な CUDA SDK と nvcc のコンパイラ パスを設定します。または、それらを変数として渡して呼び出しmake
。
CUDA = /usr/local/cuda-8.0
CXXCUDA = /usr/bin/g++-4.8
異なるアーキテクチャを持つ複数の GPU がある場合は、アーキテクチャのリストを入力できます (nvcc のドキュメントを参照)。
ハードウェアに応じて、CCAP を必要なコンピューティング能力に設定します。詳細については、ドッカーのセクションを参照してください。コンピューティング機能 2.0 (Fermi) は、最近の CUDA SDK では非推奨になりました。
VanitySearch ディレクトリに移動します。
CPU のみのバージョン (CUDA サポートなし) をビルドするには:
$ make all
CUDA を使用してビルドするには:
$ make gpu=1 CCAP=2.0 all
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
選択する必要があります。互換性表は、Wikipedia または製品の公式 NVIDIA Web ページで見つけることができます。
Docker は、最終的なイメージ サイズを向上させるためにマルチステージ ビルドを使用します。ビルドプロセスを容易にするためにスクリプトが提供されています。
独自にビルドする場合は、 IMAGE_NAME
環境変数を使用して完全なイメージ名 (所有者/リポジトリ部分を含む) をカスタマイズできます。デフォルトでは、所有者部分を含むvanitysearch
のみになります。事前に構築されたイメージは、@ratijas の Docker ハブで入手できます。
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 の方に関しては、申し訳ありませんが、docker-compose 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 に基づいてライセンスされています。