
When most people think of the “Dark Web” or “Dark Net” the first thing that
                comes to mind is probably Tor. Tor is basically a household name now; love it or hate it, most people
                have heard of it.
As you may or may not know, there are a small handful of different privacy
                focused networks out there. Each one with different ideas on how privacy on the internet should work.
                I2P or The Invisible Internet Project’s approach is to act as a fully encrypted and private layer of the
                internet.
This post is not going to be a “why one is better than the other” type post. Each
                network has its own use cases with their own set of pluses and minuses. This post is simply going to try
                and explain what I2P is in a broad sense, with some comparison to Tor. I’ll cover things like how to
                host a site and set up an outproxy in another post. As with most of my posts, this will assume that you
                do have some basic networking knowledge, but I do try and keep it as accessible as I can. Moving on.
              
I2P was initially released in 2003 and started as a fork of freenet. I2P is an anonymous
                peer-to-peer distributed communication layer designed to run any traditional internet service (Email,
                HTTP, File Sharing, Web hosting), as well as more traditional distributed applications such as
                DNS.
It is designed so that other software can use it for anonymous communication, due to this
                you can get pretty much anything to communicate Via I2P. There are already a fair number of applications
                working on I2P such as Email, Chat, and File sharing, cryptocurrency and more.
I2P uses what they call “Garlic routing” which is a variation on
                onion routing. There is a long list of technical differences that you can read about here if you want to get more
                into the nuts and bolts of things, I’m only going to give a broad overview here.
As we know,
                Onion routing is a technique for building paths (Circuits in Tor terms, Tunnels in I2P terms.) through a
                series of peers and then using the tunnel to pass data. A message is encrypted by the sender and
                decrypted every hop until it reaches its destination. With each hop stripping a layer of encryption to
                get the directions to reach its next peer.
In this way both Garlic and Onion routing are
                conceptually identical, but this is where that stops, where Tor does a single message at a time and a
                single reply, I2P bundles messages together in what Michael Freedman coined as a “Bulb” (Or a clove on
                the official site). All messages have their own delivery instructions that get bundled and delivered to
                an endpoint, allowing for the efficient bundling of an onion style reply block. This helps to increase
                overall network speed. This is a primary advantage in I2P, it's optimized in a way that is
                generally faster than Tor.
Another key difference is that traffic is unidirectional not
                bidirectional like in Tor, this allows for more flexibility in the protocol for more reliable delivery.
                Each router creates a series of in-bound and out-bound tunnels. This setup allows for things like UDP
                and P2P connections. Tor by design will probably never support UDP and while P2P connections are
                technically possible with Tor, they are highly discouraged and damaging to the network. P2P is the meat
                and potatoes of I2P making it ideal for file sharing and other forms of p2p communication.
I
                think it’s also worth pointing out that with I2P, "Exit nodes" or Out Proxies are not a focus.
                While a major use case for Tor is to help people in countries with heavily censored internet to reach
                sites on the “clear net” that might be blocked by a government. I2P does not officially “exit” traffic
                from the network.
Exit nodes (Out Proxies) in I2P are run by volunteers which are, essentially,
                centralized services. Out Proxying is also not officially advised, as the privacy benefits you get from
                I2P come from remaining in the network. But it can be done and is. Nowadays, people even use Tor Exit
                Nodes in conjunction with I2P. This is a perfect segway to talk a bit about the network structure of I2P
                as this varies quite a bit from Tor. Networking knowledge, but I do try and keep it as accessible as I
                can. Moving on.
I’ll start off with a refresher on Tor. There are enough similarities between
                the networks that without diving too deep it helps with some comparisons. Tor has various elements to
                its network. A basic Tor connection takes a minimum of three different kinds of nodes. An entry node, a
                relay, and an exit. The first node is your entry node. Keep in mind, any relay node can act as an entry
                node, the only difference being that the entry is the only node that knows who you really
                are.
Relay nodes are the ones that pass your traffic along to exit nodes after a few hops. The
                exit node communicates with your destination and can forward traffic out of the network. Exit nodes
                serve as a source for your destination server. This is part of how Tor keeps your traffic anonymous.
                Exit nodes also send the traffic back to you.
Directory servers are critical for maintaining Tor
                network. They store the identity of the nodes on the network. The directory servers are hard coded into
                the Tor browser and when you fire up the Tor browser these directory servers choose your entry, relay,
                and exit to form a circuit. At the time of writing, there are only 10 directory servers. You can see
                them here.
                The other purpose of these servers is to maintain the health of the network by monitoring the activity
                of nodes and replacing unhealthy nodes with healthy ones to maintain the stability of the
                network.
