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

[SPEC] Slashing conditions in multi-party-ecdsa #35

Open
3 tasks
drewstone opened this issue Dec 20, 2021 · 2 comments
Open
3 tasks

[SPEC] Slashing conditions in multi-party-ecdsa #35

drewstone opened this issue Dec 20, 2021 · 2 comments
Labels
spec 🆕 Specification details for future implementation

Comments

@drewstone
Copy link
Contributor

Overview

In order to report a misbehaviour we need to obtain and utilise proofs of this misbehaviour from underlying multi-party-ecdsa library (further MPE).

Research:

  • Mapping between MPE parties and node authority ids.
    • Parties in MPE are identified by numbers from 1 to N inclusive. This identifiers are assigned at the start of Keygen process.
    • For party id we use authority index in authorities set.
      • Need to make sure the set has consistent order
  • Proof that party i has violated the protocol
    • The MPE seems to only return a set of violating party ids, so we need to construct a proof that certain party indeed has violated the protocol.
    • One possible way to do so is by voting, similar to what we have in proposals right now. For this solution to work, the MPE’s state machine misbehaviour report must be consistent across all the nodes.
      • Check if MPE broadcasts misbehaviour with proofs to other parties, so that eventually every good party will have the same information about malicious parties.
      • Check if there is a possibility for malicious parties to manipulate others so good parties never agree reach voting threshold for slashing. E.g. malicious party sends corrupted messages to only a subset of parties while sending correct messages to others
@drewstone
Copy link
Contributor Author

drewstone commented Dec 28, 2021

@temld4 there's a few things we'll need to do nonetheless if we want to catch and handle slashing conditions. I'd be curious to hear your thoughts on them and where you think we may fit it into the current workflow (if it's not there already).

We should be signing messages over the gossip network.

For starters, we need to validate that the only messages we process are sent by valid parties. I think we have this implemented by would be worth double-checking. Next, we need a way of indexing signed messages received from other parties efficiently. If we reach a blame stage at any phase of the protocol, it will require tracing back the misbehaving message to its signature.

We must somehow have a mapping from the signing key either (ECDSA or SR25519 key) to their staking records on-chain.

Once we identify misbehavior and the misbehaving message and signature pair, we will submit this on-chain. There we will compute a slashing amount and slash that validator's staked / nominating balances. This will require having a 1:1 mapping between the signing key for gossip messages and the staking keys on-chain for the authorities.

Misbehaviors

Offline

Likely to catch offline nodes we may only be able to rely on an honest-majority reporting assumption.
image

Malicious participation

Most parts of the protocol that deal with misbehavior that are not due to offline time are due to broadcasting invalid zero-knowledge proofs. Peers in the protocol broadcast zero-knowledge proofs of the data they're sharing with other participants in the DKG. Each peer verifies these proofs locally.

Keygen (Page 16 of GG20)

image

Signing (Page 17 of GG20)

image

@dutterbutter dutterbutter added the spec 🆕 Specification details for future implementation label Apr 6, 2022
@1xstj
Copy link
Contributor

1xstj commented Mar 7, 2023

Same as #33

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
spec 🆕 Specification details for future implementation
Projects
Status: Not Started 🕧
Status: Todo
Development

No branches or pull requests

4 participants