In the Hidden Service Protocol specification on torproject.org is written that all .onion addresses are generated from the public key of the hidden service (what we send to the DHT).

If this is true, why software like Shallot deal with the private key of the service, so when the brute-forcing is complete and the proper key is found for the searched prefix, we need to change our private key in order to have new custom .onion address?

1 Answer 1


The public key is also derived from the private key. The .onion address is a hash of the public key but ultimately both are derived from the private key.

  1. Generate a private key,
  2. Get the public key for this private key,
  3. Hash this public key using SHA1,
  4. Base32 encode the first 80 bits of this hash. Append .onion to it.

The HS needs to have the private key, and everybody needs to know the public key, so that the HS can prove that it 'owns' the address.

  • According to the specification, the entirety of the onion service's master identity key is Base32 encoded to get the onion address. SHA1 was used in prior versions. Dec 6, 2023 at 23:33

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .