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
* Fix typos in n2c local message notification
* Replace 'blockNumber'/'TTL' fields with 'expiresAt'
In order to provide a simpler message invalidation mechanism.
* Add an explicit field for cold verification key in the message
The cold verification key is not strictly necessary in the operational certificate.
This allows to simplify the Haskell DMQ implementation and reuse the existing
KES signature verification of the Ouroboros consensus implementation.
* Fix update 'coldVerificationKey' type
* Specify how message is signed with KES keys
* Fix formatting issue in CDDL spec
* Fix 'kesPeriod' type to 'word'
* Fix 'kesPeriod' type to 'word64'
* Fix line numbers in n2n submission message CDDL specs
* Update message structure with payload and signature parts
* Remove operational certificate and cold verification key from signed message payload
* Remove 'MsgServerDone' message from n2c local message notification
* Better explanation of the authentication of the message
* Clarify structure of the message
* Clarify the structure of the Operational Certificate
#### Inbound side and outbound side implementation
@@ -210,7 +211,10 @@ The protocol supports blocking and non-blocking requests:
210
211
211
212
##### Message invalidation mechanism
212
213
213
-
In order to bound the resource requirements needed to store the messages in a network node, their lifetime should be limited. A time to live can be set as a protocol parameter for each topic, and once the timespan has elapsed the message is discarded in the internal state of the network node. The time to live can be based on the timestamp of reception of the message on the network node or on the block number embedded in the message.
214
+
In order to bound the resource requirements needed to store the messages in a network node, their lifetime should be limited. Thus, they carry an expiration date (formatted as a Unix timestamp) which must be checked before processing the message:
215
+
216
+
- the message will be invalidated when the local clock of the processing node exceeds the expiration date
217
+
- an expiration date which expires too far in the future will be considered a protocol violation (the maximum allowed time to live is a protocol parameter for each topic which may be negotiated).
214
218
215
219
##### Cost of valid message storage
216
220
@@ -241,7 +245,7 @@ For a total of **3,100** Cardano SPOs on the `mainnet`, on an average **50%** of
241
245
242
246
##### Message authentication mechanism
243
247
244
-
The message bodyis signed with the KES key of the SPO. This signature and the operational certificate of the SPO are appended to the message which is diffused.
248
+
The payload part of the message (message id, message body, KES period and expiration timestamp fields encoded as CBOR) is signed with the KES key of the SPO. The message is composed of the aforementioned payload (encoded as CBOR bytes), the KES signature (raw bytes), the operational certificate (the KES public key, the issue number of the operational certificate, the KES period at the time of creation of the operational certificate and their cold signing key signature, encoded as CBOR bytes) and the cold verification key (raw bytes) are appended to the message.
245
249
246
250
Before being diffused to other peers, an incoming message must be verified by the receiving node. This is done with the following steps:
247
251
@@ -302,15 +306,15 @@ The following tables gather figures about expected network load in the case of *
For a total of **3,100** Cardano SPOs on the `mainnet`, on an average **50%** of them will be eligible to send signatures (i.e. will win at least one lottery in the Mithril protocol). This means that if the full Cardano stake distribution is involved in the Mithril protocol, only **1,550** signers will send signatures at each round:
-**MsgRequestMessagesBlocking**: The client asks for available messages and acknowledges old message ids. The server will only reply once there are available messages.
533
545
-**MsgReplyMessagesBlocking([message])**: The server has received new messages and indicates if further message are available. In the blocking case, the reply is guaranteed to contain at least one message.
534
546
-**MsgClientDone**: The client terminates the mini-protocol.
535
-
-**MsgServerDone**: The server terminates the mini-protocol.
0 commit comments