Skip to content

Support IB equivocations #428

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

Open
wants to merge 8 commits into
base: main
Choose a base branch
from
Open

Support IB equivocations #428

wants to merge 8 commits into from

Conversation

SupernaviX
Copy link
Contributor

Adds the first adversarial behavior to the rust simulation: IB equivocation attacks.

This adversarial behavior is configured at the level of individual nodes in the topology file. To configure a node to follow this behavior,

  node-4:
    stake: 10000000
    location:
      - -30.0
      - 170.0
    producers:
      node-11:
        latency-ms: 13.0
    behaviours:
      - behaviour: "ib-equivocation"

(the British spelling is for Haskell compatibility)

Nodes configured to perform IB equivocation have the following behaviors:

  • When winning an IB lottery, they will produce two separate IBs with the same VRF result/"lottery number" and send both of them to peers.
  • When receiving an IB header, they will not check for equivocation and will forward the same IB to all peers.

Nodes not configured with the new behavior now guard against IB equivocations. They will relay the second header they receive with the same VRF (as proof of equivocation), but will not relay other headers, or download IBs which are known to be equivocated.

@pagio
Copy link
Contributor

pagio commented Jun 25, 2025

@SupernaviX Did you also implement the rest of the defenses described in the Leios paper: https://eprint.iacr.org/2025/1115.pdf, sec. 6 ? I.e., delaying voting for EBs or including IBs in EBs a bit to detect if there is an equivocation?

@SupernaviX
Copy link
Contributor Author

SupernaviX commented Jun 25, 2025

@pagio I didn't implement that, and I'll add it in, but it wouldn't affect our simulations anyway. We've had ∆hdr set to 1 second since it was implemented, so 5∆hdr is at worst a single stage.

Which, reading the paper more, looks like a fundamental assumption of the protocol. So this must have some impact I'm not noticing.

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

Successfully merging this pull request may close these issues.

2 participants