Skip to content

Commit 92d7626

Browse files
committed
Add MLS virtual client requirement for multi device support
Also some light reformatting of some lists I found while reading
1 parent b7463d0 commit 92d7626

1 file changed

Lines changed: 98 additions & 54 deletions

File tree

IETF-OCM-MLS.md

Lines changed: 98 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,12 @@ should not necessarily be taken to mean the user's file sync client.
7575
Implementations that do provide a native client application SHOULD
7676
perform cryptographic operations in the native client on the user's
7777
devices, rather than on the server, because this provides stronger
78-
isolation of key material from the server. In either case the same MLS
79-
client model applies.
78+
isolation of key material from the server. A user participating from
79+
multiple native devices MUST do so using an MLS Virtual Client as
80+
specified in [ietf-mls-virtual-clients], with the devices acting as
81+
Emulator Clients. In either case the same MLS client model applies.
8082

81-
Each user who is a member of a federated group has their own MLS leaf
83+
Each user who is a member of a federated group has exactly one MLS leaf
8284
node, enabling individual users to be added and removed independently.
8385
The OCM Server can act as the MLS client on behalf of its users. For
8486
implementations where the primary interface is a web client, the OCM
@@ -143,8 +145,8 @@ wrapped keys, is encoded using base64url (the URL- and filename-safe
143145
alphabet defined in [RFC4648], Section 5) with padding omitted. A
144146
decoder MUST accept such a value whether or not padding is present.
145147

146-
This document uses terminology from [OCM] and [RFC9420]. Additional
147-
definitions:
148+
This document uses terminology from [OCM], [RFC9420] and
149+
[ietf-mls-virtual-clients]. Additional definitions:
148150

149151
- **Group** - A Receiving Party identified by an OCM Address whose
150152
identifier resolves to a set of members spanning multiple OCM servers,
@@ -158,6 +160,11 @@ of epochs in which each epoch depends on its predecessor."
158160
shared cryptographic state with other clients, defined by the
159161
cryptographic keys it holds. In this protocol an OCM Server can fulfill
160162
this role.
163+
- **Virtual Client** and **Emulator Client** - As defined in
164+
[ietf-mls-virtual-clients]. When a user participates from multiple
165+
devices, the user's single leaf in the federated group represents a
166+
Virtual Client and the devices are its Emulator Clients. The federated
167+
group is the Higher-level Group in that document.
161168
- **Member Server** - An OCM server with one or more users who are
162169
members of a given Group, acting as MLS client on their behalf.
163170
- **Group Owner Server** - The server currently arbitrating Commits for
@@ -205,12 +212,15 @@ describes how those roles are fulfilled by OCM.
205212
The AS role is fulfilled by each user's home OCM server. Credentials in
206213
this protocol are MLS basic credentials ([RFC9420] Section 5.3) whose
207214
identity field is the UTF-8 encoded OCM Address of the user. Each user
208-
has their own distinct signing key pair so that individual users can be
209-
identified and addressed independently within the MLS group, for example
210-
to add or remove a specific user. In web-client deployments the key
211-
pair is generated and held by the OCM Server on the user's behalf. In
212-
native client deployments the key pair is held on the user's device and
213-
the server's role is limited to publishing the user's KeyPackages.
215+
has their own distinct signing key material so that individual users can
216+
be identified and addressed independently within the MLS group, for
217+
example to add or remove a specific user. In web-client deployments the
218+
signing key material is generated and held by the OCM Server on the
219+
user's behalf. In native client deployments with one device it is held
220+
on that device. With multiple devices, signing key material is managed
221+
as specified for the Virtual Client in
222+
[ietf-mls-virtual-clients], and the server's role is limited to
223+
publishing the user's KeyPackages.
214224

215225
A basic credential carries no verifiable binding of its own; the binding
216226
between a user's OCM Address and their signature key is attested by
@@ -246,6 +256,10 @@ All MLS messages are delivered to the `<endPoint>/notifications`
246256
endpoint of each recipient server, authenticated with HTTP Signatures
247257
[RFC9421].
248258

