Skip to content

Commit bfe3f14

Browse files
committed
review comments
1 parent 8e1e253 commit bfe3f14

File tree

1 file changed

+28
-13
lines changed

1 file changed

+28
-13
lines changed

standards/application/privatev1.md

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ contributors:
99

1010
# Abstract
1111

12-
This specification defines PRIVATE1, a conversation protocol for establishing secure, full-duplex encrypted communication channels between two participants. PRIVATE1 provides end-to-end encryption with forward secrecy and post-compromise security using the DoubleRatchet algorithm, combined with reliable message delivery via Scalable Data Sync (SDS) and efficient segmentation for transport-constrained environments.
12+
This specification defines PRIVATE1, a conversation protocol for establishing secure, full-duplex encrypted communication channels between two participants. PRIVATE1 provides end-to-end encryption with forward secrecy and post-compromise security using the Double Ratchet algorithm, combined with reliable message delivery via Scalable Data Sync (SDS) and efficient segmentation for transport-constrained environments.
1313

1414
The protocol is transport-agnostic and designed to support both direct messaging and as a foundation for group communication systems. PRIVATE1 ensures payload confidentiality, content integrity, sender privacy, and message reliability while remaining resilient to network disruptions and message reordering.
1515

@@ -24,7 +24,7 @@ However, being encrypted is merely the starting point, not the complete solution
2424

2525
# Private V1
2626

27-
PrivateV1 is a conversation type specification that establishes a full-duplex secure communication channel between two participants. It combines the Double Ratchet algorithm for encryption with Scalable Data Sync (SDS) for reliable delivery and an efficient segmentation strategy to handle transport constraints.
27+
PRIVATE1 is a conversation type specification that establishes a full-duplex secure communication channel between two participants. It combines the Double Ratchet algorithm for encryption with Scalable Data Sync (SDS) for reliable delivery and an efficient segmentation strategy to handle transport constraints.
2828

2929
PRIVATE1 provides the following properties:
3030

@@ -56,7 +56,7 @@ It also assumes that some other component is responsible for delivering the gene
5656

5757
```mermaid
5858
flowchart LR
59-
Content:::plain--> Privatev1 --> Payload:::plain
59+
Content:::plain--> PrivateV1 --> Payload:::plain
6060
classDef plain fill:none,stroke:transparent;
6161
```
6262
### Content
@@ -68,9 +68,9 @@ Applications provide content as encoded bytes, which is then packaged into paylo
6868
Content MUST be smaller than `255 * max_seg_size`
6969
due to segmentation protocol limitations.
7070

71-
**Agnostic**
71+
**Structure**
7272

73-
The protocol treats the contents as a arbitrary sequence of bytes and is agnostic to its contents.
73+
The protocol treats the contents as an arbitrary sequence of bytes and is agnostic to its contents.
7474

7575
### Payload Delivery
7676
How payloads are sent and received by clients is deliberately not specified by this protocol.
@@ -81,7 +81,7 @@ Confidentiality, integrity, and forward secrecy are provided regardless of how p
8181
However, transport choice may affect other properties and characteristics.
8282

8383
**Recipient Privacy:**
84-
The routing/addressing layer may leak sensitive metadata including the recipients identity. The payloads generated by this protocol do not reveal the participants of a conversation, however the overall privacy properties are determined by the delivery mechanism used to transport payloads.
84+
The routing/addressing layer may leak sensitive metadata including the recipient's identity. The payloads generated by this protocol do not reveal the participants of a conversation, however the overall privacy properties are determined by the delivery mechanism used to transport payloads.
8585

8686
**Reliability Performance**
8787
While PRIVATE1 handles message losses, more reliable transports reduce retransmission overhead.
@@ -106,7 +106,7 @@ PRIVATE1 requires a unique identifier, however the exact derivation is left to i
106106

107107
Additionally implementations MUST determine the following constants:
108108
- `max_seg_size` - maximum segmentation size to be used.
109-
- `max_skip` - number of keys which can be skipped per session. Values are determined by
109+
- `max_skip` - number of keys which can be skipped per session.
110110

