aboutsummaryrefslogtreecommitdiffstats
path: root/CLAUDE.md
diff options
context:
space:
mode:
authorChristophe Besson <cbesson@gmail.com>2026-09-03 14:09:18 +0200
committerChristophe Besson <cbesson@gmail.com>2026-09-03 15:34:33 +0200
commit15087b0e8fdb872602310119f14680aaa443fd93 (patch)
treee04e37005b75593d8f23f7e0ef571f4947202027 /CLAUDE.md
parent4d7581b23b560a2a6803cae2df91f90368c01b21 (diff)
downloadmeshbay-15087b0e8fdb872602310119f14680aaa443fd93.tar.gz
docs: Windows port audit and sender key distribution decision
Add docs/WINDOWS-PORT.md with the full portability audit (what is already portable, what blocks, implementation plan W1-W7). Reverse structural decision 20: sender keys are distributed GEK-wrapped, not pairwise to identity keys. The GEK is the group secret; files and chat share the same access boundary. Per-device chains (15.0b) remain required for correctness. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'CLAUDE.md')
-rw-r--r--CLAUDE.md10
1 files changed, 7 insertions, 3 deletions
diff --git a/CLAUDE.md b/CLAUDE.md
index 0197d1e..0292a82 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -675,9 +675,13 @@ anything that assumes one key per person.
gathering, one ISP validated. **ICE/STUN (WebRTC) is the traversal path**, for native
clients too (via `aiortc` in Python)
- Argon2id 256 MB was applied to the **hub only**; `crypto.py` keystore is still 64 MB
-- Sender keys must be distributed **pairwise to identity keys**, never GEK-derived โ€” and
- **per device, never per person** (2026-08-17). Two devices sharing one sending chain
- both advance it, producing key/nonce reuse: that is C1 again, one level down.
+- ~~Sender keys must be distributed pairwise to identity keys, never GEK-derived.~~
+ **Reversed 2026-09-03:** sender keys are distributed **GEK-wrapped**. The GEK is the
+ group secret; files and chat share the same access boundary. Pairwise distribution
+ added complexity for a separation (files vs chat) that has no meaning in this
+ platform's group model. Sender keys remain **per device, never per person**
+ (2026-08-17). Two devices sharing one sending chain both advance it, producing
+ key/nonce reuse: that is C1 again, one level down.
`GroupSenderKeyStore.add_sender` currently does `self._states[dist.sender_id] = ...`,
so a second device under the same `sender_id` silently overwrites the first. Revoking a
device must rotate, like revoking a member. See `docs/devel-phases-next.md` ยง15.0b