Hacker News new | ask | show | jobs
by jtbayly 1988 days ago
I’d like some comparison to Tor, which I’m somewhat familiar with. Can anybody help me out?
4 comments

Protocol-wise they're pretty similar except I2P uses a variant of onion routing called "garlic routing" which allows for message bundling (I don't know if this is currently used beyond bundling for delivery status messages and lease sets). I2P also has unidirectional circuits as opposed to Tor's bidirectional ones which means unlike Tor hidden services where you build a bridged circuit using a rendezvous point, in I2p each side has a pair of unidirectional tunnels for send/receive. I2P is also packet switched as opposed to circuit-switched, which can possibly make it more resilient to traffic-analysis attacks and lead to better load balancing of resources.

Otherwise the main differences seem to be design-wise, where in Tor you rely on a centralized bootstrap to get the list of relays whereas I2P does this via decentralized NetDb.

Roughly it's like Tor (though I think the transport is not necessarily like Tor), except it's closed. You can only communicate with others on the I2P network. Some I2P users may choose to operate an "outproxy" and provide Internet access but it's not built into the network or software. What is (or was, it's been awhile) built in is a torrent client.

It's also written in Java and the router web UI was pretty snazzy from what I remember.

The design is also more decentralized than Tor. It's also been a while, but I think the client runs a router node by default. This provides extra anonymity, because your own traffic is hidden in the other traffic you're routing. As I recall, the security/performance tweaks in the Web UI allowed you to set how much traffic you allowed through your node.
> This provides extra anonymity, because your own traffic is hidden in the other traffic you're routing.

Tor's take on the common proposal to do this is at

https://2019.www.torproject.org/docs/faq.html.en#BetterAnony...

and notes this threat model issue:

> There are some cases where it doesn't seem to help: if an attacker can watch all of your incoming and outgoing traffic, then it's easy for them to learn which connections were relayed and which started at you. (In this case they still don't know your destinations unless they are watching them too, but you're no better off than if you were an ordinary client.)

(I'm not mentioning this to criticize I2P's design, just to point out that the benefit you get from this decision depends a lot on your threat model!)

There is a C++ implementation that is pretty nice:

https://github.com/PurpleI2P/i2pd

There was also Kovri (a fork of i2pd made by the Monero project) that sadly appears to be dead now.[1] It could have greatly increased the number of nodes on I2P.

[1]: https://gitlab.com/kovri-project/kovri

Unlike Tor, I2P supports UDP which lets you use bittorrent, but since I2P doesn't have exit nodes, you can only bittorrent with others on I2P.