roadmap: add MLS (RFC 9420) for E2E group call encryption
- FC-P5-T5 added to task plan with full design notes - OpenMLS/TreeKEM approach: O(log n) key rotation, forward secrecy - Current group calls marked as transport-encrypted only (QUIC) - UI warning shown when starting group call - Updated completed task statuses (read receipts, wrapping, tab complete) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1724,6 +1724,7 @@ async function startGroupCall() {
|
||||
}).catch(() => {});
|
||||
|
||||
addSys('Group call started in #' + gname + ' \u2014 waiting for others to join');
|
||||
addSys('\u{26A0}\u{FE0F} Group calls are transport-encrypted (QUIC), not E2E encrypted');
|
||||
await joinGroupCallAudio();
|
||||
}
|
||||
|
||||
|
||||
@@ -134,7 +134,7 @@
|
||||
|
||||
## FC-P5: Major Features
|
||||
|
||||
**Goal:** Core differentiators — physical delivery, federation, identity provider.
|
||||
**Goal:** Core differentiators — physical delivery, federation, identity provider, E2E group calls.
|
||||
|
||||
| ID | Task | Effort | Dep | Status |
|
||||
|----|------|--------|-----|--------|
|
||||
@@ -142,6 +142,28 @@
|
||||
| FC-P5-T2 | DNS federation (server discovery + relay) | 2-3w | P4-T2 | TODO |
|
||||
| FC-P5-T3 | OIDC identity provider | 1-2w | P1-T1 | TODO |
|
||||
| FC-P5-T4 | Smart contract access control | 3-4w | P5-T3 | TODO |
|
||||
| FC-P5-T5 | MLS group call E2E encryption (RFC 9420) | 4-6w | — | TODO |
|
||||
|
||||
### FC-P5-T5: MLS for Group Call E2E (RFC 9420)
|
||||
|
||||
**Current state:** Group calls use transport encryption only (QUIC). Audio is encrypted on the wire but the WZP relay can see it. Direct 1:1 calls are E2E encrypted via existing Double Ratchet.
|
||||
|
||||
**Goal:** E2E encrypt group call audio using MLS (Messaging Layer Security, RFC 9420).
|
||||
|
||||
**Why MLS over alternatives:**
|
||||
- **Sender Keys** (Signal/WhatsApp): simpler but O(n) key distribution, no forward secrecy on member change
|
||||
- **MLS/TreeKEM**: O(log n) key updates, forward secrecy on every member change, designed for groups
|
||||
- **RFC 9420** is an IETF standard with multiple implementations (OpenMLS in Rust)
|
||||
|
||||
**Approach:**
|
||||
1. Integrate `openmls` crate for key agreement
|
||||
2. Each group call creates an MLS group (epoch 0)
|
||||
3. Members join via Welcome messages distributed through existing E2E channels
|
||||
4. Audio frames encrypted with the group's current epoch key (AES-GCM)
|
||||
5. Member leave triggers Commit + UpdatePath (O(log n) key rotation)
|
||||
6. WZP relay sees only ciphertext
|
||||
|
||||
**Dependencies:** OpenMLS crate, WASM compatibility for browser side
|
||||
|
||||
---
|
||||
|
||||
@@ -152,12 +174,12 @@
|
||||
| ID | Task | Effort | Dep | Status |
|
||||
|----|------|--------|-----|--------|
|
||||
| FC-P6-T1 | Message search (local history) | 1d | — | TODO |
|
||||
| FC-P6-T2 | Read receipts (viewport tracking) | 0.5d | — | TODO |
|
||||
| FC-P6-T2 | Read receipts (viewport tracking) | 0.5d | — | DONE (v0.0.41) |
|
||||
| FC-P6-T3 | Typing indicators | 0.5d | — | TODO |
|
||||
| FC-P6-T4 | Message reactions (emoji) | 1d | P4-T2 | TODO |
|
||||
| FC-P6-T5 | Voice messages as attachments | 1d | — | TODO |
|
||||
| FC-P6-T6 | Message wrapping for long text | 0.5d | — | TODO |
|
||||
| FC-P6-T7 | Tab completion for commands/aliases | 0.5d | — | TODO |
|
||||
| FC-P6-T6 | Message wrapping for long text | 0.5d | — | DONE (v0.0.39) |
|
||||
| FC-P6-T7 | Tab completion for commands/aliases | 0.5d | — | DONE (v0.0.39) |
|
||||
| FC-P6-T8 | File transfer progress gauge | 0.5d | — | TODO |
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user