Security of Subnet with 13 Nodes

Internet Computer security is defined using BFT terms:

  • less than 1/3 of the networks is malicious.

Big majority of the subnets have only 13 validators. That means, they can tolerate maximum 4 malicious nodes. I think this is very low.
How does seams to be secure?

These nodes are all controlled by different entities, and distributed as much as possible over the globe. If you want to compare with e.g. BTC, then you can see that BTC relies on just two pools playing nice, i.e. it has a tolerance of 2 malicious entities. ETH seems to be much better, but IIRC before ‘the merge’ it was at around 3 controlling pools


Also see this earlier thread for additional context.


Comparing to BTC doesn’t make sense here. BTC has totally different trust model. It doesn’t have deterministic finality, it has a very big, inherent, block production cost and very easy light clients.

Security is more than fault tolerance.

  1. What are the guarantees that there are not 2-3 people that can collude and control 5 nodes?
  2. Collusion can be delicate and impossible to detect.

As noted in OP, tolerating max 4 malicious nodes doesn’t seem secure enough for a subnet to host millions of dollars, and control BTC keys. I would imagine an order of magnitude higher guarantees.

There are no guarantees, just probabilities. Same as with PoW or PoS networks. What’s the guarantee that the top 2 Bitcoin mining pools cannot collude and take over the network?

It can, but AFAICT the worst that 5 malicious, colluding nodes on a 13-node subnet can do is fork the state. I.e. they can make it so that half of the honest nodes continue down one fork and the other half down a different fork. But (again, AFAICT, I may well be wrong) they cannot force invalid behavior. I.e. they cannot cause a canister’s state to be mutated in ways that its code would not allow it (i.e. each of those forks will be internally consistent). In order to arbitrarily tamper with the state of the subnet you would need 9 out of 13 nodes to collude.

That’s not to say that forking a subnet is not a problem. You could e.g. make a single ICP payment and have each half of the subnet call out to a third canister on another subnet that would deliver you twice the ckBTC amount. Although again, that other subnet would still see the two halves of your now-malicious subnet as a single subnet; and any discrepancy in the number of messages sent/received by one half vs. the other would cause communications between the 2 subnets to stall very, very soon. Something that would be immediately visible.

13-node subnets do not control BTC keys and are not supposed to host millions of dollars. There are 30+ node fiduciary subnets for that purpose.