2020-08-28 18:59:29 +02:00
|
|
|
# mkp224o - vanity address generator for ed25519 onion services
|
2017-09-25 21:22:07 +02:00
|
|
|
|
2020-08-28 18:59:29 +02:00
|
|
|
This tool generates vanity ed25519 ([hidden service version 3][v3],
|
|
|
|
formely known as proposal 224) onion addresses.
|
2017-09-25 21:22:07 +02:00
|
|
|
|
2020-08-28 18:59:29 +02:00
|
|
|
## Requirements
|
2020-07-16 22:33:20 +02:00
|
|
|
|
2020-08-28 18:59:29 +02:00
|
|
|
* C99 compatible compiler (gcc and clang should work)
|
|
|
|
* libsodium (including headers)
|
|
|
|
* GNU make
|
|
|
|
* GNU autoconf (to generate configure script, needed only if not using release tarball)
|
|
|
|
* UNIX-like platform (currently tested in Linux and OpenBSD, but should
|
|
|
|
also build under cygwin and msys2).
|
2020-07-16 22:33:20 +02:00
|
|
|
|
2019-09-14 19:50:50 +02:00
|
|
|
For debian-like linux distros, this should be enough to prepare for building:
|
2017-09-25 21:22:07 +02:00
|
|
|
|
2020-08-28 18:59:29 +02:00
|
|
|
```bash
|
|
|
|
apt install gcc libsodium-dev make autoconf
|
|
|
|
```
|
2020-07-16 22:33:20 +02:00
|
|
|
|
2020-08-28 18:59:29 +02:00
|
|
|
## Building
|
2020-07-16 22:33:20 +02:00
|
|
|
|
2017-10-06 20:05:44 +02:00
|
|
|
`./autogen.sh` to generate configure script, if it's not there already.
|
2020-08-28 18:59:29 +02:00
|
|
|
|
|
|
|
`./configure` to generate makefile; in \*BSD platforms you probably want to use
|
2017-10-06 20:05:44 +02:00
|
|
|
`./configure CPPFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib"`.
|
2020-08-28 18:59:29 +02:00
|
|
|
|
|
|
|
You probably also want to pass something like `--enable-amd64-51-30k`
|
|
|
|
or `--enable-donna` to configure script for faster key generation;
|
2018-01-10 22:33:37 +01:00
|
|
|
run `./configure --help` to see all available options.
|
2017-09-25 21:22:07 +02:00
|
|
|
|
2020-08-28 18:59:29 +02:00
|
|
|
Finally, `make` to start building (`gmake` in \*BSD platforms).
|
2020-07-16 22:33:20 +02:00
|
|
|
|
2020-08-28 18:59:29 +02:00
|
|
|
## Usage
|
2020-07-16 22:33:20 +02:00
|
|
|
|
2018-11-04 17:38:33 +01:00
|
|
|
Generator needs one or more filters to work.
|
2020-08-28 18:59:29 +02:00
|
|
|
|
2017-09-25 21:22:07 +02:00
|
|
|
It makes directory with secret/public keys and hostname
|
|
|
|
for each discovered service. By default root is current
|
2020-08-28 18:59:29 +02:00
|
|
|
directory, but that can be overridden with `-d` switch.
|
|
|
|
|
|
|
|
Use `-s` switch to enable printing of statistics, which may be useful
|
2017-10-06 20:05:44 +02:00
|
|
|
when benchmarking different ed25519 implementations on your machine.
|
2017-09-25 21:22:07 +02:00
|
|
|
|
2020-08-28 18:59:29 +02:00
|
|
|
Use `-h` switch to obtain all available options.
|
2020-07-16 22:34:43 +02:00
|
|
|
|
2020-08-28 18:59:29 +02:00
|
|
|
I highly recommend reading [OPTIMISATION.txt][OPTIMISATION] for
|
|
|
|
performance-related tips.
|
2020-07-16 22:33:20 +02:00
|
|
|
|
2020-08-28 18:59:29 +02:00
|
|
|
## FAQ and other useful info
|
2020-07-16 22:33:20 +02:00
|
|
|
|
2020-08-28 18:59:29 +02:00
|
|
|
* How do I generate address?
|
|
|
|
Once compiled, run it like `./mkp224o neko`, and it will try creating
|
|
|
|
keys for onions starting with "neko" in this example; use `./mkp224o
|
|
|
|
-d nekokeys neko` to not litter current directory and put all
|
|
|
|
discovered keys in directory named "nekokeys".
|
2020-07-16 22:33:20 +02:00
|
|
|
|
2020-08-28 18:59:29 +02:00
|
|
|
* How do I make tor use generated keys?
|
|
|
|
Copy key folder (though technically only `hs_ed25519_secret_key` is required)
|
|
|
|
to where you want your service keys to reside:
|
2020-07-16 22:33:20 +02:00
|
|
|
|
2020-08-28 18:59:29 +02:00
|
|
|
```bash
|
|
|
|
sudo cp -r neko54as6d54....onion /var/lib/tor/nekosvc
|
|
|
|
```
|
2020-07-16 22:33:20 +02:00
|
|
|
|
2020-08-28 18:59:29 +02:00
|
|
|
You may need to adjust owner and permissions:
|
2020-07-16 22:33:20 +02:00
|
|
|
|
2020-08-28 18:59:29 +02:00
|
|
|
```bash
|
|
|
|
sudo chown -R tor: /var/lib/tor/nekosvc
|
|
|
|
sudo chmod -R u+rwX,og-rwx /var/lib/tor/nekosvc
|
|
|
|
```
|
2020-07-16 22:33:20 +02:00
|
|
|
|
2020-08-28 18:59:29 +02:00
|
|
|
Then edit `torrc` and add new service with that folder.
|
|
|
|
After reload/restart tor should pick it up.
|
2020-07-16 22:33:20 +02:00
|
|
|
|
2020-08-28 18:59:29 +02:00
|
|
|
* Generate addresses with 1-2 and 7-9 digits?
|
|
|
|
onion addresses use base32 encoding which does not include 1,2,7,8,9
|
|
|
|
numbers.
|
|
|
|
so no, that's not possible to generate these, and mkp224o tries to
|
|
|
|
detect invalid filters containing them early on.
|
|
|
|
|
|
|
|
* How long is it going to take?
|
|
|
|
Because of probablistic nature of brute force key generation, and
|
|
|
|
varience of hardware it's going to run on, it's hard to make promisses
|
|
|
|
about how long it's going to take, especially when the most of users
|
|
|
|
want just a few keys.
|
|
|
|
See [this issue][#27] for very valuable discussion about this.
|
|
|
|
If your machine is powerful enough, 6 character prefix shouldn't take
|
|
|
|
more than few tens of minutes, if using batch mode (read
|
|
|
|
[OPTIMISATION.txt][OPTIMISATION]) 7 characters can take hours
|
|
|
|
to days.
|
|
|
|
No promisses though, it depends on pure luck.
|
2017-09-30 22:34:09 +02:00
|
|
|
|
2020-08-28 18:59:29 +02:00
|
|
|
* Will this work with onionbalance?
|
|
|
|
It appears that onionbalance supports loading usual
|
|
|
|
`hs_ed25519_secret_key` key so it should work.
|
2020-07-16 22:33:20 +02:00
|
|
|
|
2020-08-28 18:59:29 +02:00
|
|
|
## Contact
|
2020-07-16 22:33:20 +02:00
|
|
|
|
2020-08-28 18:59:29 +02:00
|
|
|
For bug reports/questions/whatever else, email cathugger at cock dot li.
|
|
|
|
PGP key, if needed, can be found at <http://cathug2kyi4ilneggumrenayhuhsvrgn6qv2y47bgeet42iivkpynqad.onion/contact.html>.
|
2017-09-25 21:22:07 +02:00
|
|
|
|
2020-08-28 18:59:29 +02:00
|
|
|
## Acknowledgements & Legal
|
|
|
|
|
|
|
|
To the extent possible under law, the author(s) have dedicated all
|
|
|
|
copyright and related and neighboring rights to this software to the
|
|
|
|
public domain worldwide. This software is distributed without any
|
|
|
|
warranty.
|
|
|
|
You should have received a copy of the CC0 Public Domain Dedication
|
|
|
|
along with this software. If not, see [CC0][].
|
|
|
|
|
|
|
|
* `keccak.c` is based on [Keccak-more-compact.c][keccak.c]
|
|
|
|
* `ed25519/{ref10,amd64-51-30k,amd64-64-24k}` are adopted from
|
|
|
|
[SUPERCOP][]
|
|
|
|
* `ed25519/ed25519-donna` adopted from [ed25519-donna][]
|
|
|
|
* Idea used in `worker_fast()` is stolen from [horse25519][]
|
|
|
|
* base64 routines and initial YAML processing work contributed by
|
|
|
|
Alexander Khristoforov (heios@protonmail.com)
|
|
|
|
* Passphrase-based generation code and idea used in `worker_batch()`
|
|
|
|
contributed by [foobar2019][]
|
|
|
|
|
|
|
|
[v3]: https://gitweb.torproject.org/torspec.git/plain/rend-spec-v3.txt
|
|
|
|
[OPTIMISATION]: ./OPTIMISATION.txt
|
|
|
|
[#27]: https://github.com/cathugger/mkp224o/issues/27
|
|
|
|
[keccak.c]: https://github.com/XKCP/XKCP/blob/master/Standalone/CompactFIPS202/C/Keccak-more-compact.c
|
|
|
|
[CC0]: http://creativecommons.org/publicdomain/zero/1.0/
|
|
|
|
[SUPERCOP]: https://bench.cr.yp.to/supercop.html
|
|
|
|
[ed25519-donna]: https://github.com/floodyberry/ed25519-donna
|
|
|
|
[horse25519]: https://github.com/Yawning/horse25519
|
|
|
|
[foobar2019]: https://github.com/foobar2019
|