DEXON DKG Protocol =========================== ### Parameter * λ = One gossip time * Signature = [BLS](https://en.wikipedia.org/wiki/Boneh%E2%80%93Lynn%E2%80%93Shacham) * Curve = CurveFp382_2 * t = Phase 1 ID Registration ------- ### @ T < 0 Each validator register its ID with stack. Phase 2 Secret Key Share Exchange ------- ### @ T = 0 Each validator `i` generates `n` (`n` = # of ID registered in phase 1) secret key shares (`SK_i,0, SK_i,1, ..., SK_i,n`) of order `t` and the secret key share is sent to the corresponding validator (`SK_i,j` is sent to validator `j`) via a secure channel. Each validator `i` broadcast the master public key (`MPK_i`) of order `t` associated with the secret key shares. Each validator `i` broadcast public key shares (`PK_i,0, PK_i,1, ..., PK_i,n`) associated with secret key shares. Phase 3 Complaint ------- ### @ T = 2λ Each validator `i` verify if the secret key share `SK_i,j` is associated with the public key share of validator `j` `PK_i,j`. If the verification fails, `i` broadcast complaint of `j`, `CMP_i,j`. Phase 4 Disqualify Byzantine Node ------- ### @ T = (2λ, 4λ) If there are more than `t` complaints to validator `j` ( (`i` : for all validator `i`)), then `j` is marked as **Disqualified**. Each validator `i` determines the combined secret key, (`k`: validator `k` is not marked as **Disqualified**) Each validator `i` determines the combined public key, (`k`: validator `k` is not marked as **Disqualified**) Phase 5 Sign with CSK ------- ### @ T = 4λ Each validator `i` sign the message with `CSK_i` and broadcast the signature, `Sign_i`. Phase 6 TSIG ------- ### @ T = (4λ, +inf) Verify `Sign_i` with `CPK_i`. Collect more than `t` valid `Sign_i` and recover TSIG.