259+
For a Virtual Client, the user's home server MUST deliver messages sent
260+
to or by the Virtual Client to all of its Emulator Clients, as required
261+
by [ietf-mls-virtual-clients] Section 5.1.
262+
249263
Commits are constructed and signed by admin clients, but only the Commit
250264
accepted by the Group Owner Server takes effect; competing Commits for
251265
the same epoch are discarded by their senders. Designating a single
@@ -278,11 +292,23 @@ shared group key. The only MLS application messages used in this
278292
protocol carry wrapped file keys ({{key-distribution}}) and per-server
279293
transport credential updates ({{credential-update}}).
280294

281-
- **At least one MLS leaf per user.** Each user who is a member of a
282-
federated group has at least one MLS leaf node, enabling individual
283-
users to be added and removed independently. In web-client deployments
284-
the OCM Server manages a single leaf node per user on their behalf. In
285-
native client deployments each user may have a leaf node per device.
295+
- **Exactly one MLS leaf per user.** Each user who is a member of a
296+
federated group has exactly one MLS leaf node, enabling individual users
297+
to be added and removed independently. In web-client deployments the
298+
OCM Server manages that leaf on the user's behalf. A user participating
299+
from multiple native devices MUST represent those devices by a single
300+
Virtual Client leaf, with the devices acting as Emulator Clients in
301+
accordance with [ietf-mls-virtual-clients]. A leaf per device, the
302+
Simple Multi-client model defined by that document, MUST NOT be used.
303+
Adding or removing a device MUST use the emulation-group management
304+
procedures in [ietf-mls-virtual-clients] Section 6, not an Add or
305+
Remove in the federated group.
306+
307+
Transitioning from a single device to multiple devices is an
308+
implementation detail that does not affect the protocol. A native
309+
client implementation is however RECOMMENDED to establish an emulation
310+
group when enrolling the user's first device and represent the user as a
311+
Virtual Client, even while that device is the only Emulator Client.
286312

287313
- **The OCM Server is a MLS client.** An OCM Server meets the MLS
288314
definition of a client. For web-client deployments this means key
@@ -420,7 +446,10 @@ Requests to this endpoint MUST be signed using HTTP Message Signatures
420446

421447
In native client deployments, the user's device generates KeyPackages
422448
and publishes them to the home server, which exposes them at the same
423-
endpoint without interpreting them.
449+
endpoint without interpreting them. For a user with multiple devices,
450+
the Emulator Clients MUST create and coordinate the Virtual Client's
451+
KeyPackages as specified in [ietf-mls-virtual-clients] Section 5.5.1
452+
before publishing them to the home server.
424453

425454
Each KeyPackage contains an MLS Credential identifying the user by their
426455
OCM Address, signed by the user's own signing key pair. Users who
@@ -525,10 +554,8 @@ the admin set while remaining a member: this is a GroupContextExtensions
525554
proposal only, and the resigning admin's own client MAY commit it.
526555
Removing an admin's membership is constrained by MLS: a Commit that
527556
removes its own committer is invalid ([RFC9420] Section 12.2). A Commit
528-
that removes some but not all of an admin's leaves MAY be committed by
529-
one of that admin's remaining clients, but a Commit that removes an
530-
admin's last leaf is necessarily committed by an admin client of a
531-
different admin.
557+
that removes an admin's single leaf is therefore necessarily committed
558+
by an admin client of a different admin.
532559

533560
### Group OCM Address and Admin Set {#admin-set}
534561

@@ -576,9 +603,8 @@ proposals MUST be explicitly approved by an admin, MUST be committed by
576603
an admin client, and MUST NOT change `group_ocm_address`.
577604