It’s also worth noting that relay servers technically have two categories: the
                “advertised relay nodes” ; these are the relays that are publicly available in the list that the
                directory servers maintain. Then there are “Bridge nodes”. These are private relays as they are not
                listed in directory servers. They exist purely for government blocks. In theory, you can block the nodes
                on the public list, but you can’t block what you can’t find, therefore bridge nodes exist. It’s hard to
                gauge the number of bridges out there, but it's estimated to be in the 2k range. You can see that
                here.
That's Tor in a nutshell. On to I2P
              
When you install I2P, you get software that has everything with it, you need to
                connect to the network and host with. Every “node” in I2P is also a router, so there is no distinct
                difference from a server and pure client like with Tor.
This leads to I2P to be almost
                completely decentralized. They say “almost” due to the need of what they call “Reseed Servers” this is
                how you make your first connections and join the network. These servers help with what’s called the DHT
                (Distributed Hash Table) bootstrap problem. There is no reliable method to get
                out of running at least one permanent bootstrap node that non-network users can find to get their
                foothold in the network. Once you're connected to the network, you only discover peers by making
                “exploratory” tunnels. But to make your initial connections, you need to get your peers from somewhere.
                This model contrasts with Tors directory servers a great deal.
Floodfill routers or peers are
                I2P’s directory servers that store the directory or the Network Database (netDB for short). Floodfill
                servers are untrusted and varying. Any router can be set to act as a floodfill router. To increase
                reliability of the netDB floodfill is automatically turned on only on high bandwidth routers (this has
                to be manually configured). In addition to having high bandwidth, a router must also pass health checks
                like outbound message queue time and job lag before floodfill is automatically turned on. It is
                estimated that only 6% of the network are floodfill routers.
The netDB that I2P uses is a
                specialized distributed database. It only contains a few types of data, the big two being Router contact
                info (RouterInfos) and Destination contact info (Lease Sets). Each bit of data is signed by the host and
                is verified by anyone who chooses to store the site in their own local copy of the netDB. It also stores
                liveliness data of a site, this allows bad entries to be dropped, newer entries replace older
                ones.
Tunnels (or circuits on the Tor network) are how routers communicate and route traffic. I2P
                builds virtual “Tunnels” between routers for communication; they are temporary and unidirectional. For a
                basic connection you need at least four tunnels, two outbound, two inbound. Each tunnel has a set amount
                of hops that is set in router settings, with a maximum of seven hops. The amount of hops per tunnel of
                course affects things like latency, throughput, reliability and anonymity. A user can fine tune the
                amount of hops based on need. Three hops is recommended for most users, as it's a fair balance of
                anonymity and speed. Peers are selected by a continuous polling and ranking performance, rather than
                trusting claimed capacity.
I could spend several more pages covering the specifics of I2P, but
                I’ll leave you with a link to the main
                  documentation if you want to take a deeper look at the network and how it works.
In conclusion, I would say that I2P has a lot of potential. While Tor is
                designed to act as an anonymizing proxy for the Vanilla Internet, I2P is specifically designed to make
                an anonymous network for hidden services and P2P applications. It's not perfect (Name a solution
                that is though… I’ll wait) but it's a good attempt at an anonymized network layer.
I think
                it's far more flexible than Tor and while it currently is more technically involved to use than Tor
                at the moment I hope that will be eventually overcome. The need to install something plus configuring a
                proxy on a separate browser from your primary browser can be daunting to some, vs Tor’s just installing
                a browser and off you go. Although Firefox plugins like “I2P In Private Browsing” does a good job
                managing I2P via containers for Firefox eliminating the need to have a separate browser or do any extra
                configuration. This makes it far more accessible in my opinion.
I2P does have a fair amount of
                self awareness when it comes down to what the network could be vulnerable to. Outside unforeseen
                software vulnerabilities that could jeopardize the network, a few of the attacks they talk about and try
                to mitigate include: Brute force, timing attacks, DOS attacks, Intersection attacks and syble attacks to
                name a few. If you want to learn more about these potential issues and how they try and mitigate, them
                here is the
                  official page.
I2P is a smaller network that's not as battle tested as Tor, but its
                optimization for hidden services and its more P2P nature is very appealing. Also, Monero and Bitcoin
                support I2P now for node communication. Along with a few other privacy focused cryptos joining the
                network. I personally hope to see more Bitcoin and Monero users to enable I2P on their nodes.
I hope
                this helps answer some questions about I2P and encourages you to learn more and start exploring how you
                can use I2P to help you maintain at least a modicum of privacy in an ever surveilled world. Furthermore,
                I'll leave some links below to get you started. Have fun exploring and tinkering!
Until next
                time.