Generating a Vanity Address for Version 3 Onions

Tor Hidden Services are accessed through a web address ending in .onion. Generally speaking these appear to be random strings of letters and numbers, though they're actually a representation of the public key generated when the operator created their hidden service.

Whilst it's possible to generate a V2 vanity .onion address with eschallot, V3 Onions use ed25519 requiring use of a different tool.

This documentation details how to generate a vanity .onion address for Version 3 Onions

 

 

Install Dependencies

First we start by installing a couple of dependencies

 

Debian

apt-get install gcc libsodium-dev make autoconf

 

CentOS

yum install libsodium-devel
yum groupinstall "Development Tools"

 

Install mkp224o

mp224o is the workhorse that'll be doing the backbreaking work of generating key combinations, so we need to grab and install it

git clone https://github.com/cathugger/mkp224o.git
cd mkp224o/
# Configure and compile
./autogen.sh 
./configure 
make

Once that's completed, we should be ready to try and generate our first URL

./mkp224o filter ben -t 4 -v -n 4 -d /tmp/
set workdir: /tmp/
sorting filters... done.
filters:
	ben
	filter
in total, 2 filters
using 4 threads
benyfkc7gc2pptco6hx7t3sk57q7ahzz6fjtur36ar3pm5euvbwx5pqd.onion
ben3jyzyjq7tfzswwfftgylgrphsjf5wpperztzusnes5e4mc7cfftqd.onion
ben4xyknoitu7qk5gt7t55l25cl35bk3dgxj7y5jdb5v3l2c46aglvad.onion
ben24n2tfjdw23zfysv5frttdbpqkteco4edqrnoay4elywz7wverbyd.onion
waiting for threads to finish... done.

The options passed are

  • filter ben: Look for the string ben - our vanity string
  • -t 4: use 4 threads
  • -v: Be verbose
  • -n 4: Generate 4 suggestions
  • -d /tmp/: Write generated keymatter out to directories under /tmp

The output directory (in the example above /tmp) will have a directory created within it for each of the found suggestions. Copy this to your tor server and put into /var/lib/tor (or wherever you've configured Tor to run) and rename the directory to be that of your hidden service (as defined in torrc - in the tutorial I posted previously, this was /var/lib/tor/myonion/), then fix permissions

mv benyfkc7gc2pptco6hx7t3sk57q7ahzz6fjtur36ar3pm5euvbwx5pqd.onion /var/lib/tor/bens_new_hs
chown -R tor: /var/lib/tor/bens_new_hs
chmod -R u+rwX,og-rwx /var/lib/tor/bens_new_hs

If you've not already added the service to torrc then add it

vi /etc/tor/torrc
HiddenServiceDir /var/lib/tor/bens_new_hs
HiddenServiceVersion 3
HiddenServicePort 80 127.0.0.1:80

Then, either way, restart or reload tor

systemctl reload tor

Once TOR restarts, your new service should come up

Things to note

  • It gets progressively harder to bruteforce the keys, the more characters you specify (god only knows what resources Facebook's facebookcorewwwi.onion took to generate!)
  • If you've any config that relies on a specific hostname (such as an NGinx server block, remember to change it if you change the URL!)
  • It might take multiple attempts to find a vanity URL that you actually like