578605
The admin set and the group membership are coupled: an entry in `admins`
579-
is only meaningful while that admin has at least one leaf in the ratchet
580-
tree. A Commit after whose application an admin would no longer have
581-
any leaf in the ratchet tree MUST therefore also include a
606+
is only meaningful while that admin's leaf is in the ratchet tree. A
607+
Commit that removes an admin's leaf MUST therefore also include a
582608
GroupContextExtensions proposal deleting that admin from `admins`, and
583609
the Group Owner Server and all Member Servers MUST reject a Commit that
584610
would leave an entry in `admins` with no corresponding leaf in the tree.
@@ -619,27 +645,27 @@ Failover proceeds as follows:
619645
first admin's leaf is stale.
620646
2. Takeover: the home server of the next admin in the admin set MAY
621647
begin arbitrating Commits. The first Commit it arbitrates SHOULD
622-
cover Remove proposals evicting the stale first admin's leaves, together
623-
with the GroupContextExtensions proposal deleting them from the admin
624-
set required by {{admin-set}}, constructed by one of its own admin
625-
clients. This makes the takeover permanent through the normal
626-
succession rule.
648+
cover a Remove proposal evicting the stale first admin's leaf,
649+
together with the GroupContextExtensions proposal deleting that
650+
admin from the admin set as required by {{admin-set}}, constructed
651+
by one of its own admin clients. This makes the takeover permanent
652+
through the normal succession rule.
627653
3. Conflict resolution: if a Member Server receives two different
628654
Commits for the same epoch from two arbiters, it MUST process the
629-
one arbitrated by the server of the admin listed earlier in the admin
630-
set and discard the other.
655+
one arbitrated by the server of the admin listed earlier in the
656+
admin set and discard the other.
631657
4. Hold-back: a Member Server that has observed the trigger conditions
632658
of step 1 SHOULD retain the previous epoch's group state when
633-
processing a Commit, so that it can revert and reprocess the winning
634-
Commit if conflict resolution later discards the one it processed first.
635-
Retained state MUST be deleted after a bounded time, per [RFC9420]
636-
Section 14; the security trade-off is discussed in Security
637-
Considerations.
659+
processing a Commit, so that it can revert and reprocess the
660+
winning Commit if conflict resolution later discards the one it
661+
processed first. Retained state MUST be deleted after a bounded
662+
time, per [RFC9420] Section 14; the security trade-off is discussed
663+
in Security Considerations.
638664
5. Rejoin: a Member Server that processed a discarded Commit and no
639665
longer holds the state needed to reprocess the winning Commit has
640-
drifted from the group. It recovers through the rejoin procedure
641-
({{rejoin}}). Wrapped FKs are re-wrapped and redistributed by their
642-
sending servers in the new epoch as usual ({{fk-rewrap}}).
666+
drifted from the group. It recovers through the rejoin procedure
667+
({{rejoin}}). Wrapped FKs are re-wrapped and redistributed by
668+
their sending servers in the new epoch as usual ({{fk-rewrap}}).
643669

644670
Since an unavailable arbiter only pauses membership changes, while
645671
sharing, resource access, and FK distribution continue to operate, the
@@ -657,8 +683,8 @@ Proposals and Commits MUST be encoded as PublicMessage objects
657683
([RFC9420] Section 6.2), and Application Messages as PrivateMessage
658684
objects ([RFC9420] Section 6.3). Handshake messages are sent in the
659685
clear at the MLS layer because the servers that route and arbitrate them
660-
are required to track the public group state - the ratchet tree and
661-
GroupContext - in order to derive membership for share routing, resolve
686+
are required to track the public group state, i.e the ratchet tree and
687+
GroupContext, in order to derive membership for share routing, resolve
662688
shares to local users, and verify that Commits are signed by admin
663689
clients; in native client deployments those servers do not hold the
664690
group's secrets. A recipient that holds the group's secrets MUST verify
@@ -919,25 +945,29 @@ Recovery is mediated by an admin client through the normal Commit path:
919945

