You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
lead: "This page explains the process for periodically substituting signers, swapping keyshares, and other processes the network uses to manage keys."
4
+
aliases:
5
+
- key-reshare
6
+
---
7
+
8
+
## Key reshare
9
+
10
+
The idea here is that when validators join the network they may be selected to the signing comittee. A smaller randomly selected group of validators that is responsible for holding the parent network key. Every session, which consists of 2400 blocks (equivalent to 4 hours), the chain will notify the TSSs (Threshold Signature Servers) that a reshare is taking place. The chain will also reandomly select a validator to join the netowrk and remove the oldest signer from the comittee.
11
+
12
+
The selected TSSs will connect to each other and execute the key reshare protocol on the parent network key, generating a new set of key shares. This protocol is similar to the distributed key generation protocol used during jump starting the network. Upon receiving a new key share, the recipients will hold the new key share in a secondary slot and rotate them to the current parent network key when everyone in the signing group has agreed that the rotation was succeful. All previous key shares will be incompatible with the refreshed key shares. However, the public validating key of the parent network key signing keypair never changes. This means all child keys will also remain the same.
13
+
14
+
For information on chain randomness used see (here)[https://docs.substrate.io/build/randomness/]
15
+
16
+
```mermaid
17
+
sequenceDiagram
18
+
Entropy Chain->>+Validator TSS: Tells selected validator to do Reshare (with new signer to add and old to remove).
19
+
Validator TSS->>+Validator TSS: Does Reshare with other selected validators stores new share in holding slot.
20
+
Validator TSS->>+Entropy Chain: Tells chain everything was A-OK
21
+
Entropy Chain->>+Validator TSS: When everyone is done tells all signers to rotate their holding key to the new parent key.
22
+
```
23
+
24
+
### Negative pathways
25
+
26
+
- The above describes the happy pathway this part is for edge cases
27
+
28
+
#### A failure of reshare protocol
29
+
30
+
- There are multiple ways this process can fail, if that were to happen the offending party would be known as everyone in the new signing party needs to participate
31
+
- Since the process is two steps the current signing party would remain the offending party would be moved to slashing and the chain would initate a new reshare (not implemented yet)
32
+
- All parties are unable to unbond until leaving the singing party so their funds would be at risk and able to be slashed
lead: "This page covers how the Entropy network functions from a conceptual standpoint. For techincal and actionable information on the various Entropy networks, check out the [Networks reference page](../reference/networks.md)."
4
+
aliases:
5
+
- joining-the-network
6
+
---
7
+
8
+
## Joining the network
9
+
10
+
This section explains the process for validator nodes to join the network. The process works something like this:
11
+
12
+
1. The new validator operates an Entropy chain node and a threshold server.
13
+
1. This new validator registers with the chain.
14
+
1. If the stake is enough and the node gets selected to be a validator, it will act as a relayer and be eligible to be added to the signer set.
15
+
16
+
```mermaid
17
+
sequenceDiagram
18
+
title Joining The Network
19
+
participant NV as New_Validator
20
+
participant C as Chain
21
+
22
+
NV->>NV: Spins up chain instance
23
+
NV->>NV: Starts threshold server
24
+
C->>NV: Places NV in validator set
25
+
CV->>NV: Validates validator's subgroup, then encrypts and sends keys
26
+
```
27
+
28
+
{{< callout type="info" >}}
29
+
The network is not currently accepting public/user-ran validator nodes. We will [announce](https://github.com/entropyxyz/community/discussions/categories/announcements) when we plan to start allowing new nodes to join the network.
30
+
{{< /callout >}}
31
+
32
+
### Required information
33
+
34
+
Each validator node requires the following information before it can join the network:
35
+
36
+
-**Endpoint**: The IP address of its threshold server.
37
+
-**X25519 Public Key**: Its public encryption key for encrypting messages to and from other validators.
38
+
-**Threshold Server Signing Account**: The account for the threshold server to submit transactions to the Entropy chain.
39
+
40
+
## Jumpstart
41
+
42
+
The network needs a "jump start" to be in a usefull state. Pretty much this means we need to do a network wide DKG to create the network parent key. This is started through a blockchain call which informs the selected TSSs to do a dkg. These TSSs will create the network parent key and create the first signing comittee.
43
+
44
+
Through reshares TSSs will get subbed in and out of the signing comittee. At registration user's are given a derivation off of the parent key and during signing we have a just in time key derivation to allow for singing for a given account.
45
+
46
+
```mermaid
47
+
sequenceDiagram
48
+
participant Anyone
49
+
participant Chain
50
+
participant Validator Alice
51
+
participant Validator Bob
52
+
participant Validator Charlie
53
+
participant Validator David
54
+
55
+
Anyone ->> Chain: Calls jumpstart_network().
56
+
57
+
Note over Chain: Selects validators for distributed-key-generation (DKG).
58
+
Chain ->> Validator Alice: do DKG message sent.
59
+
Chain ->> Validator Bob: do DKG message sent.
60
+
Note over Validator Alice, Validator Bob: Perform DKG.
61
+
Validator Alice ->> Chain: Confirms network is jumpstarted.
62
+
Validator Bob ->> Chain: Confirms network is jumpstarted.
63
+
Note over Chain: Network is jumpstarted, Alice and Bob are signers.
lead: "A user needs to register in order to be able to use the Entropy network to sign messages. This page covers that process."
3
+
lead: "This section explains the technical steps involved in registering a user account on the Entropy network, including the selection of programs and configurations, and the generation of a verifying key."
4
4
---
5
5
6
6
The SDK method for registering is [`Entropy.register`](https://github.com/entropyxyz/sdk/blob/main/README.md#register).
@@ -12,46 +12,11 @@ sequenceDiagram
12
12
actor User
13
13
participant Chain
14
14
15
-
participant Validator Alice
16
-
participant Validator Bob
17
-
participant Validator Charlie
18
-
participant Validator David
19
-
20
-
box Subgroup 1
21
-
participant Validator Alice
22
-
participant Validator Bob
23
-
end
24
-
25
-
box Subgroup 2
26
-
participant Validator Charlie
27
-
participant Validator David
28
-
end
29
-
30
-
User ->> Chain: Informs chain of registration.
31
-
32
-
Note over Chain: Selects validators for distributed-key-generation (DKG).
33
-
Chain ->> Validator Alice: Sends user information.
34
-
Chain ->> Validator Charlie: Sends user information.
35
-
36
-
Note over Validator Alice, Validator Bob: Perform DKG.
37
-
Note over Validator Charlie, Validator David: Perform DKG.
38
-
Validator Alice ->> Validator Bob: Sends key-share to rest of subgroup.
39
-
Validator Charlie ->> Validator David: Sends key-share to rest of subgroup.
40
-
41
-
Validator Alice ->> Chain: Confirms user is registered.
42
-
Validator Charlie ->> Chain: Confirms user is registered.
43
-
Note over Chain: User now in a registered state.
15
+
User ->> Chain: Informs chain of registration. And selects programs and configs associated with account
16
+
Chain ->> User: Selects user's derivation path and returns verifying key associated with that user
44
17
```
45
18
46
-
1. The user registers with the Entropy chain by submitting a transaction from the 'signature request account' containing the 'Account Key', and initial 'ProgramsData'.
19
+
1. The user registers with the Entropy chain by submitting a transaction from any account containing the 'Account Key', and initial 'ProgramsData'.
47
20
*```ProgramsData``` - Is multiple Programs Instances. Which contain the ```program_pointer``` (the hash of the program you want to use) and the ```program_config``` for that program. On the evaluation of a signature request a threshold server will run all the programs and pass through the program config for that program.
48
21
49
-
1. The chain selects which nodes should perform a [distributed key generation (DKG)](https://docs.rs/synedrion/latest/synedrion/sessions/fn.make_key_gen_session.html) based on the current block number.
50
-
1. As each block is finalized, an off-chain worker makes an HTTP POST request to each selected threshold server with the signature request accounts of all users who have registered, as well as details of the other validator nodes in the signing subgroup. Specifically, the `/user/new` ([src](https://github.com/entropyxyz/entropy-core/blob/master/crypto/server/src/user/api.rs)[API](https://docs.rs/entropy-tss/latest/entropy_tss/#usernew---post)) endpoint is called with a [`OcwMessageDkg`](https://docs.rs/entropy-shared/latest/entropy_shared/types/struct.OcwMessageDkg.html).
51
-
1. All selected threshold servers:
52
-
1. Connect to each other over websocket and make a [noise handshake](https://noiseprotocol.org/noise.html) to establish an encrypted channel for protocol messages.
53
-
1. Perform a [DKG](https://docs.rs/synedrion/latest/synedrion/sessions/fn.make_key_gen_session.html) and store their [key-share](https://docs.rs/synedrion/latest/synedrion/struct.KeyShare.html) in their [encrypted key-value store](https://docs.rs/entropy-kvdb).
54
-
1. Send the generated share to other members of their signing subgroup by POSTing to `/user/receive_key` ([src](https://github.com/entropyxyz/entropy-core/blob/master/crates/threshold-signature-server/src/user/api.rs)[API](https://docs.rs/entropy-tss/latest/entropy_tss/#for-other-instances-of-the-threshold-server)).
55
-
1. They submit a transaction to the entropy chain to confirm the user has successfully registered.
56
-
1. On receiving a key-share via `receive_key`, the threshold server will check with the chain that the sender is in the correct subgroup, and if so store the key-share in their key-value store.
57
-
1. On receiving a confirmation transaction from all selected threshold server, the chain sets the user to a 'registered' state, making it possible to sign messages.
22
+
1. The chain selects a derivation path based on a running count and stores said user information in a mapping with the veryfying key for that user as the key in the mapping. The veryfying key will be the account that the edcsa signatures resolve to.
Copy file name to clipboardExpand all lines: content/concepts/security.md
+8-2Lines changed: 8 additions & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -1,8 +1,14 @@
1
1
---
2
-
title: "Node encryption and authentication"
3
-
lead: "When sending messages to threshold signature servers on the Entropy network, you must authenticate and encrypt the messages. This page covers that process."
2
+
title: "Security"
3
+
lead: "Entropy leverages cutting-edge cryptographic techniques and distributed systems principles to deliver a highly secure network. Learn more about our security architecture and protocols."
4
+
aliases:
5
+
- node-encryption-and-authentication
4
6
---
5
7
8
+
## Node encryption and authentication
9
+
10
+
When sending messages to threshold signature servers on the Entropy network, you must authenticate and encrypt the messages. This section covers that process.
11
+
6
12
The authentication process is simple: each node has a substrate account stored on the chain, referred to as a TSS account.
7
13
8
14
Messages are signed using SR25519. This encryption requires using an X25519 public key which gets used in [Hybrid Public Key Encryption](https://www.rfc-editor.org/rfc/rfc9180.html), using the [`hpke-rs`](https://docs.rs/hpke-rs) crate.
0 commit comments