Vanitygen: Difference between revisions
TheRealSteve (talk | contribs) |
TheRealSteve (talk | contribs) +table of difficulty subject to string and +table showing why using vanitygen to attack addresses is an exercise in futility. |
||
Line 61: | Line 61: | ||
In custom builds, CPU performance will be less than expected if the OpenSSL library is an older version (<1.0.0d) or is not built with the appropriate optimizations enabled. | In custom builds, CPU performance will be less than expected if the OpenSSL library is an older version (<1.0.0d) or is not built with the appropriate optimizations enabled. | ||
== Difficulty of finding a vanity == | |||
The difficult of finding a vanity address depends on its exact structure (leading letters and numbers) and how likely such an output is given the algorithms involved, which can consist of several pivots where the difficulty suddenly changes. | |||
{| class="wikitable" | |||
|- | |||
! vanity !! difficulty !! Comment | |||
|- | |||
| 1AAAAA || 259,627,881 || | |||
|- | |||
| 1QLbz6 || 259,627,881 || This vanity is alphabetically before a major pivot, the [[RIPEMD160]] hash value of 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF (address: 1QLbz7JHiBTspS962RLKV8GndWFwi5j6Qr) | |||
|- | |||
| 1QLbz7JHiBTspS962RLKV8GndWE || 2.9597E+45 || | |||
|- | |||
| 1QLbz7 || 837,596,142 || This vanity is partially after a pivot and difficulty increases | |||
|- | |||
| 1QLbz7JHiBTspS962RLKV8GndWG || 1.6489E+47 || After a major pivot and 59 times as difficult as the 'E' vanity. | |||
|- | |||
| 1QLbz8 || 837,596,142 || | |||
|- | |||
| 1aaaaa || 15,318,045,009 || Well after various pivots and subsequently more difficult. | |||
|- | |||
| 1zzzzz || 15,318,045,009 || | |||
|- | |||
| 111111 || 1,099,511,627,776 || A special case, leading numbers 1 (one) is especially difficult. | |||
|} | |||
== Use of vanitygen to try to attack addresses == | |||
Using vanitygen you might think that you would be able to find the private key for a given address. In practice, this is considered impossible. Given that the difficulty increases exponentially the longer your vanity is, so does the average time required to find that vanity. The example table below shows how an increasingly complex vanity affects the difficulty and average time required to find a match only for that vanity, let alone the full address, for a machine capable of looking through 1 million keys per second. | |||
{| class="wikitable" | |||
|- | |||
! vanity !! difficulty !! average time | |||
|- | |||
| 1B || 22 || < 1s | |||
|- | |||
| 1Bi || 1,330 || < 1s | |||
|- | |||
| 1Bit || 77,178 || < 1s | |||
|- | |||
| 1Bitc || 4,476,342 (4.48E+6)|| < 10s | |||
|- | |||
| 1Bitco || 259,627,881 (2.6E+8)|| 3 minutes | |||
|- | |||
| 1Bitcoi || 15,058,417,127 (1.506E+10) || 3 hours | |||
|- | |||
| 1Bitcoin || 8.7339E+11 || 1 week | |||
|- | |||
| 1BitcoinE || 5.0657E+13 || 1 year | |||
|- | |||
| 1BitcoinEa || 2.9381E+15 || 60 years | |||
|- | |||
| 1BitcoinEat || 1.7041E+17 || 3,500 years | |||
|- | |||
| 1BitcoinEate || 9.8837E+18 || 200,000 years | |||
|- | |||
| 1BitcoinEater || 5.7325E+20 || 11,700,000 years | |||
|- | |||
| 1BitcoinEaterAddressDontSend || 1.6209E+47 || 3.3E+33 or 3.3 decillion years. | |||
|} | |||
== See also == | == See also == |
Revision as of 15:34, 19 July 2015
Vanitygen is a command-line vanity bitcoin address generator.
If you're tired of the random, cryptic addresses generated by regular bitcoin clients, you can use vanitygen to create a more personalized address. Add unique flair when you tell people to send bitcoins to 1stDownqyMHHqnDPRSfiZ5GXJ8Gk9dbjO. Alternatively, vanitygen can be used to generate random addresses offline.
Vanitygen accepts as input a pattern, or list of patterns to search for, and produces a list of addresses and private keys. Vanitygen's search is probabilistic, and the amount of time required to find a given pattern depends on how complex the pattern is, the speed of your computer, and whether you get lucky.
The example below illustrates a session of vanitygen. It is typical, and takes about 10 sec to finish, using a Core 2 Duo E6600 CPU on x86-64 Linux:
$ ./vanitygen 1Boat
Difficulty: 4476342
Pattern: 1Boat
Address: 1BoatSLRHtKNngkdXEeobR76b53LETtpyT
Privkey: 5J4XJRyLVgzbXEgh8VNi4qovLzxRftzMd8a18KkdXv4EqAwX3tS
Vanitygen includes components to perform address searching on your CPU (vanitygen) and your OpenCL-compatible GPU (oclvanitygen). Both can be built from source, and both are included in the Windows binary package. Also included is oclvanityminer, the vanity address mining client. Oclvanityminer can be used to automatically claim bounties on sites such as ThePiachu's Vanity Pool.
Current version: 0.22
Windows x86+x64 binaries here. PGP signature here.
Get the source from GitHub. Includes Makefiles for Linux and Mac OS X.
Main discussion at BitCoinTalk
The latest source doesn't work properly for high-end AMD cards (7XXX and greater). Solution is to change line 459 in oclengine.c from: return quirks; to: return quirks & ~VG_OCL_AMD_BFI_INT; Windows x86+x64 binaries that solve this problem plus provide support for compressed keys here. PGP signature here. If you have any problems with the binaries, join the relevant BitCoinTalk discussion.
Expected keysearch rate
What key search rate can I expect from hardware X?
Keysearch Rates
CPU | GPU | keys/s | Comment |
---|---|---|---|
Core i5 750 @2.67 GHz | nVidia GTS 250 | 1.54 Mkey/s | 110% CPU [1] |
Core2 Duo 6600 | nVidia GTX 285 | 3.5 Mkey/s | 100% CPU / 90% GPU [2] |
Sempron 140 | AMD 5830 | 5.5 Mkey/s | 100% CPU / 60% GPU [3] |
AMD Radeon r7 240 | 4 Mkey/s | [4] | |
Core i7 | AMD 6500M | 4.5 Mkey/s | 98% GPU |
nVidia GeForce GTX 680M | 14-16 Mkey/s | [5] | |
nVidia GeForce GTX 970 | 38 Mkey/s | [6] | |
Core i7-4702MQ 2.2Ghz | 1.09 Mkey/s | ||
Core i7-4702MQ 2.2Ghz | GeForce GT750M | 5.38 Mkey/s |
As vanitygen performs a lot of large integer arithmetic, running it in 64-bit mode makes a huge difference in key search rate, easily a 50% improvement over 32-bit mode. If you are using a 64-bit edition of Windows, and not using a GPU, be sure to use vanitygen64.exe.
Radeon 58XX outperforms Radeon 69XX by a very comfortable margin. Oclvanitygen is sensitive to integer multiply throughput, and Radeon 58XX can multiply concurrently with other operations. At similar clocks, a hobbled Radeon 5830 will outperform a Radeon 6970.
In custom builds, CPU performance will be less than expected if the OpenSSL library is an older version (<1.0.0d) or is not built with the appropriate optimizations enabled.
Difficulty of finding a vanity
The difficult of finding a vanity address depends on its exact structure (leading letters and numbers) and how likely such an output is given the algorithms involved, which can consist of several pivots where the difficulty suddenly changes.
vanity | difficulty | Comment |
---|---|---|
1AAAAA | 259,627,881 | |
1QLbz6 | 259,627,881 | This vanity is alphabetically before a major pivot, the RIPEMD160 hash value of 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF (address: 1QLbz7JHiBTspS962RLKV8GndWFwi5j6Qr) |
1QLbz7JHiBTspS962RLKV8GndWE | 2.9597E+45 | |
1QLbz7 | 837,596,142 | This vanity is partially after a pivot and difficulty increases |
1QLbz7JHiBTspS962RLKV8GndWG | 1.6489E+47 | After a major pivot and 59 times as difficult as the 'E' vanity. |
1QLbz8 | 837,596,142 | |
1aaaaa | 15,318,045,009 | Well after various pivots and subsequently more difficult. |
1zzzzz | 15,318,045,009 | |
111111 | 1,099,511,627,776 | A special case, leading numbers 1 (one) is especially difficult. |
Use of vanitygen to try to attack addresses
Using vanitygen you might think that you would be able to find the private key for a given address. In practice, this is considered impossible. Given that the difficulty increases exponentially the longer your vanity is, so does the average time required to find that vanity. The example table below shows how an increasingly complex vanity affects the difficulty and average time required to find a match only for that vanity, let alone the full address, for a machine capable of looking through 1 million keys per second.
vanity | difficulty | average time |
---|---|---|
1B | 22 | < 1s |
1Bi | 1,330 | < 1s |
1Bit | 77,178 | < 1s |
1Bitc | 4,476,342 (4.48E+6) | < 10s |
1Bitco | 259,627,881 (2.6E+8) | 3 minutes |
1Bitcoi | 15,058,417,127 (1.506E+10) | 3 hours |
1Bitcoin | 8.7339E+11 | 1 week |
1BitcoinE | 5.0657E+13 | 1 year |
1BitcoinEa | 2.9381E+15 | 60 years |
1BitcoinEat | 1.7041E+17 | 3,500 years |
1BitcoinEate | 9.8837E+18 | 200,000 years |
1BitcoinEater | 5.7325E+20 | 11,700,000 years |
1BitcoinEaterAddressDontSend | 1.6209E+47 | 3.3E+33 or 3.3 decillion years. |