Bitcoin through the mixnet

Bitcoin through the mixnet


3 min read

Photo by CHUTTERSNAP on Unsplash

The implementation of this requires to be comfortable with the command line and the tutorial takes place on GNU/Linux. The current performances are not very good, we propose this tutorial for educational purposes and only as a Proof of Concept.

3 programs are needed for Bitcoin Core to use the mixnet to connect to other nodes. There is no magic here, the fullnode will just use a socks5 proxy connected to the Nym network, as it would for Tor or i2p.

Finally, Bitcoin Core will take care of synchronizing with the peers:

The nym-client will allow to connect to a gateway which will transmit the packets within the mixnet

The nym-network-requester is the element that will allow to send and receive requests to services outside the mixnet, in this case the other fullnodes on the Internet

The nym-socks5-client will provide a socks5 proxy where the fullnode will send its requests

However, with the configuration below, your IP address will not be “hidden”. To do it right you should use an external service that “mixes” you with other people in order to offer you the greatest anonymity to protect your address.

Connection to the Mixnet

First of all you have to download and initialize the nym-client

# Download the nym-client

# Init the nym-client
./nym-client init --id bitcoin

If all goes well you should have something like the image below

The value of the last line “The address of this client is…” must be stored, it will be reused later, in this case 45pyzdKwsADCTzWqDxrnaa5XYgncPWD445yPvphtJ22N. BQiWhAjGNdLzh3JR4sCqULSDo9fZ3SVLP6tYHWYj9tfv@5vC8spDvw5VDQ8Zvd9fVvBhbUDv9jABR4cXzd4Kh5vz. Then the nym-client can be started

./nym-client run --id bitcoin

This is what you should have

Keep this window open and now activate the nym-network-requester in another window

./nym-network-requester run --open-proxy

The open-proxy parameter is important because it will allow all requests to pass. The window must remain open

Again this is what you should see if everything went well

And finally the nym-socks5-client must be downloaded, initialized and started. In the option “Provider” the address retrieved later must be used, in this case 45pyzdKwsADCTzWqDxrnaa5XYgncPWD445yPvphtJ22N.BQiWh…@5vC8sp

# Download the nym-socks-5-client

# Init with nym-client value. Replace the value after the - provider by the nym-client address
./nym-socks5-client init --id btc --provider 45pyzdKwsADCTzWqDxrnaa5XYgncPWD445yPvphtJ22N.BQiWhAjGNdLzh3JR4sCqULSDo9fZ3SVLP6tYHWYj9tfv@5vC8spDvw5VDQ8Zvd9fVvBhbUDv9jABR4cXzd4Kh5vz

# Start the nym-socks5-client
./nym-socks5-client run --id btc

If all went well, this is what you should have. Of course some things will be different

Starting Bitcoin Core

Just run the command below

./bin/bitcoind -proxy= -onion=0

If the node has started successfully you should see the blocks downloading

Now information should be displayed on the 4 terminal windows


2 things should be noted here, in an ideal installation you would need to use an external provider to protect your IP address but this is sufficient for this demonstration.

Then to offer a real resilience and to really work in peer to peer, Bitcoin Core in this case should integrate directly Nym in its code, this would allow to connect directly to other clients while staying on the mixnet and to take advantage of SURB for example which allows to have an anonymous communication