Pages:
Author

Topic: Vanitygen: Vanity bitcoin address generator/miner [v0.22] - page 21. (Read 1153511 times)

newbie
Activity: 32
Merit: 0
Why are certain patters so much harder to find then other patterns?

I was looking for somebodies name with the -i option so non case sensitive.

It found last name first name in under a minute (guess I got really lucky) with a difficulty of 778316249440 which with 15Mkey/s would take 10 hours for a 50% chance.

Now I searched for the exact name but with first name last name and that gave a difficulty of 23349487483220 which would take 13 days for a 50% chance.

Why is this?

Is there also a reason why people are only looking for patterns in the beginning of the adress?

I probably don't understand all the ins and outs yet but basically the program starts with some randomness to create usefull privatekeys and then just generates millions of keys just looking for some key to fly by that resolved to a public address that has the pattern we are looking for.

If that is true then why can't I search with oclvanitygen for patterns anywhere in the address, not just in the beginning.

Or am I missing something here?



 Use vanitygen with the -r (regex) option and you can search for patterns anywhere in the address.  Be aware that this is much slower than using oclvanitygen though.  Also, the program doesn't check for the validity of your search so you could be searching for something that doesn't exist as a Bitcoin address if you aren't careful.

for example,
vanitygen -r 0f
(that's a zero by the way) will cause the program to search forever because zero is not a valid base58 character.

I am in a process of implementing arbitrary matching using GPU, it is not exactly a regexp (which I think is not good for this kind of problem), but I can define the pattern in the following way currently:

[position][exact|range|lower|upper|number|letter|lower&number|upper&number][value1][value2]...

Where position is from 0...n from the start of the address and -1, -2...-n from the end of the address.

I can also code arbitrary function for special cases.

The speed is probably the half of standard oclvanitygen (130Mh/s vs 60Mh/s), meaning much faster than on CPU.

Donate is appreciated.

Donate:
BTC: 1F9sh84hdbmDd4M2xGL3cEhtgk2Aqhg5yf
LTC: LRnPtUYnkT9AdyvZyUEwCGC1uMnZeY3yyA
DOGE: DNWUygm2dqvzV2VjgHQ8igkLggD2WNQHEY
newbie
Activity: 32
Merit: 0
I am experimenting with next generation vanity addresses (these are for DOGE):

Code:
DEH1PMK4H7F2V5TZ8ZP9AUMU96PS9HDpay
DNGF62J9CD2GNGTLATMVKTDSNLR9CXQcfg
DK76D5YAQXZJU4CT9KD1TVS7LF4HQF8rot
...

Basically I can generate address with constraints on the on other places than just prefix on GPU. I tried for example using only numbers and upper case letter in the front and then generate lowercase string like pay, cfg, rot above.

Anyone interested in address like that?

I can generate any symbol anywhere in the string fast, about 60,000,000 key pairs per second.

I can also implement various feature to vanitygen for a price if you need. I have been buried in the the sources for the last two months.

Donate:
BTC: 1F9sh84hdbmDd4M2xGL3cEhtgk2Aqhg5yf
LTC: LRnPtUYnkT9AdyvZyUEwCGC1uMnZeY3yyA
DOGE: DNWUygm2dqvzV2VjgHQ8igkLggD2WNQHEY
newbie
Activity: 32
Merit: 0
It is. I am running that bash script for a couple of days and.

Thanks a lot for this.At first I was unable to compile the source, but I found out which package to install for PCRE support

It's testing away now with 10,000 keypairs a second. Wow, this really could get me hooked on trying out OpenCL coding, if only I had the time...

10,000 per second?

On my Vega FE, I am generating 130,000,000 per second.
member
Activity: 266
Merit: 10
It is. I am running that bash script for a couple of days and.

Thanks a lot for this.At first I was unable to compile the source, but I found out which package to install for PCRE support

It's testing away now with 10,000 keypairs a second. Wow, this really could get me hooked on trying out OpenCL coding, if only I had the time...
member
Activity: 178
Merit: 10
Smart thinking!  A day or two ago, I whipped up a quickie Segwit address generator with a simple regex search.  It can produce both P2WPKH-nested-in-P2SH and Bech32 addresses.  It’s quite trivial; it lacks vanitygen’s features, and probably also falls short in performance.
Quote
How great is the interest in this?

me too!
legendary
Activity: 1382
Merit: 1122
Smart thinking!  A day or two ago, I whipped up a quickie Segwit address generator with a simple regex search.  It can produce both P2WPKH-nested-in-P2SH and Bech32 addresses.  It’s quite trivial; it lacks vanitygen’s features, and probably also falls short in performance.
Quote
How great is the interest in this?

interesting... I'm pretty sure there is big interest in them. did you fork samr's vanitygen or start from scratch?
though since bech32 addresses are not yet implemented by most wallet,
the interest in bech32 addresses would be somewhat lower than that for segwit 3xxx addresses
any stats on how many addresses/second your generator can do?

I am thrilled to see the interest in Bravo Charlie Addresses!  Spread the word, “Bravo Charlie One means money.”

I wrote it from “scratch”—well, not really.  At first, I simply glued together sipa’s reference bech32 code, Core’s secp256k1, luke-jr’s libbase58, and standard POSIX extended regular expressions.  Then due to build dependency problems on my airgap machine, I had to semi-rewrite it with OpenSSL secp256k1 and my own base58check encoder using OpenSSL bignums.  This was supposed to be what you might call an “little pastime project”, done on a whim.

To be absolutely clear, I do handle both Bech32 and P2SH-nested Segwit “3” addresses.  Right now, pattern-matching is done on either one or the other; that’s stupid.  I intend to change it to check the same trial key against different patterns for both, if the operator so desires.

The code is slow, partly because I do a real bruteforce search:  Read a new private key off /dev/urandom, try its corresponding public key, and throw it away if that doesn’t match.  I always somewhat distrusted vanity addresses; and this is the paranoid way to make them.  Partly also because I made no attempt to make it fast.  I will try to get you some useful benchmark numbers after I do some immediately planned improvements.  Moreover, although I paid careful attention to basic tests, I’ll want to test more and play with testnet coins before foisting my code on other people where a bug could lose Other People’s Money.

The precursor idea popped into my head when I observed that ChipMixer is still not using Segwit; thus, I had in the back of my mind to see how hard it would be to make bulk Segwit addresses on demand.  It’s trivial; and my code will churn out as many thousands of nested-P2SH or Bech32 addresses and matching private keys as you could want, lightning-fast.  (Of course, ordinary users should use an HD wallet!)  I was pushed to action when I hit a thread where somebody was criticizing the aesthetics of Bech32.  What better way to persuade that Bech32 is pretty, than to show off a sweet vanity address?  So, I whipped up my bulk address generator and tacked on a regex pattern loop function.

Note for Microsoft Windows users:  My vanity generator uses POSIX regular expressions and other standard Unix APIs; and I want to keep dependencies to a minimum, for my own usage.  Thus, I doubt there would ever be a version which could be compiled with MSVC.  But I think that mingw has regex support; so perhaps there may be hope.  I would not be able to test the resulting binaries myself; for I have no Windows in my home or office.  I may try to get this working, if I see signs of sufficient interest (viz., potential for tips).  I myself will build and test on FreeBSD and Linux, in that order.


May I ask why you wrote it from scratch? Why not just modify the code from vanitygen to change how it converts ECDSA keypair to address?

Sundry reasons:

  • I was scratching an itch.
  • I needed a bulk address generator anyway.
  • I wanted something small and light, with as few dependencies as practicable.
  • vanitygen is AGPL.  As an advocate of liberal licensing and best of all, the public domain, I will avoid contributing my time and effort to a project whose code I can’t borrow without virally infecting my own codebase; GPL is a one-way street, and worst of all is AGPL.
  • vanitygen appears to be abandonware, with accumulating pull requests and an otherwise-maintained fork which people don’t seem to be switching to.
  • I do not have the requisite cryptanalytic expertise for evaluating the safety of the EC trick which vanitygen uses for speedup.  This is not to criticize vanitygen specifically:  I have significant general misgivings about vanity addresses; and anything other than fully random key selection makes me uncomfortable.
  • I have no idea what it would take to make vanitygen use compressed public keys as mandatory for Segwit (one pull request is open since 2013, with a severe bug as noted in the comments), then add the other needed code for Segwit address generation.  (Aside:  Even if you were to desire to still use old-style addresses without the Segwit fee discount, use of uncompressed public keys is really throwing away your money on fees.)  Whereas I already know exactly how to create such an implementation myself—on a whim—which this was.
  • I have never used vanitygen.  I first looked at its codebase a few minutes ago, to inform myself for an intelligent reply to you.  I didn’t actively choose not to patch a program I’ve never used; I independently wanted something, so I wrote it, and that’s that.

I'm extremely interested but I'm sure this will be way over my head. I'm not a coder by any means but I've used Vanitygen to generate addresses in the past so I can get by if I know the basic commands to use. I'll be checking this out and using it if I'm able to!
full member
Activity: 1204
Merit: 220
(ノಠ益ಠ)ノ
legendary
Activity: 3808
Merit: 7912
Why are certain patters so much harder to find then other patterns?

I was looking for somebodies name with the -i option so non case sensitive.

It found last name first name in under a minute (guess I got really lucky) with a difficulty of 778316249440 which with 15Mkey/s would take 10 hours for a 50% chance.

Now I searched for the exact name but with first name last name and that gave a difficulty of 23349487483220 which would take 13 days for a 50% chance.

Why is this?

Is there also a reason why people are only looking for patterns in the beginning of the adress?

I probably don't understand all the ins and outs yet but basically the program starts with some randomness to create usefull privatekeys and then just generates millions of keys just looking for some key to fly by that resolved to a public address that has the pattern we are looking for.

If that is true then why can't I search with oclvanitygen for patterns anywhere in the address, not just in the beginning.

Or am I missing something here?



 Use vanitygen with the -r (regex) option and you can search for patterns anywhere in the address.  Be aware that this is much slower than using oclvanitygen though.  Also, the program doesn't check for the validity of your search so you could be searching for something that doesn't exist as a Bitcoin address if you aren't careful.

for example,
vanitygen -r 0f
(that's a zero by the way) will cause the program to search forever because zero is not a valid base58 character.



newbie
Activity: 14
Merit: 0
Currently, it is difficult to import the private key into bitcoin.  Sipa's showwallet branch has a new command called "importprivkey" that accepts the base-58 encoded private key.  Vanitygen has been tested to work with that version of bitcoin, although it had to be restarted to get the imported vanity address to show up on the list in the GUI.

I've just pushed a bugfix, and can't reproduce the problem now. Could you try again?

PS: yes, it's quite normal your code is a lot faster - the vanity patch just tried generating random keys until a match was found, requiring generating 256 random bits + an EC multiplication per attempt. Your code only needs an EC addition per attempt.
newbie
Activity: 14
Merit: 0
Why are certain patters so much harder to find then other patterns?

I was looking for somebodies name with the -i option so non case sensitive.

It found last name first name in under a minute (guess I got really lucky) with a difficulty of 778316249440 which with 15Mkey/s would take 10 hours for a 50% chance.

Now I searched for the exact name but with first name last name and that gave a difficulty of 23349487483220 which would take 13 days for a 50% chance.

Why is this?

Is there also a reason why people are only looking for patterns in the beginning of the adress?

I probably don't understand all the ins and outs yet but basically the program starts with some randomness to create usefull privatekeys and then just generates millions of keys just looking for some key to fly by that resolved to a public address that has the pattern we are looking for.

If that is true then why can't I search with oclvanitygen for patterns anywhere in the address, not just in the beginning.

Or am I missing something here?

legendary
Activity: 1932
Merit: 2077

The code is slow, partly because I do a real bruteforce search:  Read a new private key off /dev/urandom, try its corresponding public key, and throw it away if that doesn’t match.  I always somewhat distrusted vanity addresses; and this is the paranoid way to make them.  Partly also because I made no attempt to make it fast.  I will try to get you some useful benchmark numbers after I do some immediately planned improvements.  Moreover, although I paid careful attention to basic tests, I’ll want to test more and play with testnet coins before foisting my code on other people where a bug could lose Other People’s Money.

....

  • I do not have the requisite cryptanalytic expertise for evaluating the safety of the EC trick which vanitygen uses for speedup.  This is not to criticize vanitygen specifically:  I have significant general misgivings about vanity addresses; and anything other than fully random key selection makes me uncomfortable.

....


To speed up the generation of the public keys from the private keys you need to use consecutive private keys. Moreover you should generate batches of public keys instead of generating only one key each time from /dev/urandom.

I developed a ecc library for the LBC collider project. Just to give you a benchmark, my program generates 16.77 consecutive MKeys in 1 second, but to generate 16.77 no consecutive Mkeys it takes 39 seconds (on a Xeon mobile Kabylake cpu, 1 core). If I don't use the batches neither (i.e. if I compute a field inverse for each key) it takes 98 seconds. Then: 1  -> 39 -> 98 seconds.

If an address generator is well optimized, the ecc part should take only the 7-8% of the time, sha256 + ripemd160 the 92% (on a cpu, on a gpu the things are different). On my cpu I can get 3 Maddresses/s with 1 core (using only compressed keys because compressed addresses are faster to generate).
copper member
Activity: 630
Merit: 2614
If you don’t do PGP, you don’t do crypto!
Smart thinking!  A day or two ago, I whipped up a quickie Segwit address generator with a simple regex search.  It can produce both P2WPKH-nested-in-P2SH and Bech32 addresses.  It’s quite trivial; it lacks vanitygen’s features, and probably also falls short in performance.
Quote
How great is the interest in this?

interesting... I'm pretty sure there is big interest in them. did you fork samr's vanitygen or start from scratch?
though since bech32 addresses are not yet implemented by most wallet,
the interest in bech32 addresses would be somewhat lower than that for segwit 3xxx addresses
any stats on how many addresses/second your generator can do?

I am thrilled to see the interest in Bravo Charlie Addresses!  Spread the word, “Bravo Charlie One means money.”

I wrote it from “scratch”—well, not really.  At first, I simply glued together sipa’s reference bech32 code, Core’s secp256k1, luke-jr’s libbase58, and standard POSIX extended regular expressions.  Then due to build dependency problems on my airgap machine, I had to semi-rewrite it with OpenSSL secp256k1 and my own base58check encoder using OpenSSL bignums.  This was supposed to be what you might call an “little pastime project”, done on a whim.

To be absolutely clear, I do handle both Bech32 and P2SH-nested Segwit “3” addresses.  Right now, pattern-matching is done on either one or the other; that’s stupid.  I intend to change it to check the same trial key against different patterns for both, if the operator so desires.

The code is slow, partly because I do a real bruteforce search:  Read a new private key off /dev/urandom, try its corresponding public key, and throw it away if that doesn’t match.  I always somewhat distrusted vanity addresses; and this is the paranoid way to make them.  Partly also because I made no attempt to make it fast.  I will try to get you some useful benchmark numbers after I do some immediately planned improvements.  Moreover, although I paid careful attention to basic tests, I’ll want to test more and play with testnet coins before foisting my code on other people where a bug could lose Other People’s Money.

The precursor idea popped into my head when I observed that ChipMixer is still not using Segwit; thus, I had in the back of my mind to see how hard it would be to make bulk Segwit addresses on demand.  It’s trivial; and my code will churn out as many thousands of nested-P2SH or Bech32 addresses and matching private keys as you could want, lightning-fast.  (Of course, ordinary users should use an HD wallet!)  I was pushed to action when I hit a thread where somebody was criticizing the aesthetics of Bech32.  What better way to persuade that Bech32 is pretty, than to show off a sweet vanity address?  So, I whipped up my bulk address generator and tacked on a regex pattern loop function.

Note for Microsoft Windows users:  My vanity generator uses POSIX regular expressions and other standard Unix APIs; and I want to keep dependencies to a minimum, for my own usage.  Thus, I doubt there would ever be a version which could be compiled with MSVC.  But I think that mingw has regex support; so perhaps there may be hope.  I would not be able to test the resulting binaries myself; for I have no Windows in my home or office.  I may try to get this working, if I see signs of sufficient interest (viz., potential for tips).  I myself will build and test on FreeBSD and Linux, in that order.


May I ask why you wrote it from scratch? Why not just modify the code from vanitygen to change how it converts ECDSA keypair to address?

Sundry reasons:

  • I was scratching an itch.
  • I needed a bulk address generator anyway.
  • I wanted something small and light, with as few dependencies as practicable.
  • vanitygen is AGPL.  As an advocate of liberal licensing and best of all, the public domain, I will avoid contributing my time and effort to a project whose code I can’t borrow without virally infecting my own codebase; GPL is a one-way street, and worst of all is AGPL.
  • vanitygen appears to be abandonware, with accumulating pull requests and an otherwise-maintained fork which people don’t seem to be switching to.
  • I do not have the requisite cryptanalytic expertise for evaluating the safety of the EC trick which vanitygen uses for speedup.  This is not to criticize vanitygen specifically:  I have significant general misgivings about vanity addresses; and anything other than fully random key selection makes me uncomfortable.
  • I have no idea what it would take to make vanitygen use compressed public keys as mandatory for Segwit (one pull request is open since 2013, with a severe bug as noted in the comments), then add the other needed code for Segwit address generation.  (Aside:  Even if you were to desire to still use old-style addresses without the Segwit fee discount, use of uncompressed public keys is really throwing away your money on fees.)  Whereas I already know exactly how to create such an implementation myself—on a whim—which this was.
  • I have never used vanitygen.  I first looked at its codebase a few minutes ago, to inform myself for an intelligent reply to you.  I didn’t actively choose not to patch a program I’ve never used; I independently wanted something, so I wrote it, and that’s that.
full member
Activity: 166
Merit: 100
In reply to these, and likely others earlier in the thread:

Is there anyone working on vanitygen fork to generate vanity bech32 addresses? Seems like it might be easier to get longer firstbits that make sense because it's more limited in characters.

Dear samr7, we really need SegWit feature

Smart thinking!  A day or two ago, I whipped up a quickie Segwit address generator with a simple regex search.  It can produce both P2WPKH-nested-in-P2SH and Bech32 addresses.  It’s quite trivial; it lacks vanitygen’s features, and probably also falls short in performance.

Some sample outputs from short patterns:

3NULL3ZCUXr7RDLxXeLPDMZDZYxuaYkCnG  (^3NULL[0-9])

bc1qcash96s5jqppzsp8hy8swkggf7f6agex98an7h (hahah; ^bc1qcash[0-9])

From earlier tests, WIF private key import was confirmed by me to work perfectly in Electrum:


Segwit addresses are sexy!
(Typo correction:  Of course, that should be “imported from WIF”.
I pray that the god of prepositions not smite me.)

The code is in C, Unix-only.  It’s fairly trivial; it essentially glues together Core’s secp256k1 library, luke-jr’s libbase58, and sipa’s reference Bech32 code.  It has almost no features; it won’t even try to tell you if the pattern you seek is impossible.  I’d intended to toss it out there somewhere for others to play with; but it devolved into a patchwork of #ifdefs with multiple different code paths, due to an build-time problem with dependencies.  It would require time and effort to clean up.

How great is the interest in this?

May I ask why you wrote it from scratch? Why not just modify the code from vanitygen to change how it converts ECDSA keypair to address?
hero member
Activity: 1232
Merit: 738
Mixing reinvented for your privacy | chipmixer.com
Smart thinking!  A day or two ago, I whipped up a quickie Segwit address generator with a simple regex search.  It can produce both P2WPKH-nested-in-P2SH and Bech32 addresses.  It’s quite trivial; it lacks vanitygen’s features, and probably also falls short in performance.
Quote
How great is the interest in this?

interesting... I'm pretty sure there is big interest in them. did you fork samr's vanitygen or start from scratch?
though since bech32 addresses are not yet implemented by most wallet,
the interest in bech32 addresses would be somewhat lower than that for segwit 3xxx addresses
any stats on how many addresses/second your generator can do?
newbie
Activity: 32
Merit: 0
Anyone here actually managed to get this to compile under Windows?

Seems every dependancy is outdatted and tons of warnings/errors.

I crosscompile it for Windows on Linux (Ubuntu 17.10).
copper member
Activity: 630
Merit: 2614
If you don’t do PGP, you don’t do crypto!
In reply to these, and likely others earlier in the thread:

Is there anyone working on vanitygen fork to generate vanity bech32 addresses? Seems like it might be easier to get longer firstbits that make sense because it's more limited in characters.

Dear samr7, we really need SegWit feature

Smart thinking!  A day or two ago, I whipped up a quickie Segwit address generator with a simple regex search.  It can produce both P2WPKH-nested-in-P2SH and Bech32 addresses.  It’s quite trivial; it lacks vanitygen’s features, and probably also falls short in performance.  [Edit 2018-02-12:  segvan: Segwit vanity address & bulk address generator (Github).]

Some sample outputs from short patterns:

3NULL3ZCUXr7RDLxXeLPDMZDZYxuaYkCnG  (^3NULL[0-9])

bc1qcash96s5jqppzsp8hy8swkggf7f6agex98an7h (hahah; ^bc1qcash[0-9])

From earlier tests, WIF private key import was confirmed by me to work perfectly in Electrum:


Segwit addresses are sexy!
(Typo correction:  Of course, that should be “imported from WIF”.
I pray that the god of prepositions not smite me.)

The code is in C, Unix-only.  It’s fairly trivial; it essentially glues together Core’s secp256k1 library, luke-jr’s libbase58, and sipa’s reference Bech32 code.  It has almost no features; it won’t even try to tell you if the pattern you seek is impossible.  I’d intended to toss it out there somewhere for others to play with; but it devolved into a patchwork of #ifdefs with multiple different code paths, due to an build-time problem with dependencies.  It would require time and effort to clean up.

How great is the interest in this?
full member
Activity: 166
Merit: 100
Hello Guys...

This is a very interesting software. Would it be possible to add a feature that instead of looking to match the public key, can it match the RIPEMD-160 instead.

This will save a lot of computations and it will be far more efficient. Once it matches the RIPEMD-160, it will be very easy to calculate the public key from there. Of course the requirement that the user has to supply with the desired RIPEMD-160 key.

We can use this site to determine the RIPMED-160. http://gobittest.appspot.com/Address

With this approach, we will save a lot of computations for the double SHA-256  + BASE58 conversion for each trial.

Thanks,
Z

But, with just the RIPEMD hash, how do you know anything about the final address without generating it? What is the point of having a cool RIPEMD-160 hash? The whole point of vanitygen is to have cool addresses, not intermediate values.
newbie
Activity: 23
Merit: 0
Hello Guys...

This is a very interesting software. Would it be possible to add a feature that instead of looking to match the public key, can it match the RIPEMD-160 instead.

This will save a lot of computations and it will be far more efficient. Once it matches the RIPEMD-160, it will be very easy to calculate the public key from there. Of course the requirement that the user has to supply with the desired RIPEMD-160 key.

We can use this site to determine the RIPMED-160. http://gobittest.appspot.com/Address

With this approach, we will save a lot of computations for the double SHA-256  + BASE58 conversion for each trial.

Thanks,
Z
jr. member
Activity: 45
Merit: 1
Dear samr7, we really need SegWit feature
newbie
Activity: 25
Merit: 0
Cant seem to get it up and running.
stuck at regex
Pages:
Jump to: