Camouflage

char nick[9] = "bitcoincamouflage";

printf("%s\x40pm\x2e\\\bme\n",nick);

puts("5E12 9ABC C2A9 564B C048 2DF9 D327 0D10 BC71 CF75");

CJDNS

Sep 24, 2021 • bitcoin-core,cjdns,gnunet,privacy

meme

Vasil Dimov created a pull request to add support for CJDNS in Bitcoin Core. Since I know less about CJDNS, I decided to do more research before reviewing the pull request in detail. Although I don’t think we need another network in Bitcoin Core considering ipv4,ipv6, Tor and i2p are good enouugh if we can use them without any issues.

What is CJDNS?

CJDNS is an encrypted IPv6 network using cryptography for address allocation and DHT for routing. What, Why and How is explained in the Cjdns whitepaper

Noticed something interesting in testimonials on github repository:

00:36 < tester> man sites take so long to load on i2p 00:36 < tester> i value speed over anonymity any day

If a project considers speed over anonymity I don’t think we need it in Bitcoin Core at this point. Although lets not jump to conclusions based on this.

I understood its a distributed network that uses ipv6. Personal opinion: I don’t like ipv6. Lets try CJDNS and see how things work.

Ubuntu:

  1. Installed dependencies:

    sudo apt-get install nodejs git build-essential python2.7
    
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    
  2. Run the commands to clone, compile and install as mentioned in doc/install/ubuntu-18.04.md. Unfortunately it didn’t work. I was getting error that Rust and Cargo are required even though are already installed. Tried running the commands in terminal from do.sh but terminal closed automatically after L10.

  3. Tried to look for help in IRC channel for CJDNS on Libera. But nothing could resolve the issues. So decided to give up and try run CJDNS on other OS.

Windows:

  1. Installed dependencies:

    Rust: https://win.rustup.rs/x86_64

    OpenVPN: https://swupdate.openvpn.org/community/releases/OpenVPN-2.5.3-I601-amd64.msi

  2. Run the commands to clone and compile (WSL) as mentioned in doc/install/windows.md

  3. Error:

    ./do: 2: export: Files/WindowsApps/CanonicalGroupLimited.UbuntuonWindows_2004.2021.222.0_x64__79rhkp1fndgsc:/mnt/c/Program: bad variable name
    

I think documentation about installing CJDNS needs to be updated. Not the best feeling wasting few hours and not able to run CJDNS. Anyway, time to look for alternatives and compare them with CJDNS. First thing that I found on r/darknetplan was GNUnet.

What is GNUnet?

GNUnet is an alternative network stack for building secure, decentralized and privacy-preserving distributed applications. I like the things mentioned in philosophy section of GNUnet handbook.

GNUnet presented at the Decentralized Internet and Privacy devroom at FOSDEM20 in 2020: https://git.gnunet.org/gnunet-videos-2020.git/plain/FOSDEM20/dip_gnunet.webm

This presentation was interesting and the most important thing that he mentioned in the video was after 06:00:

layers

You cannot build applications on top of a centralized network and expect them to be decentralized. Lets try to install GNUnet and see how it works.

First thing that I noticed on the GNUnet 0.15.0 download page:

In terms of usability, users should be aware that there are still a number of known open issues in particular with respect to ease of use, but also some critical privacy issues especially for mobile users. Also, the nascent network is tiny and thus unlikely to provide good anonymity or extensive amounts of interesting information. As a result, the 0.15.0 release is still only suitable for early adopters with some reasonable pain tolerance.

So I don’t think this can be used for Bitcoin Core. However, I like the project website, docs and presentation so will try to run it.

Steps that I followed to install GNUnet:

$ sudo apt-get install gnunet

One command and it is done! Now lets use it.

How to use GNUnet - in a nutshell:

$ gnunet-arm -s

$ gnunet-arm -I

$ gnunet-core

$ gnunet-peerinfo

terminal

There are lot of other things mentioned in the docs which I won’t go through in this post however this stuff really works and I am happy with it. You can check other things on GNUnet website

  • Filesharing
  • Chat
  • Name resolution using GNS
  • Serving a website using VPN

Lets move on to another project which tries to solve similar problems.

What is Yggdrasil?

Yggdrasil is end-to-end encrypted IPv6 mesh network. Yggdrasil does not require you to have IPv6 Internet connectivity - it also works over IPv4. There is a table on Yggdrasil website which explains the difference between Yggdrasil and traditional networks like the internet.

  Traditional Yggdrasil
End-to-end encryption for all traffic across the network No Yes
Decentralised routing information shared using a DHT No Yes
Cryptographically-bound IPv6 addresses No Yes
Node is aware of its relative location to other nodes No Yes
IPv6 address remains with the device even if moved No Yes
Topology extends gracefully across different mediums No Yes


Yggdrasil is still an alpha project, early in development but actively maintained. I don’t think we can use this for Bitcoin Core yet but will surely check the progress in few months.

Did you like the post? Subscribe to the feed