If the goal of Monero is to have a private by default cryptocurrency network, why can't we make the network interface (daemon) connect to other peers via kovri by default?
1 Answer
This is a copy and paste from an exchange on reddit. Answer looking for improvements and / or editing :)
FP - Not a good idea, then nearly the entire network is at risk of being Sybil attacked. Operating a full node in its entirety on hidden services is something that should be reserved for users in highly adversarial environments who can’t use a remote node for one reason or another.
smooth - It's not because they are more susceptible to isolation attacks. Most users and the network as a whole are best served by connecting to both (their own transactions should only be sent over i2p to prevent any possibility of associating them with an IP address by the above described methods)
Q: i guess I just don't get why connecting via i2p would lead to isolation attack or Sybil. Wouldn't it be the same procedure - hardcode some i2p seed nodes, connect to the seed nodes, get a peer list of i2p-connected peers, and then go from there? Is the problem that making an i2p address is easier than getting more IP addresses?
Smooth: Not only numerically more addresses, but in the case of IP you can take measures to spread out your connections geographically, across ISPs, etc. due to the way IPs are assigned. (I don't think Monero does this now, but Bitcoin does.) With something like i2p or Tor hidden services it is completely opaque and there is no reasonable way to know whether all of the i2p addresses are actually the same attacker.
The other thing is that you do want to make sure there is a robust and attack-resistant interconnection between the i2p and IP networks (one of those papers describes an attack where the attacker arranges for all of the Tor exit nodes to be banned.) How do you do that (other than appointing someone to be responsible for maintaining it, and even then, their specific nodes can be attacked)? The only robust and decentralized way I can think of is to have nodes connect to both by default.
FP: How do the seed nodes know their peers aren’t malicious? The peers could behave well with the seed nodes (which they can trivially identify because it’s hard coded), and misbehave with everyone else.
Q: how is that currently addressed in the existing system?
FP: IPv4 has a cost, and you can make it harder by limiting it to one active peer per C-class, using anchor connections, etc. Here are two resources:
https://arxiv.org/pdf/1410.6079.pdf
https://eprint.iacr.org/2015/263.pdf
The work IPGlider has been doing on Monero is based on that last paper.