Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Discovering all of the nodes in the network #34

Open
lrettig opened this issue Mar 30, 2020 · 1 comment
Open

Discovering all of the nodes in the network #34

lrettig opened this issue Mar 30, 2020 · 1 comment
Labels
question Further information is requested

Comments

@lrettig
Copy link
Member

lrettig commented Mar 30, 2020

Continuing the conversation from #22 (comment)...

@noamnelke pointed out:

While I agree that it would be nice if it wasn't possible to discover the entire network, unfortunately, this is not the case. If one wants to, they can simply keep running the discovery protocol and eventually be aware of all the nodes. Moreover, even a benevolent node is likely to be aware of most of the network pretty fast even without making special effort.

Which reminds me a lot of this attack against MimbleWimble/Grin.

How concerned are we about this? Is there anything we can do about this?

CC @avive @y0sher @tal-m

@lrettig lrettig added the question Further information is requested label Mar 30, 2020
@noamnelke
Copy link
Member

Since we're not a privacy coin, this attack wouldn't register as an attack in our case. At least not more than chain-analysis in Bitcoin is an attack.

What makes me mildly uncomfortable about the whole network being discoverable is that unlike other DLTs, most nodes on our network are expected to be miners, many of them home miners, which I don't expect to be well equipped to deal with eclipse attacks or even the most basic DoS.

One possibly related attack that I suggested we give some thought to is a sybil attack on our P2P. An attacker may bring up millions of non-mining P2P nodes. This can be done quite cheaply, I believe. By just doing that there's a high likelihood that this entity will be the only neighbor of everyone on the network, without anyone knowing it.

Some numbers to explain my last point. Say there are 5k miners on the network (a very happy scenario). Now an attacker brings up 50 million nodes and just plays nice and lets everyone connect to them, slowly, over time. When a new node joins the network and looks for 8 randomly selected peers, what's the chance of getting at least one honest node? Assuming our discovery mechanism gets close to randomly selecting from the entire population: 0.0008.

So after a while everyone's talking through this centralized man-in-the-middle that can basically do an eclipse on anyone.

Other DLTs are less vulnerable to this kind of attack because as long as a substantial portion of miners have an alternative way of communicating (e.g. Bitcoin FIBRE mining will be minimally affected and users/nodes will eventually find ways to mitigate this.

In our case everyone's a miner and we discourage industrial mining, so there can't be a closed communication channel for miners. More importantly, we're more reliant on prompt communication. Our Hare protocol makes assumptions about the propagation delay and is extremely vulnerable to network splits.

Circling back to the topic at hand: being able to map the entire P2P network makes the attack I described even cheaper since the attacker can then selectively accept connections from specific peers such that with minimal actual connections they can still split the network at will.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

2 participants