Interested in a particular three-word name? Here’s how to do it:
Names are generated using a random number generator that takes your public key, passes it as a seed to a random number generator and uses the numbers from that RNG as index in a word list.
The RNG is a standard Mersenne-Twister called chance.js - it gets seeded from the clojure code here using your public key. Mersenne-Twister is interesting for this discussion because it’s extremely fast, meaning it’s easy to map back names to public key.
Then, three numbers are picked to index words from two lists, adjectives and animals.
All in all, we have approximately 1700 animals and 1400 adjectives, giving us roughly 3e9 combinations - let’s see how many bits of uniqueness:
>>> math.log2(1400*1400*1700)
31.63374125468972
Let’s say you go at it for a day - let’s see how many tries per second you need:
>>> 1400*1400*1700 / (24*60*60)
38564.81481481482
I just got brand new laptop with 6 cores - that brings it down to 6500 tests / second. Each test involves creating a private key, probably starting with a proper random number and a nonce (like mining!), calculating the public key from that and checking against the RNG.
Totally reasonable to do as a cryptolife hack Wanna practice Nim for example and get a feel for its performance? I’ll be happy to help out, and we have all the crypto code as a Nim wrapper to get you started!
If you verify the math and find issues, lmk as well, mine is a bit rusty…