@@ -75,10 +75,12 @@ should not necessarily be taken to mean the user's file sync client.
7575Implementations that do provide a native client application SHOULD
7676perform cryptographic operations in the native client on the user's
7777devices, 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
8284node, enabling individual users to be added and removed independently.
8385The OCM Server can act as the MLS client on behalf of its users. For
8486implementations 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
143145alphabet defined in [RFC4648], Section 5) with padding omitted. A
144146decoder 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
150152identifier resolves to a set of members spanning multiple OCM servers,
@@ -158,6 +160,11 @@ of epochs in which each epoch depends on its predecessor."
158160shared cryptographic state with other clients, defined by the
159161cryptographic keys it holds. In this protocol an OCM Server can fulfill
160162this 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
162169members 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.
205212The AS role is fulfilled by each user's home OCM server. Credentials in
206213this protocol are MLS basic credentials ([RFC9420] Section 5.3) whose
207214identity 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
215225A basic credential carries no verifiable binding of its own; the binding
216226between 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`
246256endpoint 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+
249263Commits are constructed and signed by admin clients, but only the Commit
250264accepted by the Group Owner Server takes effect; competing Commits for
251265the 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
278292protocol carry wrapped file keys ({{key-distribution}}) and per-server
279293transport 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
288314definition 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
421447In native client deployments, the user's device generates KeyPackages
422448and 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
425454Each KeyPackage contains an MLS Credential identifying the user by their
426455OCM 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
525554proposal only, and the resigning admin's own client MAY commit it.
526555Removing an admin's membership is constrained by MLS : a Commit that
527556removes 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
576603an admin client, and MUST NOT change `group_ocm_address`.
577604
578605The 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
582608GroupContextExtensions proposal deleting that admin from `admins`, and
583609the Group Owner Server and all Member Servers MUST reject a Commit that
584610would 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.
6206462. 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.
6276533. 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.
6316574. 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.
6386645. 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
644670Since an unavailable arbiter only pauses membership changes, while
645671sharing, 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
658684objects ([RFC9420] Section 6.3). Handshake messages are sent in the
659685clear 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
662688shares to local users, and verify that Commits are signed by admin
663689clients; in native client deployments those servers do not hold the
664690group'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
9209461. 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.
9239512. 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.
9289573. 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.
9339624. 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}}.
9389685. 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
942972A single Commit recovers all of the drifted server's users at once.
943973Until 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.
107711072. 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.
108011113. Derives the current Group Key from the user's local MLS state.
108111124. Wraps FK using the wrap AEAD :
10821113
@@ -1110,7 +1141,7 @@ SHOULD use a chunked AEAD construction to enable streaming decryption.
11101141
111111425. 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
16481679hold key material. Implementations SHOULD move toward native client
16491680deployments 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
16521691revocation on member removal, independent of trust assumptions, and
16531692SHOULD also be performed periodically or when key compromise is
@@ -1930,6 +1969,11 @@ Cloud
19301969Mesh](https://datatracker.ietf.org/doc/draft-ietf-ocm-open-cloud-mesh/)",
19311970Work 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
19341978Requirement Levels](https://datatracker.ietf.org/doc/html/rfc2119)",
19351979March 1997.
0 commit comments