920946
1. The drifted server discards its MLS state for the group and
921947
generates a fresh KeyPackage for each of its users who are members
922-
of the group.
948+
of the group. A KeyPackage for a Virtual Client MUST be generated
949+
and coordinated as specified in [ietf-mls-virtual-clients]
950+
Section 5.5.1.
923951
2. It sends an `MLS_REJOIN` notification carrying those KeyPackages to
924952
the home server of every admin. The notification is authenticated
925-
at the OCM layer with HTTP Signatures [RFC9421], the same trust anchor
926-
that authenticates KeyPackage distribution itself, so a rejoin request
927-
is exactly as trustworthy as a freshly fetched KeyPackage.
953+
at the OCM layer with HTTP Signatures [RFC9421], the same trust
954+
anchor that authenticates KeyPackage distribution itself, so a
955+
rejoin request is exactly as trustworthy as a freshly fetched
956+
KeyPackage.
928957
3. An admin client verifies that each KeyPackage's credential carries
929958
the OCM Address of a leaf currently in the ratchet tree, and that
930-
the notification was signed by the server named in those OCM Addresses.
931-
A rejoin MUST NOT admit a user without a leaf in the tree; it can only
932-
replace existing members.
959+
the notification was signed by the server named in those OCM
960+
Addresses. A rejoin MUST NOT admit a user without a leaf in the
961+
tree; it can only replace existing members.
933962
4. The admin client constructs a single Commit containing, by value, a
934963
Remove proposal for each stale leaf and an Add proposal for the
935-
corresponding fresh KeyPackage. This rejoin pair preserves the OCM
936-
Address of every affected leaf and grants no new party access, so admin
937-
clients SHOULD commit it automatically, per the policy in {{admins}}.
964+
corresponding fresh KeyPackage. This rejoin pair preserves the OCM
965+
Address of every affected leaf and grants no new party access, so
966+
admin clients SHOULD commit it automatically, per the policy in
967+
{{admins}}.
938968
5. The Commit is arbitrated and broadcast as usual, and the drifted
939969
server receives one `MLS_WELCOME` per re-added user, restoring clean
940-
state from the Welcome's `ratchet_tree` extension.
970+
state from the Welcome's `ratchet_tree` extension.
941971

942972
A single Commit recovers all of the drifted server's users at once.
943973
Until the rejoin completes, the drifted server can continue to serve
@@ -1076,7 +1106,8 @@ acts on behalf of a user who is a member of that group:
10761106
whose length is the key length of that algorithm.
10771107
2. Encrypts the resource with FK using the content AEAD.
10781108
Implementations supporting native client decryption of large files
1079-
SHOULD use a chunked AEAD construction to enable streaming decryption.
1109+
SHOULD use a chunked AEAD construction to enable streaming
1110+
decryption.
10801111
3. Derives the current Group Key from the user's local MLS state.
10811112
4. Wraps FK using the wrap AEAD:
10821113

@@ -1110,7 +1141,7 @@ SHOULD use a chunked AEAD construction to enable streaming decryption.
11101141

11111142
5. Sends an `MLS_APPLICATION` notification directly to all current
11121143
Member Servers, carrying the wrapped FK keyed by `(resourceId,
1113-
groupId)`.
1144+
groupId)`.
11141145

11151146
## FK Re-wrap on Epoch Change {#fk-rewrap}
11161147

@@ -1648,6 +1679,14 @@ client deployments provide stronger isolation, as the server does not
16481679
hold key material. Implementations SHOULD move toward native client
16491680
deployments over time.
16501681

1682+
**Virtual Clients.** All Emulator Clients of a Virtual Client hold the
1683+
secret state needed to act as that Virtual Client. Compromise of one
1684+
device therefore compromises the Virtual Client, and the devices must
1685+
fully trust one another. Implementations MUST follow the onboarding,
1686+
removal, state-transfer, key-deletion, nonce-protection, and ratchet
1687+
coordination requirements and security considerations of
1688+
[ietf-mls-virtual-clients].
1689+
16511690
**FK rotation vs key-reuse.** FK rotation provides cryptographic access
16521691
revocation on member removal, independent of trust assumptions, and
16531692
SHOULD also be performed periodically or when key compromise is
@@ -1930,6 +1969,11 @@ Cloud
19301969
Mesh](https://datatracker.ietf.org/doc/draft-ietf-ocm-open-cloud-mesh/)",
19311970
Work in Progress, Internet-Draft.
19321971

1972+
[ietf-mls-virtual-clients] Alwen, J., Kohbrok, K., McMillion, B.,
1973+
Mularczyk, M. and Robert, R. "[MLS Virtual
1974+
Clients](https://datatracker.ietf.org/doc/html/draft-ietf-mls-virtual-clients-01)",
1975+
Work in Progress, Internet-Draft, draft-ietf-mls-virtual-clients-01.
1976+
19331977
[RFC2119] Bradner, S. "[Key words for use in RFCs to Indicate
19341978
Requirement Levels](https://datatracker.ietf.org/doc/html/rfc2119)",
19351979
March 1997.

0 commit comments

Comments
 (0)