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

add a readme file #3

Merged
merged 9 commits into from
Oct 8, 2024
Merged

add a readme file #3

merged 9 commits into from
Oct 8, 2024

Conversation

radiken
Copy link
Contributor

@radiken radiken commented Aug 8, 2024

No description provided.

Copy link

@GalRogozinski GalRogozinski left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In general if you can make this more detailed it will be great!

README.md Outdated Show resolved Hide resolved
README.md Outdated Show resolved Hide resolved
README.md Outdated Show resolved Hide resolved
Copy link

@GalRogozinski GalRogozinski left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you please:

  1. Explain what attack the proof helps us protect against? Be detailed.
  2. The spec here mainly concentrates on validation. Can you write what are our validation criteria?

README.md Outdated
Owner [20]byte `ssz-size:"20"`
}
```
*ValidatorPubKey*, *EncryptedShare*, and *Owner* are to identify information of the validator and the operator in SSV netwwork, the *SharePubKey* is computed by the operator after the DKG ceremony using the obtained secret share as the private key.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typo on netwwork

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

More information about proof and validation criteria is added. However, how proof helps to protect against attack is I think subject to more discussion and we may update the proof struct as well.

Copy link

@GalRogozinski GalRogozinski left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Much better!
Thanks!

README.md Outdated Show resolved Hide resolved
Copy link

@RaekwonIII RaekwonIII left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left a couple of comments and a couple of (likely dumb) questions.

README.md Outdated
When a init message is sent to the operators, all operators participate and run a DKG ceremony to create key shares. A DKG ceremony asks each operator to verifiably share locally generated secrets with other operators, and combine secret shares from all operators to derive its own BLS key share. After the ceremony, each operator generates a **Result** with a **SignedProof** (see below) for verification. Proofs are referred to when an initiator asks for re-sign or reshare.

### Re-sign
In the case where the nonces of a DKG ceremony is not correct, to prevent replay attack, the initiator sends re-sign messages for operators to create new signatures with correct nonces without generating new key shares.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is creating new key-shares, though. The procedure only changes the signature part of the shares...but it does change the overall sharesData.
Re-phrase to "without generating a new validator key"? 🤔

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, the signature part is owner-nonce, so it could be that both were wrong...for whatever reason. Might be just more "complete" to clarify that both can be changed.

README.md Outdated
# SSV Distributed Key Generation Spec

## Introduction
This repository contains spec of distributed key generation (DKG) used in SSV. Based on verifiable secret sharing, DKG allows a set of *n* operators to generate a **BLS** key share for each operator, such that a BLS private key can only be used when threshold *t* out of *n* operators agree.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

provide a formula for "t out of n"?

where t is defined by the number of faults admissible: n = 3 * f + 1

README.md Outdated
Owner [20]byte `ssz-size:"20"`
}
```
*ValidatorPubKey*, *EncryptedShare*, and *Owner* are to identify information of the validator and the operator in SSV network, the *SharePubKey* is computed by the operator after the DKG ceremony using the obtained secret share as the private key.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

likely it's me failing to understand, but:

  • EncryptedShare is the operator's encrypted "portion" of the validator's share data, correct?
  • SharePubKey is derived from EncryptedShare? the phrasing here speaks of "using the obtained secret", but...what secret?

README.md Outdated
*ValidatorPubKey*, *EncryptedShare*, and *Owner* are to identify information of the validator and the operator in SSV network, the *SharePubKey* is computed by the operator after the DKG ceremony using the obtained secret share as the private key.

**Proof**s are published by the initiator after the DKG ceremony. All **Proof** from a ceremony together validates the completion of this ceremony. they can make sure:
- Partial signatures of operators are publically verifiable using the *SharePubKey* in the **proof**. If an operator created invalid partial signatures, the network is able to identify and potentially take further action.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How could one verify this? I have a SharePubKey produced by an operator...what do I do with it, practically?

Copy link

@GalRogozinski GalRogozinski left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please see my last comment.
Also give the readme another final look now that you understand DKG better

### Reshare
When the set of operators changed (including change of size and change of operators), a reshare is initiated to generate new key shares among the new operators. This process requires participation from *t* old operators and all new operators.

---
Copy link

@GalRogozinski GalRogozinski Sep 23, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add the following here (or wherever you see fit)

Security Assumptions

All messages are authenticated using the initiator's and operators' public key.

Init

The initiator is fully trusted. Meaning it won't deviate from protocol. But it can have faults (go, up and down).

Re-sign

The initiator is not trusted. It may try to fool the operators into resigning with the wrong secret shares, owner and nonce. Also since in the resign operation the owner may change, and owner is used in the Proof, all $n$ operators need to participate in the ceremony.

Reshare

The initiator is not trusted. It may try to fool the operators into resharing with the wrong secret shares. Or resharing without permission.

Copy link

@GalRogozinski GalRogozinski left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe just explain in Init that we provide signed owner (ethAddress) and nonce.
This is just in order to give context to the owner term later in reshare and resign

@alan-ssvlabs
Copy link
Contributor

Maybe just explain in Init that we provide signed owner (ethAddress) and nonce. This is just in order to give context to the owner term later in reshare and resign

I thought we don't have owner's signature for init?

@GalRogozinski
Copy link

@alan-ssvlabs
I was being unclear
At the end of the init process we create Results and proofs where we provide signed owner and nonce.
It just felt to me that while reading this, that an outsider trying to understand DKG won't understand what owner is

@GalRogozinski GalRogozinski merged commit bcd5356 into ssvlabs:master Oct 8, 2024
2 checks passed
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.

5 participants