111111
## Value Derivations
112112

@@ -196,7 +196,7 @@ The following mappings connect PRIVATE1 concepts to SDS fields:
196196
- `channel_id`: uses the `conversation_id` parameter.
197197

198198
**Sender Validation**
199-
SDS uses a `sender_id` payload field to determine whether a message was sent by the remote party. This value is sender reported and not validated which can have unknown implications if trusted in other contexts. For security hygiene Clients SHOULD drop SDS messages if `sender_id` != the sender derived from the encryption layer. !TODO: PrivateV1 is not sender aware currently
199+
SDS uses a `sender_id` payload field to determine whether a message was sent by the remote party. This value is sender reported and not validated which can have unknown implications if trusted in other contexts. For security hygiene Clients SHOULD drop SDS messages if `sender_id` != the sender derived from the encryption layer. !TODO: PRIVATE1 is not sender aware currently
200200

201201
**Bloom Filter Configuration**
202202

@@ -291,7 +291,7 @@ flowchart TD
291291

292292
### Encrypted Payload
293293
```protobuf
294-
message Doubleratchet {
294+
message DoubleRatchet {
295295
bytes dh = 1; // 32 byte publickey
296296
uint32 msgNum = 2;
297297
uint32 prevChainLen = 3;
@@ -322,7 +322,7 @@ message Message {
322322
}
323323
```
324324

325-
**content:** This field is an protobuf encoded `Segment`
325+
**content:** This field is a protobuf encoded `Segment`
326326

327327
### Segmentation
328328

@@ -345,7 +345,7 @@ message SegmentMessageProto {
345345

346346
!TODO: This should be encoded as a FrameType so it can be optional.
347347

348-
### Frame
348+
### PrivateV1Frame
349349

350350
```protobuf
351351
message PrivateV1Frame {
@@ -377,15 +377,15 @@ This means that senders SHOULD generate a new ephemeral key for `ssk` for every
377377
### Excessive Skipped Message
378378

379379
Handling of skipped message keys is not strictly defined in double ratchet.
380-
Implementations need to choose an strategy which works best for their environment, and delivery mechanism.
380+
Implementations need to choose a strategy which works best for their environment, and delivery mechanism.
381381
Halting operation of the channel is the safest, as it bounds resource utilization in the event of a DOS attack but is not always possible.
382382

383383
If eventual delivery of messages is not guaranteed, implementors should regularly delete keys that are older than a given time window.
384384
Unreliable delivery mechanisms will result in increased key storage over time, as more messages are lost with no hope of delivery.
385385

386386
## Security/Privacy Considerations
387387

388-
### Sender Deniability and Authentication**
388+
### Sender Deniability and Authentication
389389

390390
Encrypted messages do not have a cryptographically provable sender to third parties due to the deniability property of the Double Ratchet algorithm.
391391
However, participants in a conversation can authenticate each other through the shared cryptographic state.
@@ -400,3 +400,18 @@ Without proper authentication during initialization, an adversary could perform
400400
Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
401401

402402

403+
## References
404+
- **[DOUBLERATCHET]** "The Double Ratchet Algorithm", Signal, 2016.
405+
https://signal.org/docs/specifications/doubleratchet/
406+
407+
- **[SDS]** "Scalable Data Sync Specification", vac, 2024.
408+
https://github.com/vacp2p/rfc-index/blob/main/vac/raw/sds.md
409+
410+
- **[SEGMENTATION]** "Message Segmentation Specification", Waku, 2024.
411+
https://github.com/waku-org/specs/blob/main/standards/application/segmentation.md
412+
413+
- **[CONTENTFRAME]** "ContentFrame Specification", Waku, 2024.
414+
https://github.com/waku-org/specs/blob/main/standards/application/contentframe.md
415+
416+
- **[CHAT-DEFINITIONS]** "Chat Definitions Specification", Waku, 2024.
417+
https://github.com/waku-org/specs/blob/main/informational/chatdefs.md

0 commit comments

Comments
 (0)