-
Notifications
You must be signed in to change notification settings - Fork 745
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Separate BN for block proposals (#4182)
It is a well-known fact that IP addresses for beacon nodes used by specific validators can be de-anonymized. There is an assumed risk that a malicious user may attempt to DOS validators when producing blocks to prevent chain growth/liveness. Although there are a number of ideas put forward to address this, there a few simple approaches we can take to mitigate this risk. Currently, a Lighthouse user is able to set a number of beacon-nodes that their validator client can connect to. If one beacon node is taken offline, it can fallback to another. Different beacon nodes can use VPNs or rotate IPs in order to mask their IPs. This PR provides an additional setup option which further mitigates attacks of this kind. This PR introduces a CLI flag --proposer-only to the beacon node. Setting this flag will configure the beacon node to run with minimal peers and crucially will not subscribe to subnets or sync committees. Therefore nodes of this kind should not be identified as nodes connected to validators of any kind. It also introduces a CLI flag --proposer-nodes to the validator client. Users can then provide a number of beacon nodes (which may or may not run the --proposer-only flag) that the Validator client will use for block production and propagation only. If these nodes fail, the validator client will fallback to the default list of beacon nodes. Users are then able to set up a number of beacon nodes dedicated to block proposals (which are unlikely to be identified as validator nodes) and point their validator clients to produce blocks on these nodes and attest on other beacon nodes. An attack attempting to prevent liveness on the eth2 network would then need to preemptively find and attack the proposer nodes which is significantly more difficult than the default setup. This is a follow on from: #3328 Co-authored-by: Michael Sproul <michael@sigmaprime.io> Co-authored-by: Paul Hauner <paul@paulhauner.com>
- Loading branch information
1 parent
a78285d
commit 572f7f5
Showing
16 changed files
with
452 additions
and
75 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
# Advanced Proposer-Only Beacon Nodes | ||
|
||
Lighthouse allows for more exotic setups that can minimize attack vectors by | ||
adding redundant beacon nodes and dividing the roles of attesting and block | ||
production between them. | ||
|
||
The purpose of this is to minimize attack vectors | ||
where malicious users obtain the network identities (IP addresses) of beacon | ||
nodes corresponding to individual validators and subsequently perform Denial Of Service | ||
attacks on the beacon nodes when they are due to produce a block on the | ||
network. By splitting the duties of attestation and block production across | ||
different beacon nodes, an attacker may not know which node is the block | ||
production node, especially if the user rotates IP addresses of the block | ||
production beacon node in between block proposals (this is in-frequent with | ||
networks with large validator counts). | ||
|
||
## The Beacon Node | ||
|
||
A Lighthouse beacon node can be configured with the `--proposer-only` flag | ||
(i.e. `lighthouse bn --proposer-only`). | ||
Setting a beacon node with this flag will limit its use as a beacon node for | ||
normal activities such as performing attestations, but it will make the node | ||
harder to identify as a potential node to attack and will also consume less | ||
resources. | ||
|
||
Specifically, this flag reduces the default peer count (to a safe minimal | ||
number as maintaining peers on attestation subnets do not need to be considered), | ||
prevents the node from subscribing to any attestation-subnets or | ||
sync-committees which is a primary way for attackers to de-anonymize | ||
validators. | ||
|
||
> Note: Beacon nodes that have set the `--proposer-only` flag should not be connected | ||
> to validator clients unless via the `--proposer-nodes` flag. If connected as a | ||
> normal beacon node, the validator may fail to handle its duties correctly and | ||
> result in a loss of income. | ||
|
||
## The Validator Client | ||
|
||
The validator client can be given a list of HTTP API endpoints representing | ||
beacon nodes that will be solely used for block propagation on the network, via | ||
the CLI flag `--proposer-nodes`. These nodes can be any working beacon nodes | ||
and do not specifically have to be proposer-only beacon nodes that have been | ||
executed with the `--proposer-only` (although we do recommend this flag for | ||
these nodes for added security). | ||
|
||
> Note: The validator client still requires at least one other beacon node to | ||
> perform its duties and must be specified in the usual `--beacon-nodes` flag. | ||
> Note: The validator client will attempt to get a block to propose from the | ||
> beacon nodes specified in `--beacon-nodes` before trying `--proposer-nodes`. | ||
> This is because the nodes subscribed to subnets have a higher chance of | ||
> producing a more profitable block. Any block builders should therefore be | ||
> attached to the `--beacon-nodes` and not necessarily the `--proposer-nodes`. | ||
|
||
## Setup Overview | ||
|
||
The intended set-up to take advantage of this mechanism is to run one (or more) | ||
normal beacon nodes in conjunction with one (or more) proposer-only beacon | ||
nodes. See the [Redundancy](./redundancy.md) section for more information about | ||
setting up redundant beacon nodes. The proposer-only beacon nodes should be | ||
setup to use a different IP address than the primary (non proposer-only) nodes. | ||
For added security, the IP addresses of the proposer-only nodes should be | ||
rotated occasionally such that a new IP-address is used per block proposal. | ||
|
||
A single validator client can then connect to all of the above nodes via the | ||
`--beacon-nodes` and `--proposer-nodes` flags. The resulting setup will allow | ||
the validator client to perform its regular duties on the standard beacon nodes | ||
and when the time comes to propose a block, it will send this block via the | ||
specified proposer-only nodes. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.