Despite general guidelines advising against address reuse, in some cases it is still the most practical solution, such as tipping or donation addresses. Some users of Bitcoin simply disregard or aren't aware of the problems with address reuse. For this audience, many desire an address that reflects their individuality, instead of a purely random assortment of letters and numbers.
Because private keys must be generated through a highly entropic process, there is no secure way to generate an entirely customized address. However through generating many thousands or millions of addresses, a search for a somewhat customized address is easily possible.
Bitcoin Core stores private keys, so it's impractical to cycle through thousands and millions of addresses to discard search misses for a desired vanity pattern. To search for addresses, a custom tool to generate large numbers of private keys was created, called vanity generator.
This tool runs through a command line interface, allows various forms of creative pattern searching such as the most common starting pattern but also middle and end patterns, and supports GPU acceleration for much faster searching. The vanity generator may be used even as a simple offline private key generator, its focus simply on creating secure keys and addresses.
Patterns generated by the tool are limited by the laws of large numbers that protect the security of all private keys. Although faster and more CPUs and GPUs may dramatically increase the rate to find patterns, generally speaking a pattern of up to seven characters should be achievable.
Split Key Generation
To push the boundary of pattern matching, it is possible to enlist the services of a vanity key generation service. With care, it is possible to keep a component private key secret from the generation service, handing over only a public key to the vanity generation service and leaving them to cycle another private key. This process called split key generation, it works in a way similar to multi-signature funds.
Addresses are actually formed as a derivation of public keys, which are safe to share, so once the vanity address service finds a matching private key, it hands off its private key to allow the service consumer to securely use their vanity address.
- Repository: https://github.com/samr7/vanitygen