@@ -186,29 +186,37 @@ for example ETSI does not have the concept of splitting a key into shares or Pre
186186
187187We start with a high-level overview of how the protocol works.
188188Our goal is try to avoid losing the forest for the trees later on when we dive into the details.
189- We gloss over many important details and we use some terminology without defining it; these
190- details and definitions will be filled in in the remainder of the chapter.
189+ We gloss over many important details which will be explained later.
191190
192191We have a network consisting of network nodes.
193192These nodes are connected to each other using a normal IP network (i.e. using routers and switches).
194193
195194Some of these nodes want to exchange encrypted traffic with each other, and for this reason they
196195need to agree on encryption keys.
197- We refer to these nodes as DSKE client nodes, or simply clients.
198- The clients are running the DSKE protocol as the key establishment protocol.
196+ We refer to these nodes as encryptors.
197+
198+ Each encryptor is connected to a DSKE client, or client for short.
199+ The clients are responsible for producing the symmetric encryption keys and
200+ for delivering those encryption keys to the encryptors.
201+
202+ The clients run the DSKE protocol as the key establishment protocol.
199203
200204The DSKE protocol relies heavily on using very large blocks of Pre-Shared Random Data (PSRD).
201- Before two nodes can establish keys, they first need to exchange blocks of PSRD.
205+
206+ Before a pair of clients can establish keys, they first need to exchange blocks of PSRD.
207+
202208The exchange of PSRD uses what we refer to as a secure out-of-band mechanism.
203209Think, for example, of using armed guards to exchange tamper-proof disks full of random data,
204210where the disks are destroyed after the same block of PSRD is delivered to each of a pair of nodes.
205211
212+ Later, we will see that clients don't exchange PSRD directly with each other, but through
213+ a set of intermediate nodes called DSKE Security Hubs, or just hubs for short.
214+
206215Imagine, for now, that two clients Carol and Celia have exchanged blocks of PSRD.
207216This means that Carol and Celia both have a identical copies of the PSRD blocks, and no-one else
208217knows what these blocks of PSRD are.
209218
210- Carol and Celia can now agree on a Carol-Celia encryption key using a public
211- conversation.
219+ Carol and Celia can now agree on a Carol-Celia encryption key using a public conversation.
212220For example, Carol could announce that she will use bytes numbers 100 through 228 of PSRD block
213221number 123 as the key.
214222We refer to this as the meta-data for the encryption key.
@@ -227,6 +235,9 @@ the message itself to the receiver (say Celia).
227235Celia uses the received key meta-data to extract the authentication key value from her copy of the
228236PSRD and uses it to validate the received signature.
229237
238+ Once Carol and Celia have established an encryption key, they deliver that encryption key to
239+ the encryptors using a key delivery protocol such as ETSI QKD 014 or SKIP.
240+
230241The scheme that we have described thus far becomes impractical if we have a very large number of
231242clients.
232243Each client would have to pro-actively and a-priori exchange PSRD with each of the other clients
@@ -235,8 +246,8 @@ on the network that it could potentially wish to communicate with at some point
235246For this reason, we introduce a second type of node that we refer to as a DSKE security hub,
236247or simply hub for short.
237248
238- Instead of establishing a key directly between a pair of clients, we use the hubs as trusted relay
239- nodes .
249+ Instead of establishing a key directly between a pair of clients, we use the hubs as a sort of
250+ Trusted Relay Nodes (TRNs) .
240251The clients do not establish PSRD with directly with each other;
241252instead, the clients establish PSRD with the hubs.
242253
@@ -646,16 +657,31 @@ As a result, the client registration is idem-potent and it is not an error for a
646657itself multiple times. This can happen, for example, when a client crashes and restarts.
647658
648659In the request, the client provides its own ` client_name ` .
660+ The client also provides a list of ` encryptor_names ` that are attached to the client.
661+ This is used by the hub to verify whether the client only produces or consumes keys for directly
662+ attached encryptors.
663+
649664In the response, the hub provides its ` hub_name ` .
650665
651666Method: ` PUT `
652667
653668URL: ` /hub/{hub_name}/dske/oob/v1/registration `
654669
670+ Note that we include the node name (in this case ` hub_name ` ) in the path of the URL;
671+ this allows deployments where all nodes run on a single server on a single port
672+ behind a reverse proxy (e.g.
673+ [ NGINX] ( https://nginx.org/ )
674+ )
675+ where the reverse proxy uses the node name in the URL to dispatch the request to the correct
676+ process.
677+
655678Request body:
656679```
657680{
658681 "client_name": "string" # The name of the client.
682+ "encryptor_names": [ # List of encryptors attached to the client
683+ "string", ... # Name of one encryptor attached to the client
684+ ]
659685}
660686```
661687
@@ -666,14 +692,6 @@ Successful response body:
666692}
667693```
668694
669- Note that we include the node name (in this case ` hub_name ` ) in the path of the URL;
670- this allows deployments where all nodes run on a single server on a single port
671- behind a reverse proxy (e.g.
672- [ NGINX] ( https://nginx.org/ )
673- )
674- where the reverse proxy uses the node name in the URL to dispatch the request to the correct
675- process.
676-
677695### Request Pre-Shared Random Data (PSRD)
678696
679697Once a client has successfully registered itself with a particular hub, it requests its initial
@@ -819,14 +837,18 @@ TODO: Document `DSKE-Signature` header here
819837Request body:
820838```
821839{
822- "client_name": "string", # The name of the client.
840+ "master_client_name": "string", # The name of the master client.
841+ "master_sae_id": "string", # The SAE ID (encryptor name) of the master SAE
842+ "slave_sae_id": "string", # The SAE ID (encryptor name) of the slave SAE
823843 "user_key_id": "string", # The UUID of the user key.
824844 "share_index": "integer", # The index of the share (0, 1, ..., n-1).
825845 "encryption_key_allocation": { # The PSRD pool allocation for the share encryption key.
826- [ # List of allocation fragments
827- block_uuid: "string", # The UUID of the PSRD block from which the fragment was allocated.
828- start_byte: "integer", # The index of the start byte for the fragment within the block.
829- size: "integer" # The size of the fragment
846+ "fragments": [ # List of fragments in the allocation
847+ { # One fragment in the allocation
848+ block_uuid: "string", # The UUID of the PSRD block from which the fragment was allocated.
849+ start_byte: "integer", # The index of the start byte for the fragment within the block.
850+ size: "integer" # The size of the fragment
851+ }, ...
830852 ]
831853 },
832854 "encrypted_share_value": "string" # Base64 encoded encrypted share value
0 commit comments