<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.2.11) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-nordin-ocm-mls-federated-groups-02" category="std" consensus="true" submissionType="IETF">
  <front>
    <title abbrev="OCM MLS Federated Groups">Federated Groups in Open Cloud Mesh using Messaging Layer Security</title>

    <author initials="M." surname="Nordin" fullname="Micke Nordin">
      <organization>SUNET</organization>
      <address>
        <email>kano@sunet.se</email>
        <uri>https://code.smolnet.org/micke</uri>
      </address>
    </author>
    <author initials="G." surname="Lo Presti" fullname="Giuseppe Lo Presti">
      <organization>CERN</organization>
      <address>
        <email>giuseppe.lopresti@cern.ch</email>
        <uri>https://cern.ch/lopresti</uri>
      </address>
    </author>
    <author initials="M." surname="Baghbani" fullname="Mahdi Baghbani">
      <organization>Ponder Source</organization>
      <address>
        <email>mahdi@pondersource.org</email>
        <uri>https://pondersource.com</uri>
      </address>
    </author>

    <date year="2026" month="September" day="01"/>

    <area>Applications and Real-Time</area>
    
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 34?>

<t>This document defines an extension to the Open Cloud Mesh (OCM) protocol
to support federated groups as Receiving Parties of shares.  This is
achieved using the Messaging Layer Security (MLS) protocol (RFC 9420) as
a group management layer.  MLS is used for establishing and rotating a
shared group key across federated group members, as well as for
maintaining group state.  This gives not only a way of federating group
membership, but also a standardized way of distributing encryption keys
in a cryptographically secure way, so that files shared with a group can
optionally be encrypted and decrypted.  MLS usage in OCM acts as a
vehicle for group management that gives users optional encryption
capabilities for resources shared with federated groups.</t>



    </abstract>



  </front>

  <middle>


<?line 48?>

<section anchor="introduction"><name>Introduction</name>

<t>Open Cloud Mesh [OCM] currently supports sharing resources with
individual users across federated servers and with groups on a single
server.  This document defines a new <spanx style="verb">shareType</spanx>, <spanx style="verb">"federation"</spanx>, and
registers it in the "OCM Share Types" registry defined by [OCM].  A
<spanx style="verb">"federation"</spanx> share is addressed to a federated group identified by an
OCM Address such as <spanx style="verb">research-group@receiver.example.org</spanx> whose
membership spans multiple OCM servers, with group state managed through
the MLS [RFC9420] epoch mechanism.</t>

<t>In many Enterprise File Sync and Share (EFSS) systems, which constitute
the vast majority of all OCM Servers, there is a tight coupling between
a client and a server, because the server offers a built-in web
interface as its primary client.  In addition to this, a sync client is
often offered as a way of syncing files between the EFSS system and the
user's devices.</t>

<t>In MLS, a client is defined as an agent that establishes shared
cryptographic state with other clients, defined by the cryptographic
keys it holds.  An EFSS server meets this definition directly.  For
deployments where the primary user interface is a web client, the OCM
Server fulfils the MLS client role server-side, holding key material on
behalf of its users, and the word "client" as used in this document
should not necessarily be taken to mean the user's file sync client.
Implementations that do provide a native client application SHOULD
perform cryptographic operations in the native client on the user's
devices, rather than on the server, because this provides stronger
isolation of key material from the server.  A user participating from
multiple native devices MUST do so using an MLS Virtual Client as
specified in [ietf-mls-virtual-clients], with the devices acting as
Emulator Clients.  In either case the same MLS client model applies.</t>

<t>Each user who is a member of a federated group has exactly one MLS leaf
node, enabling individual users to be added and removed independently.
The OCM Server can act as the MLS client on behalf of its users.  For
implementations where the primary interface is a web client, the OCM
Server holds and uses key material server-side.  Implementations with a
native client application SHOULD perform cryptographic operations in the
native client, with the server acting as a relay for MLS messages.</t>

<t>Throughout this document, actions described as being performed by an OCM
server are understood to be performed by that server in its capacity as
an MLS client, on behalf of one of its users.  The server holds no group
membership or cryptographic state independent of its users.</t>

<t>The group and its membership exist and evolve independently of any
sharing activity.  A user that wants to share a resource with a group
can do so without the need to know the current membership details of
that group.  The MLS Delivery Service role is distributed: proposals are
delivered to the home servers of all admins, the Group Owner Server
arbitrates Commits, and File Key (FK) distribution messages are sent
directly from sending servers to member servers, just like OCM share
notifications.  Group membership changes are managed entirely through
MLS group lifecycle operations.</t>

<t>Every group has one or more admins: users who administer the group.  The
user who creates a group is its first admin.  Adding a member, or
removing a member other than oneself, requires the approval of an admin,
placing a human in the loop for changes that grant or revoke access.
Any member can remove themselves from a group without admin approval,
though the Commit is still performed by an admin client.  All Commits
that advance the MLS epoch are constructed by the MLS clients of admins
and arbitrated by the Group Owner Server.</t>

<t>The group's OCM Address is a stable label.  It is minted under the
domain of the server where the group was created, which guarantees its
uniqueness, but it carries no routing semantics: all protocol messages
are routed using the OCM Addresses of individual members and admins,
never the group's.</t>

<t>Files shared with a group can optionally be encrypted with a per-file
key (FK), wrapped with the current group key.  The group key is derived
from the MLS epoch secret and rotates with every epoch transition.  On
every epoch transition the sending server re-wraps the FK under the new
group key and redistributes it, so that the current group key is always
sufficient to unwrap the current FK.  When a member is added to a group,
their MLS client receives the new group key and the re-wrapped FKs, and
can immediately decrypt all resources shared with the group.</t>

<t>When a member is removed from the group, sending servers MAY
additionally generate a new FK and re-encrypt affected resources,
depending on their policy and the nature of the shared data.</t>

</section>
<section anchor="terminology"><name>Terminology</name>

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in BCP 14
[RFC2119] [RFC8174] when, and only when, they appear in all capitals, as
shown here.</t>

<t>Unless stated otherwise, every base64 encoded value this document,
including MLS wire-format messages, KeyPackages, <spanx style="verb">group_id</spanx> values, and
wrapped keys, is encoded using base64url (the URL- and filename-safe
alphabet defined in [RFC4648], Section 5) with padding omitted.  A
decoder MUST accept such a value whether or not padding is present.</t>

<t>This document uses terminology from [OCM], [RFC9420] and
[ietf-mls-virtual-clients].  Additional definitions:</t>

<t><list style="symbols">
  <t><strong>Group</strong> - A Receiving Party identified by an OCM Address whose
identifier resolves to a set of members spanning multiple OCM servers,
with group state managed through MLS.  The Group's OCM Address is a
stable label assigned at creation and MUST NOT change for the lifetime
of the Group; it carries no routing semantics.  In [RFC9420] a group is
defined as: "a logical collection of clients that share a common secret
value at any given time.  Its state is represented as a linear sequence
of epochs in which each epoch depends on its predecessor."</t>
  <t><strong>MLS Client</strong> - As defined in [RFC9420]: an agent that establishes
shared cryptographic state with other clients, defined by the
cryptographic keys it holds.  In this protocol an OCM Server can fulfill
this role.</t>
  <t><strong>Virtual Client</strong> and <strong>Emulator Client</strong> - As defined in
[ietf-mls-virtual-clients].  When a user participates from multiple
devices, the user's single leaf in the federated group represents a
Virtual Client and the devices are its Emulator Clients.  The federated
group is the Higher-level Group in that document.</t>
  <t><strong>Member Server</strong> - An OCM server with one or more users who are
members of a given Group, acting as MLS client on their behalf.</t>
  <t><strong>Group Owner Server</strong> - The server currently arbitrating Commits for
the Group: the home server of the first Admin in the admin set.
Initially this is the server at which the Group was created.</t>
  <t><strong>Admin</strong> - A user who administers the Group membership.  The user who
creates a Group is its first Admin.  Only the MLS clients of Admins
(admin clients) construct Commits.  The admin set is part of the group
state (<xref target="admin-set"/>).</t>
  <t><strong>Admin Server</strong> - The home server of an Admin.  Admin Servers
collectively queue proposals for the Group.</t>
  <t><strong>Group Key</strong> - A symmetric key derived from the current MLS epoch
secret via the MLS Exporter, with the key length of the AEAD algorithm
of the group's cipher suite.  Rotates with every epoch transition.</t>
  <t><strong>File Key (FK)</strong> - A random symmetric key used to encrypt a single
shared resource.  Wrapped with the current Group Key and distributed to
Member Servers via MLS Application Messages.  Re-wrapped under the new
Group Key on every epoch transition (<xref target="fk-rewrap"/>).  Member Servers
always store the most current wrapped FK for each resource.</t>
  <t><strong>Re-encryption mode</strong> - On member removal, the sending server
generates a new FK, re-encrypts the resource, and distributes the new
wrapped key.  Provides strong cryptographic guarantees independent of
trust assumptions.</t>
  <t><strong>Key-reuse mode</strong> - On member removal, the existing FK is kept and
only the standard re-wrap on epoch change (<xref target="fk-rewrap"/>) is performed,
without re-encrypting the resource.  Appropriate only within formally
trusted federations and where re-encryption is impractical.  Mode is not
a binary choice; sending servers can choose one mode for one epoch and
another mode for another epoch, depending on policy and other
circumstances.</t>
  <t><strong>KeyPackage</strong> - As defined in [RFC9420].  A signed object that
enables adding an MLS client to a group asynchronously.  KeyPackages
MUST be used only once, except for a designated last resort KeyPackage
([RFC9420] Section 16.8).</t>
</list></t>

</section>
<section anchor="mls-roles-in-ocm"><name>MLS Roles in OCM</name>

<t>MLS is designed to operate with two supporting services: an
Authentication Service (AS) and a Delivery Service (DS) ([RFC9420]
Section 3; see also the MLS architecture [RFC9750]).  This section
describes how those roles are fulfilled by OCM.</t>

<section anchor="authentication-service"><name>Authentication Service</name>

<t>The AS role is fulfilled by each user's home OCM server.  Credentials in
this protocol are MLS basic credentials ([RFC9420] Section 5.3) whose
identity field is the UTF-8 encoded OCM Address of the user.  Each user
has their own distinct signing key material so that individual users can
be identified and addressed independently within the MLS group, for
example to add or remove a specific user.  In web-client deployments the
signing key material is generated and held by the OCM Server on the
user's behalf.  In native client deployments with one device it is held
on that device.  With multiple devices, signing key material is managed
as specified for the Virtual Client in
[ietf-mls-virtual-clients], and the server's role is limited to
publishing the user's KeyPackages.</t>

<t>A basic credential carries no verifiable binding of its own; the binding
between a user's OCM Address and their signature key is attested by
authenticated delivery from the user's home server.  A KeyPackage
fetched over TLS from the <spanx style="verb">&lt;endPoint&gt;/mls-key-packages</spanx> endpoint of the
server named in the credential's OCM Address, with the response signed
using HTTP Signatures [RFC9421] verifying against that server's JWKS
endpoint at <spanx style="verb">/.well-known/jwks.json</spanx> [RFC7517], is considered validated
with the AS.  The full validation procedure, including how credentials
introduced later in the life of a group are validated, is specified in
<xref target="trust-and-authentication"/>.</t>

</section>
<section anchor="delivery-service"><name>Delivery Service</name>

<t>The DS role is distributed across the servers of the group rather than
centralised on a single server.  MLS places no constraints on how the DS
is arranged, as long as messages are delivered ([RFC9420] Section 3).</t>

<t><list style="symbols">
  <t>Proposal delivery: <spanx style="verb">MLS_PROPOSAL</spanx> notifications are sent to the home
server of every admin (<xref target="admins"/>), derived from the admin set and the
OCM Addresses in the ratchet tree's leaf credentials.  Admin Servers
queue proposals, deduplicated by ProposalRef ([RFC9420] Section 5.2),
and make them available to their admin clients.</t>
  <t>Commit arbitration: the Group Owner Server, the home server of the
first admin in the admin set, accepts exactly one Commit per epoch from
an admin client and broadcasts it to all Member Servers.</t>
  <t>FK distribution: <spanx style="verb">MLS_APPLICATION</spanx> messages carrying wrapped file keys
are sent directly from the sending server to all current Member Servers,
exactly like OCM share notifications; credential updates are sent to a
single Member Server (<xref target="credential-update"/>).</t>
</list></t>

<t>All MLS messages are delivered to the <spanx style="verb">&lt;endPoint&gt;/notifications</spanx>
endpoint of each recipient server, authenticated with HTTP Signatures
[RFC9421].</t>

<t>For a Virtual Client, the user's home server MUST deliver messages sent
to or by the Virtual Client to all of its Emulator Clients, as required
by [ietf-mls-virtual-clients] Section 5.1.</t>

<t>Commits are constructed and signed by admin clients, but only the Commit
accepted by the Group Owner Server takes effect; competing Commits for
the same epoch are discarded by their senders.  Designating a single
arbiter of Commits eliminates conflicting Commits for the same epoch
during normal operation, satisfying the sequencing requirement of
[RFC9420] Section 14; conflicting Commits can arise only during failover
and are then resolved deterministically (<xref target="failover"/>).  Per [RFC9420]
Section 14, generating a Commit does not modify the sender's state, so
an admin client whose Commit is rejected simply discards it and
constructs a new Commit on the new epoch.</t>

<t>OCM share notifications are sent directly from the sending server to
each Member Server.  Since sending servers must be group members, they
hold the current MLS ratchet tree after processing each <spanx style="verb">MLS_COMMIT</spanx>,
and can derive the current membership - specifically the OCM Address in
each leaf node's credential - to determine which Member Servers to
contact.  No proxying through the Group Owner Server is required for
OCM-level communication.</t>

<t>MLS is designed to protect confidentiality and integrity even against a
misbehaving DS.  No single server in this design carries the full DS
role, and no server holds key material by virtue of its DS duties; the
MLS security properties with respect to message confidentiality hold
regardless.</t>

</section>
</section>
<section anchor="how-mls-is-implemented-over-ocm"><name>How MLS is implemented over OCM</name>

<t><list style="symbols">
  <t><strong>MLS for group key management only.</strong> MLS establishes and rotates a
shared group key.  The only MLS application messages used in this
protocol carry wrapped file keys (<xref target="key-distribution"/>) and per-server
transport credential updates (<xref target="credential-update"/>).</t>
  <t><strong>Exactly one MLS leaf per user.</strong> Each user who is a member of a
federated group has exactly one MLS leaf node, enabling individual users
to be added and removed independently.  In web-client deployments the
OCM Server manages that leaf on the user's behalf.  A user participating
from multiple native devices MUST represent those devices by a single
Virtual Client leaf, with the devices acting as Emulator Clients in
accordance with [ietf-mls-virtual-clients].  A leaf per device, the
Simple Multi-client model defined by that document, MUST NOT be used.
Adding or removing a device MUST use the emulation-group management
procedures in [ietf-mls-virtual-clients] Section 6, not an Add or
Remove in the federated group.</t>
</list></t>

<t>Transitioning from a single device to multiple devices is an
implementation detail that does not affect the protocol.  A native
client implementation is however RECOMMENDED to establish an emulation
group when enrolling the user's first device and represent the user as a
Virtual Client, even while that device is the only Emulator Client.</t>

<t><list style="symbols">
  <t><strong>The OCM Server is a MLS client.</strong> An OCM Server meets the MLS
definition of a client.  For web-client deployments this means key
material is held server-side.  For native client deployments
cryptographic operations SHOULD be performed in the native client.</t>
  <t><strong>Admins approve membership changes.</strong> Every group has one or more
admins (<xref target="admins"/>).  Commits are constructed by admin clients and
arbitrated by the Group Owner Server.  Add proposals and Remove
proposals targeting another user require admin approval; any member may
remove themselves, and Update proposals are committed automatically.</t>
  <t><strong>Encryption is optional.</strong> MLS group management is useful
independently of whether encryption is used.  A federation share MAY be
unencrypted, in which case the <spanx style="verb">encryption</spanx> field is omitted from the
Share Creation Notification and the MLS layer provides only group
membership management.</t>
  <t><strong>FK re-wrap on every epoch change.</strong> After processing an <spanx style="verb">MLS_COMMIT</spanx>
for a group, a sending server MUST re-wrap the current FK of every
resource it shares with that group under the new Group Key and
distribute it via <spanx style="verb">MLS_APPLICATION</spanx> (<xref target="fk-rewrap"/>).  This maintains the
invariant that the current Group Key is always sufficient to unwrap the
current wrapped FK.</t>
  <t><strong>FK rotation on member removal.</strong> On member removal, a sending server
SHOULD additionally rotate the FK for affected resources: generate a new
FK, re-encrypt the resource, and distribute the new wrapped FK to all
groups that share those resources.  FK rotation may also be triggered by
other factors such as periodic key rotation policy or suspected key
compromise.  Member addition does not require FK rotation; the standard
re-wrap is sufficient.</t>
  <t><strong>Key-reuse mode as an alternative.</strong> Where re-encryption on removal
is impractical and where participating servers are mutually trusted
within a formal federation, a sending server MAY instead keep the
existing FK, relying on the standard per-epoch re-wrap alone.</t>
  <t><strong>Sending servers must have group members.</strong> To share a resource with
a group, the sending server must have at least one user who is a member
of that group, allowing it to work out the members to share with, and to
be able to wrap the FK for encrypted shares.  This is by design, to
mitigate spam shares and other abusive behaviour.</t>
  <t><strong>OCM messages are still just OCM messages.</strong> Proposals flow to the
servers of all admins, Commits are arbitrated by the Group Owner Server,
and FK distribution and OCM share notifications flow directly from the
sending server to each Member Server, derived from the sending server's
local view of group membership from the MLS ratchet tree.  No message is
proxied through a single central server.</t>
  <t><strong>Sending servers derive membership from the ratchet tree.</strong> Since
sending servers must have group members, they process all <spanx style="verb">MLS_COMMIT</spanx>
messages and hold the current ratchet tree.  The OCM Address in each
leaf node's credential identifies the corresponding Member Server.  The
sending server uses this to determine which Member Servers to contact
directly for share notifications and FK distribution.</t>
  <t><strong>Push-based FK distribution.</strong> Wrapped file keys are distributed via
<spanx style="verb">MLS_APPLICATION</spanx> directly from the sending server to all current Member
Servers, at share creation and after every epoch transition
(<xref target="fk-rewrap"/>).  Member Servers always hold the current wrapped FK for
each resource and use their current Group Key to unwrap it at access
time.</t>
  <t><strong>Minimal protocol surface.</strong> The <spanx style="verb">shareType: "federation"</spanx> value
already defined in the OCM specification is used without modification,
with <spanx style="verb">shareWith</spanx> carrying the group's OCM Address.  A federation share
is otherwise a standard OCM share, carrying every field REQUIRED by
[OCM] including the <spanx style="verb">protocol</spanx> object.  All new server-to-server
messages use the existing <spanx style="verb">/notifications</spanx> endpoint with new
<spanx style="verb">notificationType</spanx> values.</t>
</list></t>

</section>
<section anchor="discovery"><name>Discovery</name>

<t>A server signals support for federation shares by including
<spanx style="verb">"federation"</spanx> in the <spanx style="verb">shareTypes</spanx> array for a given resource type in
its OCM discovery document at <spanx style="verb">/.well-known/ocm</spanx>:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "enabled": true,
  "apiVersion": "1.5.0",
  "endPoint": "https://cloud.example.org/ocm",
  "provider": "Example Cloud",
  "resourceTypes": [
    {
      "name": "file",
      "shareTypes": ["user", "group", "federation"],
      "protocols": { "webdav": "/webdav/", "webdav-receive": {} }
    }
  ]
}
]]></sourcecode></figure>

<t>No additional discovery fields are introduced.  The notifications
endpoint is derived as <spanx style="verb">&lt;endPoint&gt;/notifications</spanx> per the base OCM
specification.  The KeyPackage endpoint is derived as
<spanx style="verb">&lt;endPoint&gt;/mls-key-packages</spanx>.</t>

<t>A server that advertises <spanx style="verb">"federation"</spanx> MUST be able to receive OCM
Notifications, since all MLS lifecycle messages are delivered as
notifications, and SHOULD include <spanx style="verb">"notifications"</spanx> in its
<spanx style="verb">capabilities</spanx> array.</t>

</section>
<section anchor="keypackage-distribution"><name>KeyPackage Distribution</name>

<t>Each OCM Server acting as an MLS client generates and maintains
KeyPackages for its users and exposes them at:</t>

<figure><artwork><![CDATA[
GET <endPoint>/mls-key-packages?userId={userId}
]]></artwork></figure>

<t>Response:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "userId": "alice@cloud.example.org",
  "keyPackages": [
    {
      "mediaType": "message/mls",
      "encoding": "base64url",
      "content": "<base64url-encoded MLS KeyPackage>"
    }
  ]
}
]]></sourcecode></figure>

<t>Requests to this endpoint MUST be signed using HTTP Message Signatures
[RFC9421] (<xref target="security-considerations"/>).</t>

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

<t>Each KeyPackage contains an MLS Credential identifying the user by their
OCM Address, signed by the user's own signing key pair.  Users who
require stronger isolation of key material from their server should use
a native client implementation.</t>

<t>KeyPackages MUST be one-time use, with the exception of a designated
"last resort" KeyPackage ([RFC9420] Section 16.8).  The server MUST
remove a KeyPackage after it has been delivered.  Servers SHOULD
pre-generate multiple KeyPackages per user to support concurrent group
additions, MAY designate a last resort KeyPackage per user to be
returned when all single-use KeyPackages are exhausted, and SHOULD
rate-limit KeyPackage requests, so that an attacker cannot block a
user's addition to groups by exhausting their KeyPackages.  KeyPackages
carry a leaf node lifetime, and applications MUST define a maximum total
lifetime they accept ([RFC9420] Section 7.2).</t>

<t>The <spanx style="verb">userId</spanx> fields defined in this document carry the user's full OCM
Address, not the bare identifier that [OCM] calls <spanx style="verb">userID</spanx>; the full
address is required because these messages routinely cross server
boundaries.</t>

</section>
<section anchor="group-lifecycle"><name>Group Lifecycle</name>

<t>The group lifecycle is entirely independent of other OCM lifecycles
(token-exchange, shares, invitations etc.).  Members are added and
removed through MLS group operations conveyed via the <spanx style="verb">/notifications</spanx>
endpoint.</t>

<section anchor="group-creation"><name>Group Creation</name>

<t>The creating server creates an MLS group on behalf of one of its users
and initialises leaf nodes for each of its users who are initial
members.  The creating user becomes the group's first admin
(<xref target="admins"/>), making the creating server the initial Group Owner Server.
No notifications are required for this step.  The group becomes
addressable at its OCM Address immediately upon creation.</t>

<t>The group's OCM Address is minted under the creating server's domain,
which guarantees its uniqueness, and MUST NOT change for the lifetime of
the group.  It is a label only: no protocol message is routed based on
it, and it remains valid even after the Group Owner Server role has
moved to another server.  The MLS <spanx style="verb">group_id</spanx> SHOULD be a fresh random
value, as recommended by [RFC9420] Section 11.</t>

<t>The creator selects the group's MLS cipher suite based on the
capabilities advertised in the prospective members' KeyPackages
([RFC9420] Section 11).  Implementations of this document MUST support
the mandatory-to-implement MLS cipher suite
MLS_128_DHKEMX25519_AES128GCM_SHA256_Ed25519 ([RFC9420] Section 17.1).</t>

</section>
<section anchor="admins"><name>Group Admins</name>

<t>Every group has a set of admins: users who administer the group
membership.  The user who creates the group is its first admin, and an
admin MAY appoint further admins.  Admins are ordinary group members and
MAY be homed on any Member Server.  An admin's MLS clients are referred
to as admin clients.</t>

<t>Commits MUST be constructed and signed by admin clients.  This is an
application-level policy on top of MLS, as anticipated by [RFC9420]
Section 16.11, and it is enforced at two points.  First, the Group Owner
Server MUST reject Commits submitted by any other client.  Second, every
Member Server processing an <spanx style="verb">MLS_COMMIT</spanx> MUST verify that the Commit is
signed by an admin client: a Commit is signed by the leaf indicated in
its sender field ([RFC9420] Section 6.1), and the credential at that
leaf, in the ratchet tree of the epoch in which the Commit was created,
must identify a user listed in <spanx style="verb">admins</spanx> (<xref target="admin-set"/>) as of that same
epoch.  A Commit that fails this check MUST be rejected, regardless of
which server broadcast it.  Because the admin set is part of the
GroupContext, every member performs this check locally; acceptance of a
Commit does not rely on trusting the Group Owner Server.</t>

<t>Proposals are handled according to the following policy:</t>

<t><list style="symbols">
  <t>An Add proposal, or a Remove proposal targeting a leaf that does not
belong to the proposing user, MUST be explicitly approved by an admin
before an admin client commits it, unless both are part of a rejoin pair
as described below.  This places a human in the loop for changes that
grant or revoke another party's access.</t>
  <t>A Remove proposal targeting a leaf that belongs to the proposing user
(self-removal) does not require admin approval.  Any member MAY leave a
group at any time, and admin clients SHOULD commit self-removal
proposals automatically.</t>
  <t>A rejoin pair - a Remove of a leaf together with an Add of a fresh
KeyPackage whose credential carries the same OCM Address as the removed
leaf's credential (<xref target="rejoin"/>) - is identity-preserving and grants no
new party access.  It does not require explicit admin approval, and
admin clients SHOULD commit rejoin pairs automatically.</t>
  <t>Update proposals do not require admin approval, and admin clients
SHOULD commit pending Update proposals automatically whenever they are
online.</t>
</list></t>

<t>The group MUST have at least one admin at all times.  A proposal that
would remove the last admin, including a self-removal, MUST be rejected
by the Group Owner Server until another admin has been appointed.</t>

<t>Removing an admin from the group and removing an admin from the admin
set are distinct operations; when an admin's membership ends, a single
Commit combines them (<xref target="admin-set"/>).  An admin MAY instead resign from
the admin set while remaining a member: this is a GroupContextExtensions
proposal only, and the resigning admin's own client MAY commit it.
Removing an admin's membership is constrained by MLS: a Commit that
removes its own committer is invalid ([RFC9420] Section 12.2).  A Commit
that removes an admin's single leaf is therefore necessarily committed
by an admin client of a different admin.</t>

<section anchor="admin-set"><name>Group OCM Address and Admin Set</name>

<t>The group's OCM Address and the admin set are part of the group state,
carried in a GroupContext extension <spanx style="verb">ocm_federated_group</spanx> ([RFC9420]
Section 13.4):</t>

<figure><artwork><![CDATA[
struct {
  opaque ocm_address<V>;
} Admin;

struct {
  opaque group_ocm_address<V>;
  Admin admins<V>;
} OCMFederatedGroup;
]]></artwork></figure>

<t>All addresses are UTF-8 encoded OCM Addresses.  The <spanx style="verb">group_ocm_address</spanx>
field carries the group's OCM Address and MUST NOT change for the
lifetime of the group.</t>

<t>The <spanx style="verb">admins</spanx> list is ordered by appointment: a newly appointed admin is
appended at the end, a departing admin is deleted by the same Commit
that ends their membership or admin role (see below), and the list MUST
NOT otherwise be reordered.  The home server of the first admin in the
list is the current Group Owner Server.  Succession is therefore
automatic: when the first admin leaves the group or resigns as admin,
the home server of the next admin in the list becomes the Group Owner
Server.  For example, if alice on server1 creates the group and appoints
bob on server2 and then charlie on server3, the list is (alice, bob,
charlie) and server1 is the Group Owner Server; after bob leaves it is
(alice, charlie); after alice then leaves it is (charlie,) and server3
is the Group Owner Server.</t>

<t>An admin client is any MLS client whose leaf credential identifies a
user listed in <spanx style="verb">admins</spanx>.  Because this extension is part of the
GroupContext, it is agreed upon by all members through the MLS key
schedule, every member can verify which clients are entitled to
construct Commits and which server arbitrates them, and new members
learn the group's OCM Address and admin set from the GroupInfo in their
Welcome.  Changes to the admin set are made with a
GroupContextExtensions proposal ([RFC9420] Section 12.1.7); such
proposals MUST be explicitly approved by an admin, MUST be committed by
an admin client, and MUST NOT change <spanx style="verb">group_ocm_address</spanx>.</t>

<t>The admin set and the group membership are coupled: an entry in <spanx style="verb">admins</spanx>
is only meaningful while that admin's leaf is in the ratchet tree.  A
Commit that removes an admin's leaf MUST therefore also include a
GroupContextExtensions proposal deleting that admin from <spanx style="verb">admins</spanx>, and
the Group Owner Server and all Member Servers MUST reject a Commit that
would leave an entry in <spanx style="verb">admins</spanx> with no corresponding leaf in the tree.
(A rejoin pair (<xref target="rejoin"/>) that replaces an admin's leaf does not
trigger this rule, since the admin retains a leaf after the Commit.)
Because a GroupContextExtensions proposal replaces the extension list
wholesale ([RFC9420] Section 12.1.7), the proposal carries the complete
new <spanx style="verb">OCMFederatedGroup</spanx> value, with the departing admin deleted and
<spanx style="verb">group_ocm_address</spanx> unchanged.  A GroupContextExtensions proposal whose
only change to the admin set is deleting admins whose leaves are removed
in the same Commit requires no separate admin approval; it follows the
approval status of the Remove proposals it accompanies, so that the
self-removal of an admin can still be committed automatically.</t>

<t>Clients implementing this document MUST list the <spanx style="verb">ocm_federated_group</spanx>
extension type in the <spanx style="verb">capabilities.extensions</spanx> field of their
KeyPackages, since GroupContext extensions must be supported by every
member of the group ([RFC9420] Section 13.4).</t>

</section>
</section>
<section anchor="failover"><name>Group Owner Server Failover</name>

<t>The Group Owner Server can become unavailable, leaving the group without
an arbiter and therefore unable to advance its epoch.  Leaf staleness
(<xref target="leaf-key-updates"/>) anchors the failover trigger: the absence of
committed Updates from a leaf is part of the group state that all
members observe identically.  The other trigger condition, the absence
of broadcast Commits, is necessarily observer-dependent - a server that
missed a broadcast cannot distinguish silence from loss - which is why
divergent failover decisions are tolerated and resolved
deterministically in step 3 below.</t>

<t>In addition to the update deadline, groups MUST define a takeover time
T.  T MUST be longer than the update deadline, so that the staleness of
the first admin's leaf is observable before takeover is permitted.
Failover proceeds as follows:</t>

<t><list style="numbers" type="1">
  <t>Trigger: no <spanx style="verb">MLS_COMMIT</spanx> has been broadcast for time T, and the
first admin's leaf is stale.</t>
  <t>Takeover: the home server of the next admin in the admin set MAY
begin arbitrating Commits.  The first Commit it arbitrates SHOULD
cover a Remove proposal evicting the stale first admin's leaf,
together with the GroupContextExtensions proposal deleting that
admin from the admin set as required by <xref target="admin-set"/>, constructed
by one of its own admin clients.  This makes the takeover permanent
through the normal succession rule.</t>
  <t>Conflict resolution: if a Member Server receives two different
Commits for the same epoch from two arbiters, it MUST process the
one arbitrated by the server of the admin listed earlier in the
admin set and discard the other.</t>
  <t>Hold-back: a Member Server that has observed the trigger conditions
of step 1 SHOULD retain the previous epoch's group state when
processing a Commit, so that it can revert and reprocess the
winning Commit if conflict resolution later discards the one it
processed first. Retained state MUST be deleted after a bounded
time, per [RFC9420] Section 14; the security trade-off is discussed
in Security Considerations.</t>
  <t>Rejoin: a Member Server that processed a discarded Commit and no
longer holds the state needed to reprocess the winning Commit has
drifted from the group.  It recovers through the rejoin procedure
(<xref target="rejoin"/>).  Wrapped FKs are re-wrapped and redistributed by
their sending servers in the new epoch as usual (<xref target="fk-rewrap"/>).</t>
</list></t>

<t>Since an unavailable arbiter only pauses membership changes, while
sharing, resource access, and FK distribution continue to operate, the
takeover time T MAY be generous, for example several hours.  Loose time
synchronisation between servers is sufficient and is already assumed by
MLS for leaf node lifetimes ([RFC9420] Section 7.2).</t>

</section>
<section anchor="mls-notification-types"><name>MLS Notification Types</name>

<t>All MLS group lifecycle messages are sent as OCM Notifications to
<spanx style="verb">&lt;endPoint&gt;/notifications</spanx> using HTTP POST with <spanx style="verb">Content-Type:
application/json</spanx> and HTTP Signatures [RFC9421].</t>

<t>Proposals and Commits MUST be encoded as PublicMessage objects
([RFC9420] Section 6.2), and Application Messages as PrivateMessage
objects ([RFC9420] Section 6.3).  Handshake messages are sent in the
clear at the MLS layer because the servers that route and arbitrate them
are required to track the public group state, i.e the ratchet tree and
GroupContext, in order to derive membership for share routing, resolve
shares to local users, and verify that Commits are signed by admin
clients; in native client deployments those servers do not hold the
group's secrets.  A recipient that holds the group's secrets MUST verify
the membership_tag on a PublicMessage ([RFC9420] Section 6.2); a server
relaying or arbitrating without group secrets verifies what it can,
namely the signature against the sender's leaf in its copy of the
ratchet tree and the policy checks of <xref target="admins"/>.  The confidentiality
trade-off relative to encrypted handshake messages is discussed in
Security Considerations.</t>

<t>The notification types defined in this document are group-scoped rather
than share-scoped.  [OCM] requires a <spanx style="verb">providerId</spanx> field in notifications
because the notification types it defines all refer to a Share; the MLS
notification types refer to a group instead, so this document updates
that requirement: <spanx style="verb">providerId</spanx> is REQUIRED only for notification types
that refer to a Share, and the MLS notification types omit it.  All
MLS-specific parameters are carried inside the <spanx style="verb">notification</spanx> object
that [OCM] provides for type-specific parameters.  The <spanx style="verb">mlsGroupId</spanx>
field carries the base64url-encoded MLS <spanx style="verb">group_id</spanx> as advisory routing
information, used to dispatch the message to the right group state
without parsing the MLS message; the authoritative <spanx style="verb">group_id</spanx> is the one
inside the MLS message itself, and a mismatch between the two MUST be
treated as an error.  At the OCM layer, groups are otherwise identified
by their OCM Address: in particular, the <spanx style="verb">groupId</spanx> field of the
application data carried inside <spanx style="verb">MLS_APPLICATION</spanx> messages
(<xref target="key-distribution"/>, <xref target="credential-update"/>) is the group's OCM
Address, never the MLS <spanx style="verb">group_id</spanx>.</t>

<t>Since <spanx style="verb">MLS_PROPOSAL</spanx> is delivered only to Admin Servers and never
broadcast to other Member Servers, Member Servers never observe pending
proposals.  Proposals covered by a Commit are instead redistributed
together with that Commit, as described under <spanx style="verb">MLS_COMMIT</spanx> below.  Admin
clients, as the only committers (<xref target="admins"/>), MUST satisfy all
considerations of [RFC9420] Section 12.4.</t>

<section anchor="mlswelcome"><name>MLS_WELCOME</name>

<t>Sent to a Member Server when one of its users is added to the group.
The Welcome is constructed by the admin client that created the
corresponding Commit ([RFC9420] Section 12.4.3.1) and delivered by that
admin's home server directly to the added user's server, after the Group
Owner Server has accepted the Commit.  Delivers the MLS Welcome message
for the added user, enabling the receiving MLS client to initialise its
state and derive the current Group Key.  A single <spanx style="verb">MLS_COMMIT</spanx> covering
multiple Add proposals will result in one <spanx style="verb">MLS_WELCOME</spanx> notification per
added user.</t>

<figure><sourcecode type="json"><![CDATA[
{
  "notificationType": "MLS_WELCOME",
  "senderDomain": "othercloud.example.org",
  "shareType": "federation",
  "notification": {
    "federation": {
      "mlsGroupId": "<base64url MLS group ID>",
      "userId": "bob@othercloud.example.org",
      "content": "<base64url MLS Welcome wire format>"
    }
  }
}
]]></sourcecode></figure>

<t>The Welcome message MUST include the group's ratchet tree in a
<spanx style="verb">ratchet_tree</spanx> extension ([RFC9420] Section 12.4.3.3).  By default a
Welcome carries only a hash of the tree, and this document defines no
other channel through which a newly added Member Server could obtain it.
Member Servers depend on holding the current ratchet tree, both to
derive the group membership and to process subsequent Commits.  Carrying
the tree inside the Welcome also gives it the same confidentiality
protection as the rest of the group state, as recommended by [RFC9420]
Section 12.4.3.3.</t>

<t>A Member Server processing a Welcome learns the group's OCM Address from
the <spanx style="verb">ocm_federated_group</spanx> extension in the GroupContext (<xref target="admin-set"/>).
It MUST reject a Welcome whose <spanx style="verb">group_ocm_address</spanx> is already bound to a
different MLS <spanx style="verb">group_id</spanx>, unless the Welcome reinitialises the group as
described in <xref target="reinit"/>.  This keeps the local wrapped FK store, keyed
by <spanx style="verb">(resourceId, groupId)</spanx>, unambiguous.</t>

</section>
<section anchor="mlsproposal"><name>MLS_PROPOSAL</name>

<t>Sent by a Member Server to the home server of every admin to propose a
group change (for example Add, Remove, Update, GroupContextExtensions,
or ReInit) on behalf of one of its users.  This notification is NOT
broadcast to other Member Servers.  Each Admin Server queues received
proposals, deduplicated by ProposalRef ([RFC9420] Section 5.2), for
handling by its admin clients according to the policy in <xref target="admins"/>.
Sending the proposal to all Admin Servers removes the dependency on any
single server being available and lets whichever admin is online next
act on it.</t>

<figure><sourcecode type="json"><![CDATA[
{
  "notificationType": "MLS_PROPOSAL",
  "senderDomain": "cloud.example.org",
  "shareType": "federation",
  "notification": {
    "federation": {
      "mlsGroupId": "<base64url MLS group ID>",
      "content": "<base64url MLS PublicMessage carrying the Proposal>"
    }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="mlscommit"><name>MLS_COMMIT</name>

<t>Constructed and signed by an admin client (<xref target="admins"/>) and submitted to
the Group Owner Server, which accepts at most one Commit per epoch, MUST
reject Commits submitted by non-admin clients, and broadcasts the
accepted Commit to all Member Servers to advance the group epoch.  An
admin client whose Commit is rejected discards it and MAY construct a
new Commit on the resulting epoch ([RFC9420] Section 14).  A Member
Server receiving a broadcast <spanx style="verb">MLS_COMMIT</spanx> MUST verify that the Commit is
signed by an admin client before processing it, as specified in
<xref target="admins"/>, and MUST reject it otherwise, regardless of which server
broadcast it.  Commits are ordered by the MLS epoch itself: each Commit
advances the epoch by exactly one, so Member Servers MUST process
Commits in epoch order, and a Commit arriving for an epoch later than
the next expected one indicates one or more missed Commits.  Member
Servers MUST apply the new epoch secret before sending any application
data, per [RFC9420] Section 15.2.</t>

<figure><sourcecode type="json"><![CDATA[
{
  "notificationType": "MLS_COMMIT",
  "senderDomain": "cloud.example.org",
  "shareType": "federation",
  "notification": {
    "federation": {
      "mlsGroupId": "<base64url MLS group ID>",
      "proposals": [
        "<base64url MLS PublicMessage carrying a Proposal>"
      ],
      "content": "<base64url MLS PublicMessage carrying the Commit>"
    }
  }
}
]]></sourcecode></figure>

<t>A Commit covers each proposal either by value or by reference ([RFC9420]
Section 12.4).  Proposals included by value are carried inside the
Commit itself and are necessarily proposals originated by the committing
admin client, since a by-value proposal carries no sender of its own.
Proposals received from Member Servers via <spanx style="verb">MLS_PROPOSAL</spanx> - in
particular Update proposals, which can only be applied relative to their
original sender's leaf - are covered by reference, and receiving Member
Servers need the original proposal messages in order to validate and
apply the Commit ([RFC9420] Sections 12.1 and 12.4.2).  The <spanx style="verb">proposals</spanx>
array therefore carries every proposal covered by reference, verbatim as
originally sent by their proposers, in the order in which the
corresponding references appear in the Commit.  It MUST be present
whenever the Commit covers at least one proposal by reference and MAY be
omitted otherwise.  A Member Server processing an <spanx style="verb">MLS_COMMIT</spanx> MUST
process the carried proposals before processing the Commit itself.</t>

<t>The <spanx style="verb">MLS_COMMIT</spanx> serves as the signal to all sending servers that the
epoch has advanced: each sending server then re-wraps and redistributes
the FKs of the resources it shares with the group (<xref target="fk-rewrap"/>), and
on member removal MAY additionally rotate them according to its policy
(<xref target="fk-rotation"/>).  Any Commit covering a Remove, Update, or
GroupContextExtensions proposal MUST include an UpdatePath ([RFC9420]
Section 12.4).</t>

</section>
<section anchor="mlsapplication"><name>MLS_APPLICATION</name>

<t>Sent by a sending server directly to Member Servers, derived from the
ratchet tree, to deliver updated wrapped file keys and, optionally,
updated per-server transport credentials (<xref target="credential-update"/>).  No
central relay is involved.  Messages carrying wrapped FKs are sent to
all current Member Servers; messages carrying a transport credential are
sent only to the affected Member Server.  The <spanx style="verb">content</spanx> is a
<spanx style="verb">PrivateMessage</spanx> carrying application data encrypted in the current
epoch ([RFC9420] Section 15).</t>

<figure><sourcecode type="json"><![CDATA[
{
  "notificationType": "MLS_APPLICATION",
  "senderDomain": "cloud.example.org",
  "shareType": "federation",
  "notification": {
    "federation": {
      "mlsGroupId": "<base64url MLS group ID>",
      "content": "<base64url MLS PrivateMessage wire format>"
    }
  }
}
]]></sourcecode></figure>

<t>Ordering is provided by authenticated MLS metadata rather than a
transport counter: the <spanx style="verb">PrivateMessage</spanx> carries the epoch in the clear,
and the sender's leaf and generation counter are learned upon decryption
([RFC9420] Section 6.3).  Since all FK updates for a given <spanx style="verb">(resourceId,
groupId)</spanx> originate from the resource's sending server, the <spanx style="verb">(epoch,
generation)</spanx> pair totally orders them; see <xref target="key-distribution"/>.  A
Member Server that receives an <spanx style="verb">MLS_APPLICATION</spanx> encrypted in an epoch
it has not yet entered SHOULD queue it until the corresponding
<spanx style="verb">MLS_COMMIT</spanx> has been processed.</t>

<t>Because credential-bearing messages are delivered to a single Member
Server, other Member Servers will observe a gap in the sending leaf's
generation counter on the next message they do receive.  Such gaps are
expected and MUST NOT be treated as an error; receivers ratchet forward
past skipped generations as described in [RFC9420] Section 15.3.
Deployments MUST limit the number of generations a receiver will advance
a sender ratchet in response to a single message and reject messages
beyond that limit, bounding the key derivation work a malicious sender
can trigger ([RFC9420] Section 15.3).</t>

</section>
<section anchor="mlsrejoin"><name>MLS_REJOIN</name>

<t>Sent by a drifted Member Server to the home server of every admin to
request re-admission of its users after local MLS state loss
(<xref target="rejoin"/>).  Unlike the other notification types, the content is not
an MLS message: a drifted server holds no usable MLS state, so the
request is authenticated only at the OCM layer, by the HTTP Signature of
the sending server.  Each entry in <spanx style="verb">keyPackages</spanx> carries a fresh MLS
KeyPackage for one affected user, in the same format as entries served
by the KeyPackage endpoint.</t>

<figure><sourcecode type="json"><![CDATA[
{
  "notificationType": "MLS_REJOIN",
  "senderDomain": "othercloud.example.org",
  "shareType": "federation",
  "notification": {
    "federation": {
      "mlsGroupId": "<base64url MLS group ID>",
      "keyPackages": [
        {
          "userId": "bob@othercloud.example.org",
          "mediaType": "message/mls",
          "encoding": "base64url",
          "content": "<base64url-encoded MLS KeyPackage>"
        }
      ]
    }
  }
}
]]></sourcecode></figure>

<t>Admin Servers queue rejoin requests alongside proposals and make them
available to their admin clients, which handle them as described in
<xref target="rejoin"/>.  A later rejoin request for the same group and user
supersedes an earlier one; admin clients act on the most recent request.</t>

</section>
</section>
<section anchor="leaf-key-updates"><name>Leaf Key Updates</name>

<t>To maintain post-compromise security ([RFC9420] Section 16.6), Member
Servers SHOULD periodically send <spanx style="verb">MLS_PROPOSAL</spanx> (Update) to the Admin
Servers to rotate their users' leaf keys.  Admin clients SHOULD commit
pending Update proposals automatically whenever they are online, without
user interaction; an Update only achieves post-compromise security once
it has been committed ([RFC9420] Section 16.6).</t>

<t>Groups MUST define an update deadline: the maximum time allowed between
committed Updates of a leaf.  A leaf that has not been updated within
the deadline is stale.  Members with stale leaves SHOULD be removed from
the group per [RFC9420] Section 3.2, and stale admins in particular
SHOULD be removed promptly: an admin whose clients no longer update
cannot commit, and a stale first admin additionally blocks Commit
arbitration until failover (<xref target="failover"/>).</t>

</section>
<section anchor="rejoin"><name>Rejoin After State Loss</name>

<t>A Member Server can lose its MLS state for a group: it may have
processed a Commit that was later discarded during failover conflict
resolution (<xref target="failover"/>) and already deleted the superseded epoch's
secrets per the deletion schedule ([RFC9420] Section 9.2), or its stored
state may be lost or corrupted for any other reason.  Such a server has
drifted from the group: it can no longer process Commits or decrypt
Application Messages, and because MLS messages are bound to the current
GroupContext, it cannot sign a valid Proposal with which to recover.  A
drifted server detects its condition when an <spanx style="verb">MLS_COMMIT</spanx> fails to
process against its local state, for example through a confirmation tag
mismatch, or arrives for an epoch it cannot reach after Commit
retransmission has been exhausted.</t>

<t>Recovery is mediated by an admin client through the normal Commit path:</t>

<t><list style="numbers" type="1">
  <t>The drifted server discards its MLS state for the group and
generates a fresh KeyPackage for each of its users who are members
of the group.  A KeyPackage for a Virtual Client MUST be generated
and coordinated as specified in [ietf-mls-virtual-clients]
Section 5.5.1.</t>
  <t>It sends an <spanx style="verb">MLS_REJOIN</spanx> notification carrying those KeyPackages to
the home server of every admin.  The notification is authenticated
at the OCM layer with HTTP Signatures [RFC9421], the same trust
anchor that authenticates KeyPackage distribution itself, so a
rejoin request is exactly as trustworthy as a freshly fetched
KeyPackage.</t>
  <t>An admin client verifies that each KeyPackage's credential carries
the OCM Address of a leaf currently in the ratchet tree, and that
the notification was signed by the server named in those OCM
Addresses.  A rejoin MUST NOT admit a user without a leaf in the
tree; it can only replace existing members.</t>
  <t>The admin client constructs a single Commit containing, by value, a
Remove proposal for each stale leaf and an Add proposal for the
corresponding fresh KeyPackage.  This rejoin pair preserves the OCM
Address of every affected leaf and grants no new party access, so
admin clients SHOULD commit it automatically, per the policy in
<xref target="admins"/>.</t>
  <t>The Commit is arbitrated and broadcast as usual, and the drifted
server receives one <spanx style="verb">MLS_WELCOME</spanx> per re-added user, restoring clean
state from the Welcome's <spanx style="verb">ratchet_tree</spanx> extension.</t>
</list></t>

<t>A single Commit recovers all of the drifted server's users at once.
Until the rejoin completes, the drifted server can continue to serve
resources whose wrapped FKs it received before the fork, using the Group
Key of the last epoch it processed; wrapped FKs distributed after the
fork become accessible when the re-wrap following the rejoin Commit
(<xref target="fk-rewrap"/>) arrives.</t>

</section>
<section anchor="reinit"><name>Group Reinitialisation</name>

<t>Reinitialisation ([RFC9420] Section 11.2) replaces a group with a new
MLS group with the same membership and the same OCM Address but
different parameters: a new MLS version, cipher suite, or extension set,
and necessarily a fresh MLS <spanx style="verb">group_id</spanx>.  It is the migration path for
cryptographic agility, for example moving a long-lived group to a
stronger cipher suite.</t>

<t>A ReInit proposal is a group parameter change and is handled like other
group-changing proposals: it MUST be explicitly approved by an admin and
MUST be committed by an admin client.  Per [RFC9420] Section 12.2, a
ReInit proposal is committed alone.  The <spanx style="verb">extensions</spanx> field of the
ReInit proposal MUST include an <spanx style="verb">ocm_federated_group</spanx> extension with
<spanx style="verb">group_ocm_address</spanx> unchanged; the admin set is normally carried over
unchanged.</t>

<t>After the ReInit Commit is processed, the old group MUST NOT be used to
send messages ([RFC9420] Section 12.4.2).  In particular, sending
servers MUST NOT send <spanx style="verb">MLS_APPLICATION</spanx> messages in the old group; the
per-epoch re-wrap obligation (<xref target="fk-rewrap"/>) arising from the ReInit
Commit is deferred to the new group.</t>

<t>The admin client that committed the ReInit SHOULD create the new group:
it fetches fresh KeyPackages, valid for the new version and cipher
suite, for every member of the old group, creates the new group with an
initial Commit re-admitting them, and sends each member a Welcome
carrying a PreSharedKeyID of type resumption with usage reinit, as
specified by [RFC9420] Section 11.2.  The Add proposals of this initial
Commit re-admit the old group's members and require no separate admin
approval.  If the committing admin client fails to complete this step in
reasonable time, any other admin client MAY do so instead.  If a Member
Server receives competing reinitialisation Welcomes for the same
<spanx style="verb">group_ocm_address</spanx>, it MUST accept the one whose new group was created
by the admin listed earliest in the old group's admin set and reject the
others.</t>

<t>A Member Server processing a reinitialisation Welcome MUST perform the
verifications of [RFC9420] Section 12.4.3.1 for usage reinit: the last
Commit of the old group contains the ReInit proposal, the new group's
parameters match it, and every member of the old group is a member of
the new group, where members are equivalent if their leaf credentials
carry the same OCM Address.  It MUST additionally verify that the
<spanx style="verb">group_ocm_address</spanx> of the new group equals that of the old group.  On
success it rebinds the OCM Address from the old <spanx style="verb">group_id</spanx> to the new
one; this is the only case in which that binding may change.  Because
the local wrapped FK store is keyed by the group's OCM Address, stored
entries carry over unchanged.</t>

<t>After joining the new group, a sending server MUST re-wrap the FK of
every resource it shares with the group under the new group's Group Key
and redistribute the wrapped FKs to all Member Servers, exactly as for
an epoch change (<xref target="fk-rewrap"/>).  The new group's Group Key differs from
any key of the old group both through the fresh epoch secret and through
the new <spanx style="verb">group_id</spanx> in the Exporter context, so no wrapped FK from the
old group can be unwrapped in the new one.  Until the re-wrapped FKs
arrive, Member Servers retain the old group's last Group Key under the
same retention rule as for an epoch change.  Members SHOULD retain the
resumption PSK of the old group's final epoch until the reinitialisation
has completed ([RFC9420] Section 8.6).</t>

</section>
</section>
<section anchor="encryption-model"><name>Encryption Model</name>

<section anchor="group-key-derivation"><name>Group Key Derivation</name>

<t>After processing any MLS Welcome or Commit, the MLS client MUST apply
the new epoch secret before encrypting any application data, then
derives the current Group Key:</t>

<figure><artwork><![CDATA[
group_key = MLS-Exporter("ocm-group-key", group_id_bytes, AEAD.Nk)
]]></artwork></figure>

<t><spanx style="verb">AEAD.Nk</spanx> is the length in bytes of a key for the AEAD algorithm of the
group's negotiated MLS cipher suite ([RFC9420] Section 9.1).  Deriving
the Group Key at exactly this length makes it a valid key for the wrap
AEAD (<xref target="file-key-wrapping"/>), which is the AEAD algorithm of the group's
cipher suite, for every cipher suite, including those whose AEAD takes a
16-byte key such as AES-128-GCM.</t>

<t>The MLS Exporter ([RFC9420] Section 8.5) produces application-specific
key material from the epoch secret without exposing the epoch secret
itself.  The label <spanx style="verb">"ocm-group-key"</spanx> scopes the output to this
application.  The <spanx style="verb">group_id_bytes</spanx> context, the raw MLS <spanx style="verb">group_id</spanx> of
the group, further binds the output to this specific group.  The Group
Key therefore changes with every epoch transition and cannot be derived
by any party that did not participate in that epoch.</t>

<t>Per [RFC9420] Section 8.5, the Group Key SHOULD be refreshed after each
processed Commit.  Security-sensitive values derived from the epoch
secret MUST be deleted as soon as they are consumed, per [RFC9420]
Section 9.2.</t>

<t>All MLS clients in the group independently derive the same Group Key for
a given epoch.</t>

</section>
<section anchor="resource-id"><name>Resource Id</name>

<t>The <spanx style="verb">resourceId</spanx> used in the AEAD associated data MUST be a stable
identifier for the underlying file, consistent across all groups it is
shared with.  It identifies the resource, not a particular version of
it or a specific share.  This ensures that the FK unwrapped by members
of any group correctly decrypts the same ciphertext.  The <spanx style="verb">providerId</spanx>
values in separate share notifications, for the same resource, MUST
differ, per the <spanx style="verb">providerId</spanx> definition in [OCM], but the <spanx style="verb">resourceId</spanx>
in the AEAD associated data MUST be the same.  This means that the
<spanx style="verb">providerId</spanx> MUST NOT be reused as <spanx style="verb">resourceId</spanx>.  The sending server is
responsible for maintaining this stable <spanx style="verb">resourceId</spanx> and MUST send it
in the <spanx style="verb">encryption</spanx> object of the share payload (<xref target="share-creation"/>).</t>

</section>
<section anchor="file-key-wrapping"><name>File Key Wrapping</name>

<t>Two AEAD algorithms are involved in protecting a resource, and they are
deliberately decoupled.  The content AEAD encrypts the resource itself:
it is chosen by the sending server from the AEAD algorithms defined for
HPKE ([RFC9180] Section 7.3), it is fixed for the lifetime of a
ciphertext and identical across all groups the resource is shared with,
and it is identified explicitly by the <spanx style="verb">cipher</spanx> field of the
<spanx style="verb">encryption</spanx> object (<xref target="share-creation"/>).  The wrap AEAD protects the FK
in transit: it is always the AEAD algorithm of the respective group's
MLS cipher suite, keyed with that group's Group Key, and may therefore
differ between groups that share the same resource.</t>

<t>When sharing an encrypted resource with a group, the sending MLS client
acts on behalf of a user who is a member of that group:</t>

<t><list style="numbers" type="1">
  <t>Chooses the content AEAD and generates a random per-file key (FK)
whose length is the key length of that algorithm.</t>
  <t>Encrypts the resource with FK using the content AEAD.
Implementations supporting native client decryption of large files
SHOULD use a chunked AEAD construction to enable streaming
decryption.</t>
  <t>Derives the current Group Key from the user's local MLS state.</t>
  <t>Wraps FK using the wrap AEAD:  <vspace blankLines='1'/>
    <figure><artwork><![CDATA[
wrapped_file_key = AEAD-Encrypt(
  key       = group_key,
  nonce     = random_nonce,
  plaintext = FK,
  aad       = FKWrapAAD
)
]]></artwork></figure>
  <vspace blankLines='1'/>
where the associated data is the serialisation of the following
structure, in the presentation language of [RFC9420]:  <vspace blankLines='1'/>
    <figure><artwork><![CDATA[
struct {
  opaque group_ocm_address<V>;
  opaque resource_id<V>;
} FKWrapAAD;
]]></artwork></figure>
  <vspace blankLines='1'/>
The <spanx style="verb">group_ocm_address</spanx> field is the UTF-8 encoding of the group's
OCM Address (the same value carried in the <spanx style="verb">shareWith</spanx> field of the
share notification) and <spanx style="verb">resource_id</spanx> is the UTF-8 encoding of the
<spanx style="verb">resourceId</spanx> field of the <spanx style="verb">encryption</spanx> object.  The length-prefixed
encoding makes the pair unambiguous; raw concatenation of the two
strings would allow distinct (address, identifier) pairs to produce
identical associated data.  The MLS <spanx style="verb">group_id</spanx> is NOT used in the
associated data.</t>
  <t>Sends an <spanx style="verb">MLS_APPLICATION</spanx> notification directly to all current
Member Servers, carrying the wrapped FK keyed by <spanx style="verb">(resourceId,
groupId)</spanx>.</t>
</list></t>

</section>
<section anchor="fk-rewrap"><name>FK Re-wrap on Epoch Change</name>

<t>The Group Key changes with every epoch transition, whatever the reason
for the transition: a Commit covering Add, Remove, Update, or
GroupContextExtensions proposals, or an empty Commit, all advance the
epoch.  To maintain the invariant that the current Group Key is always
sufficient to unwrap the current wrapped FK, a sending server MUST,
after processing an <spanx style="verb">MLS_COMMIT</spanx> for a group, or after joining the
successor group of a reinitialisation via its Welcome (<xref target="reinit"/>), for
every resource it shares with that group:</t>

<t><list style="numbers" type="1">
  <t>Re-wrap the resource's current FK under the new Group Key, following
the procedure in <xref target="file-key-wrapping"/>.</t>
  <t>Distribute the new wrapped FK to all current Member Servers, derived
from the new ratchet tree, via <spanx style="verb">MLS_APPLICATION</spanx>.</t>
</list></t>

<t>Note that the FK itself is unchanged by this procedure; only its
wrapping is refreshed.  Whether the FK is also rotated is a separate,
removal-triggered policy decision (<xref target="fk-rotation"/>).</t>

<t>If the Commit added one or more members, the set of Member Servers may
have grown.  The sending server MUST identify Member Servers that are
new to the group and send them the Share Creation Notifications for its
federation shares with the group, as described in <xref target="share-creation"/>, in
addition to the wrapped FKs.  A server that joins the group after a
share was created thereby receives both the share itself and a wrapped
FK it can decrypt, since the <spanx style="verb">MLS_APPLICATION</spanx> is encrypted in an epoch
in which it is a member.</t>

<t>Between processing a Commit and receiving the re-wrapped FK for a
resource, a Member Server holds a wrapped FK produced under the previous
epoch's Group Key.  To remain able to serve access requests in this
window, a Member Server SHOULD retain the previous epoch's Group Key
until it has received a strictly newer wrapped FK (<xref target="key-distribution"/>)
for every locally stored <spanx style="verb">(resourceId, groupId)</spanx> pair of that group, or
until a bounded time has elapsed, whichever comes first, and MUST delete
it at that point.  The security trade-off of this retention window is
discussed in Security Considerations.</t>

<t>The volume of <spanx style="verb">MLS_APPLICATION</spanx> traffic produced by this rule grows with
the number of shared resources and the frequency of epoch transitions;
see the batching item in Open Issues.</t>

</section>
<section anchor="key-distribution"><name>Key Distribution via MLS Application Messages</name>

<t>Wrapped file keys are distributed to Member Servers via MLS Application
Messages, <spanx style="verb">PrivateMessage</spanx> objects carrying application data ([RFC9420]
Section 15).  Wrapped FKs are distributed at share creation and
re-distributed after every epoch transition (<xref target="fk-rewrap"/>).  A sending
server MUST process the <spanx style="verb">MLS_COMMIT</spanx> and derive the new Group Key before
sending an <spanx style="verb">MLS_APPLICATION</spanx> with updated wrapped keys, per [RFC9420]
Section 15.2.</t>

<t>The <spanx style="verb">PrivateMessage</spanx> application data is a JSON object carrying the
current wrapped FK for each <spanx style="verb">(resourceId, groupId)</spanx> pair in a <spanx style="verb">keys</spanx>
array, and MAY also carry a <spanx style="verb">credentials</spanx> array (<xref target="credential-update"/>):</t>

<figure><sourcecode type="json"><![CDATA[
{
  "keys": [
    {
      "resourceId": "3a02538b-aa54-42f2-8853-a38996e211b1",
      "groupId": "research-group@receiver.example.org",
      "wrappedKey": "<base64url nonce || wrapped_file_key || tag>"
    }
  ]
}
]]></sourcecode></figure>

<t>The <spanx style="verb">groupId</spanx> field carries the group's OCM Address, matching the
<spanx style="verb">shareWith</spanx> of the corresponding share notification, and the
<spanx style="verb">resourceId</spanx> field matches the <spanx style="verb">resourceId</spanx> in the <spanx style="verb">encryption</spanx> object
of that notification.</t>

<t>The <spanx style="verb">PrivateMessage</spanx> is encrypted using the current epoch's keys, so
only current group members can decrypt it.  A just-removed member cannot
decrypt the Application Message even if they receive the notification,
as they do not hold the new epoch's key material.</t>

<t>Member Servers store the received wrapped FKs locally, keyed by
<spanx style="verb">(resourceId, groupId)</spanx>, always replacing any previous wrapped FK for
the same pair with the latest one.  "Latest" is defined by the
authenticated <spanx style="verb">(epoch, generation)</spanx> of the enclosing <spanx style="verb">PrivateMessage</spanx>,
compared lexicographically, not by arrival order: a stored wrapped FK
MUST only be replaced by one with a strictly higher <spanx style="verb">(epoch,
generation)</spanx>.  A sending server MUST send all FK updates for a given
group through a single MLS leaf within any given epoch, since generation
counters are maintained per leaf; updates from a later epoch always
supersede updates from an earlier epoch regardless of leaf.  MLS
Application Messages may be delayed or reordered in transit ([RFC9420]
Section 15.3); a Member Server that receives an out-of-order
<spanx style="verb">MLS_APPLICATION</spanx> simply ignores wrapped FKs that are not newer than
those it already holds.  At access time, the Member Server uses its
current Group Key, derived from its current MLS state for the identified
group, to unwrap the FK.</t>

</section>
<section anchor="credential-update"><name>Transport Credential Updates</name>

<t>The per-server transport credential of a share (<xref target="share-creation"/>) may
need to be rotated during the lifetime of the share.  In particular, in
native client deployments the user's device interacts directly with the
sending server and therefore holds its server's credential, so when such
a user is removed from the group, the credential of their server can no
longer be considered private to that server's remaining users.  On
removal of a member whose clients may have held a server's transport
credential, the sending server SHOULD rotate that server's credential
for every share affected.  Rotation MAY also be triggered by policy or
suspected leakage.</t>

<t>A rotated credential is delivered in an <spanx style="verb">MLS_APPLICATION</spanx> message sent
only to the affected Member Server, carrying a <spanx style="verb">credentials</spanx> array in
the application data:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "credentials": [
    {
      "providerId": "7c084226-d9a1-11e6-bf26-cec0c932ce01",
      "groupId": "research-group@receiver.example.org",
      "recipient": "othercloud.example.org",
      "sharedSecret": "<new transport credential>"
    }
  ]
}
]]></sourcecode></figure>

<t>Each entry identifies the share by its <spanx style="verb">providerId</spanx>, the group by its
OCM Address in <spanx style="verb">groupId</spanx>, and the intended Member Server by its FQDN in
<spanx style="verb">recipient</spanx>.  A Member Server MUST ignore entries whose <spanx style="verb">recipient</spanx> does
not name itself.  Upon accepting an entry, the Member Server replaces
the stored transport credential for that share; replacement follows the
same <spanx style="verb">(epoch, generation)</spanx> supersede rule as wrapped FKs
(<xref target="key-distribution"/>).  The sending server invalidates the old
credential once the rotation has been delivered.</t>

<t>Encrypting the credential update in the current epoch guarantees that
the removed member cannot read it, independent of transport protection:
they do not hold the new epoch's key material.  Confidentiality with
respect to other Member Servers, by contrast, rests on targeted
delivery: the <spanx style="verb">PrivateMessage</spanx> is decryptable by any group member that
obtains it, so delivering it to the affected server only is a routing
measure, not a cryptographic one (see Security Considerations).</t>

<t>A <spanx style="verb">keys</spanx> array and a <spanx style="verb">credentials</spanx> array MAY appear in the same
application data object when both are destined for the same single
Member Server.</t>

</section>
<section anchor="resource-access"><name>Resource Access</name>

<t>To access a resource:</t>

<t><list style="numbers" type="1">
  <t>The resource is fetched from the sending server using the standard
OCM resource access procedure ([OCM]), with the protocol details and
per-server credential from the <spanx style="verb">protocol</spanx> object of the share
notification.  For an encrypted resource, what is fetched is ciphertext.</t>
  <t>The MLS client identifies the relevant group from the <spanx style="verb">shareWith</spanx>
field of the share notification and looks up the locally stored
<spanx style="verb">wrapped_file_key</spanx> for the <spanx style="verb">(resourceId, groupId)</spanx> pair.</t>
  <t>The MLS client derives the current Group Key from its local MLS
state for that group and unwraps FK using the wrap AEAD of the
group's cipher suite.</t>
  <t>The MLS client decrypts the resource using FK and the content AEAD
named in the <spanx style="verb">cipher</spanx> field of the <spanx style="verb">encryption</spanx> object.</t>
</list></t>

<t>In web-client deployments, decryption happens server-side and the
plaintext is served to the user through whatever access protocol is in
use (WebDAV [RFC4918], SFTP, webapp, etc.).  In native client
deployments, decryption happens on the user's device and the client
interacts directly with the sending server, which serves only
ciphertext.</t>

</section>
<section anchor="resource-modification-by-member-servers"><name>Resource Modification by Member Servers</name>

<t>A common operation is for a user on a Member Server to open a shared
encrypted resource, modify it, and save it back.  The cryptographic flow
is as follows:</t>

<t><list style="numbers" type="1">
  <t>The Member Server fetches the encrypted resource from the sending
server using the standard OCM resource access procedure, with the
credential from the share's <spanx style="verb">protocol</spanx> object.</t>
  <t>The Member Server identifies the relevant group from the <spanx style="verb">shareWith</spanx>
field of the share notification, looks up the locally stored
<spanx style="verb">wrapped_file_key</spanx> for the <spanx style="verb">(resourceId, groupId)</spanx> pair, derives the
current Group Key from its local MLS state for that group, and unwraps
FK.</t>
  <t>The Member Server decrypts the resource using FK and presents the
plaintext to the user.</t>
  <t>The user modifies the resource.</t>
  <t>The Member Server re-encrypts the modified resource using the same
FK and the same content AEAD, but a fresh random nonce.  The nonce
MUST NOT be reused with the same key, as required by AEAD security.</t>
  <t>The Member Server uploads the re-encrypted resource to the sending
server.  This requires the share to grant <spanx style="verb">write</spanx> permission in its
<spanx style="verb">protocol</spanx> object.</t>
</list></t>

<t>The FK is reused across modifications of the same resource because it is
bound to the group's OCM Address and <spanx style="verb">resourceId</spanx> in the AEAD associated
data, making it specific to that resource.  No new <spanx style="verb">MLS_APPLICATION</spanx>
message is needed, as the wrapped FK in all Member Servers' local stores
remains valid for the updated ciphertext.</t>

<t>FK rotation for a resource is only necessary on member removal in
re-encryption mode (<xref target="fk-rotation"/>).</t>

</section>
<section anchor="sharing-a-resource-with-multiple-groups"><name>Sharing a Resource with Multiple Groups</name>

<t>A sending server MAY share the same encrypted resource with more than
one group.  The file is encrypted once, with a single FK and a single
content AEAD; the <spanx style="verb">cipher</spanx> field in every group's share notification
names that same algorithm.  Each group receives its own wrapped FK,
produced with that group's wrap AEAD, Group Key, and OCM Address:</t>

<figure><artwork><![CDATA[
wrapped_file_key_group1 = AEAD-Encrypt(group_key_1, nonce_1, FK,
                  FKWrapAAD(group_ocm_address_1, resource_id))
wrapped_file_key_group2 = AEAD-Encrypt(group_key_2, nonce_2, FK,
                  FKWrapAAD(group_ocm_address_2, resource_id))
]]></artwork></figure>

<t>A separate Share Creation Notification is sent to each Member Server of
each group.  A separate <spanx style="verb">MLS_APPLICATION</spanx> carrying the respective
wrapped FK is broadcast to each group's Member Servers.  Members of each
group can only unwrap the FK using their own group's Group Key and
cannot access the other group's wrapped FK or Group Key.</t>

<t>The sending server MUST maintain a mapping from each resource to all
groups it has been shared with.  This mapping is required to correctly
handle member removal in re-encryption mode, as described in the
following section.</t>

</section>
<section anchor="fk-rotation"><name>FK Rotation (RECOMMENDED)</name>

<t>FK rotation is distinct from the re-wrap performed on every epoch change
(<xref target="fk-rewrap"/>): rotation generates a new FK and re-encrypts the
resource, whereas a re-wrap only refreshes the wrapping of the existing
FK.  A sending server SHOULD rotate the FK for a resource when a member
is removed from any group that has access to it.  FK rotation may also
be triggered by other factors, such as periodic key rotation policy,
regulatory requirements, or a suspected compromise of key material.
Applications SHOULD define a policy for the frequency of FK rotation
independent of membership changes.</t>

<t>When rotating the FK for a resource, the sending server:</t>

<t><list style="numbers" type="1">
  <t>Generates a new FK for the resource.</t>
  <t>Re-encrypts the resource with the new FK.</t>
  <t>For every group that has access to the resource, wraps the new FK
using that group's current Group Key:  <vspace blankLines='1'/>
    <figure><artwork><![CDATA[
new_wrapped_file_key_groupN = AEAD-Encrypt(group_key_N, nonce_N,
      new_FK, FKWrapAAD(group_ocm_address_N, resource_id))
]]></artwork></figure>
  </t>
  <t>Broadcasts an <spanx style="verb">MLS_APPLICATION</spanx> notification carrying the respective
new wrapped FK directly to each group's Member Servers.</t>
</list></t>

<t>Distributing the new wrapped FK to all groups that share the resource is
necessary because all groups share the same ciphertext.  If only one
group received the new wrapped FK, members of other groups would hold a
wrapped FK that no longer decrypts the current ciphertext.</t>

<t>A member removed from one group but still a member of another group that
shares the same resource retains the ability to decrypt that resource
through the second group.  This is correct and intended behaviour:
access is determined by current group membership, and the user remains a
member of the second group.  The default safe rule is to rotate the FK
and redistribute to all groups on any removal event.  A sending server
MAY instead compare the unique set of users with access before and after
an epoch change, and skip FK rotation if that set is unchanged, for
example because the removed user remains a member of every other group
that has access to the same resource.  Whether this optimisation is
worth the added complexity depends on the nature of the resource and the
frequency of membership changes.</t>

<t>Member addition does not require FK rotation.  The new member receives
the current Group Key via their Welcome, and the re-wrap triggered by
the Add Commit (<xref target="fk-rewrap"/>) delivers a wrapped FK, encrypted in an
epoch in which the new member is a member, that the new member can
unwrap with that Group Key.</t>

</section>
<section anchor="member-removal-key-reuse-mode-optional"><name>Member Removal: Key-reuse Mode (OPTIONAL)</name>

<t>Where re-encryption is impractical, for example due to frequent changes
of very large files, and where all participating servers belong to a
formal federation with explicit governance and mutual trust, a sending
server MAY instead keep the existing FK.  In that case no action beyond
the standard re-wrap on epoch change (<xref target="fk-rewrap"/>) is required: the
Remove Commit advances the epoch, and the sending server re-wraps the
existing FK under the new Group Key and distributes it to the remaining
Member Servers of the affected group.</t>

<t>When a resource is shared with multiple groups, only the epoch of the
group from which the member was removed has advanced, so only that
group's FK wrapping is refreshed.  The wrapped FKs for other groups are
unchanged and remain valid for their respective members.</t>

<t>In this mode, access-follows-membership relies on trust rather than
cryptography: the FK itself is unchanged, so a removed member's server
and, in native client deployments, the removed user's devices, may still
hold the superseded Group Key together with the old wrapped FK, or the
unwrapped FK itself, any of which decrypts the unchanged ciphertext.
Key-reuse mode therefore relies on trusting servers to discard key
material they are no longer entitled to after a Remove Commit.  A
removed member who is also a member of another group that has access to
the same resource will still be able to decrypt via that group's wrapped
FK, which is the expected behaviour - they remain a member of that
group.  This assumption is appropriate within a formal federation but
SHOULD NOT be made in open or ad-hoc sharing contexts.</t>

<t>The sending server's choice of mode is its own policy decision and is
not signalled in the protocol.</t>

</section>
<section anchor="member-removal-ocm-notifications"><name>Member Removal: OCM Notifications</name>

<t>Member removal requires no OCM-level notification by itself.  Because
federation shares are addressed to the group (<xref target="share-creation"/>), each
Member Server observes the Remove Commit and re-evaluates which of its
local users the share resolves to; a removed user loses access without
any action by the sending server.  If the removed member's clients may
have held their server's transport credential, the sending server SHOULD
additionally rotate that credential (<xref target="credential-update"/>).</t>

<t>When the last member homed on a given server is removed from the group,
that server no longer has any user with access.  A well-behaved sending
server SHOULD then reconcile the OCM state of the share, revoke that
server's per-server transport credential (<xref target="share-creation"/>), and send
a <spanx style="verb">SHARE_UNSHARED</spanx> notification to the <spanx style="verb">/notifications</spanx> endpoint of that
server.</t>

</section>
</section>
<section anchor="share-creation"><name>Share Creation</name>

<t>The sending server sends one OCM Share Creation Notification directly to
each current Member Server, identified through the OCM Addresses in the
ratchet tree's leaf credentials.  This is standard OCM server-to-server
communication, with <spanx style="verb">shareWith</spanx> set to the group's OCM Address and
<spanx style="verb">shareType</spanx> set to <spanx style="verb">"federation"</spanx>.  The share is addressed to the group
as the Receiving Party; no per-user notifications are sent.</t>

<t>A federation share is a standard OCM share: every field that is REQUIRED
by [OCM], including the <spanx style="verb">protocol</spanx> object, is REQUIRED here too, and
resource access follows the standard OCM resource access procedure
driven by the <spanx style="verb">protocol</spanx> object.  For encrypted resources the protocol
endpoint serves ciphertext; the plaintext is obtained by unwrapping the
FK as described in the Encryption Model.</t>

<t>Each Member Server SHOULD be given its own <spanx style="verb">sharedSecret</spanx> (or equivalent
protocol credential) in its copy of the notification.  The credential is
per server, not per user: all users on a Member Server share it,
mirroring how the server holds MLS state on behalf of its users.
Distinct per-server credentials allow the sending server to revoke a
single server's transport access, for example when the last group member
on that server is removed, without affecting other Member Servers.
Share Creation Notifications sent to servers that join the group later
(<xref target="fk-rewrap"/>) carry credentials minted at that time, and a server's
credential can be rotated during the share's lifetime
(<xref target="credential-update"/>).</t>

<t>Share Permissions apply uniformly to the whole group: every member of
the group receives the same permissions on the resource.  A sending
server that needs different permissions for different parties should use
separate groups or individual shares.  Receiving Server criteria that
affect the share payload, such as <spanx style="verb">must-exchange-token</spanx>, are evaluated
per Member Server against that server's discovery document, exactly as
in base OCM.</t>

<t>The receiving server resolves <spanx style="verb">shareWith</spanx> against its local MLS state:
it identifies the group whose <spanx style="verb">group_ocm_address</spanx> (<xref target="admin-set"/>)
matches the <spanx style="verb">shareWith</spanx> value and delivers the share to every local user
whose leaf credential appears in that group's ratchet tree.  On every
subsequent <spanx style="verb">MLS_COMMIT</spanx> the receiving server MUST re-evaluate this
resolution, so that local users added to the group gain access to
existing federation shares, and removed users lose it, without any
further OCM notifications.</t>

<t>Addressing the share to the group also allows the receiving server to
distinguish between shares of the same resource arriving via different
groups - a user may be a member of two groups that both have access to
the same resource from the same sending server - and to correctly key
its local wrapped FK store by <spanx style="verb">(resourceId, groupId)</spanx> rather than
<spanx style="verb">resourceId</spanx> alone, where <spanx style="verb">groupId</spanx> is the group OCM Address carried in
<spanx style="verb">shareWith</spanx>, ensuring that FK updates delivered via <spanx style="verb">MLS_APPLICATION</spanx>
are applied to the correct entry.</t>

<t>Because notifications can be delayed or reordered in transit, a
federation share MAY arrive before the receiving server has processed
the Welcome or Commit that made it a Member Server of the group.  A
receiving server that does not recognise the <spanx style="verb">shareWith</spanx> value as a
known group SHOULD queue the share, or reject it in a way that causes
the sender to retry, rather than fail it permanently.  Since sending
servers only contact servers present in the ratchet tree, this condition
is transient.</t>

<t>When an <spanx style="verb">MLS_COMMIT</spanx> adds one or more members to the group, the sending
server MUST send each Member Server that is new to the group a Share
Creation Notification for every federation share it has with that group,
encrypted or not.  For encrypted resources this accompanies the
re-wrapped FK (<xref target="fk-rewrap"/>).  A server that joins the group after a
share was created thereby learns of the shares its users now have access
to without any further action by its users.</t>

<t>Each notification MAY include the optional <spanx style="verb">encryption</spanx> field:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "shareWith": "research-group@receiver.example.org",
  "resourceType": "file",
  "shareType": "federation",
  "sender": "alice@cloud.example.org",
  "owner": "alice@cloud.example.org",
  "providerId": "7c084226-d9a1-11e6-bf26-cec0c932ce01",
  "name": "experiment-data.tar",
  "protocol": {
    "name": "multi",
    "webdav": {
      "uri": "experiment-data.tar",
      "sharedSecret": "<per-Member-Server secret>",
      "permissions": ["read", "write"]
    }
  },
  "encryption": {
    "resourceId": "3a02538b-aa54-42f2-8853-a38996e211b1",
    "scheme": "ocm-mls",
    "ocm-mls": {
      "cipher": "AES-256-GCM"
    }
  }
}
]]></sourcecode></figure>

<t>The <spanx style="verb">encryption</spanx> field is OPTIONAL as per [OCM] Share Creation
Notification specification.  If absent, the resource is unencrypted.
If present, and the symmetric encryption available via OCM-MLS is to
be used, it MUST carry the encryption-related parameters according to
the [OCM] specification, where:
- <spanx style="verb">resourceId</spanx> is the stable resource identifier described in
<xref target="resource-id"/>
- <spanx style="verb">scheme</spanx> is to be set to <spanx style="verb">"ocm-mls"</spanx>
- <spanx style="verb">cipher</spanx> names the content AEAD that the resource is encrypted with
(<xref target="file-key-wrapping"/>), one of the AEAD algorithms defined for HPKE
([RFC9180] Section 7.3): <spanx style="verb">"AES-128-GCM"</spanx>, <spanx style="verb">"AES-256-GCM"</spanx>, or
<spanx style="verb">"CHACHA20-POLY1305"</spanx>.  The field signals that the FK is distributed via
the <spanx style="verb">MLS_APPLICATION</spanx> mechanism keyed by <spanx style="verb">(resourceId, groupId)</spanx>.  No
epoch information is carried in the share notification.  Member Servers
always hold the current wrapped FK for each <spanx style="verb">(resourceId, groupId)</spanx> pair
and use their current Group Key to unwrap it at access time.</t>

<t>The Group Owner Server is not involved in the delivery of OCM Share
notifications.  All other OCM notifications relating to a share, such as
share updates and share deletions, are likewise sent directly from the
sending server to each Member Server, referencing the share by its
<spanx style="verb">providerId</spanx> as in base OCM.</t>

</section>
<section anchor="trust-and-authentication"><name>Trust and Authentication</name>

<t>The Authentication Service role ([RFC9420] Section 3) is fulfilled by
each user's home OCM server: the server that publishes a user's
KeyPackages attests the binding between the user's OCM Address and their
signature key.  Because the basic credential itself carries no
verifiable binding, the attestation lies in the delivery channel.</t>

<section anchor="validation-procedure"><name>Validation procedure</name>

<t>A KeyPackage is considered validated with the AS when all of the
following hold:</t>

<t><list style="symbols">
  <t>it was fetched from the <spanx style="verb">&lt;endPoint&gt;/mls-key-packages</spanx> endpoint of the
server named in the credential's OCM Address, over TLS, with the
response signed using HTTP Signatures [RFC9421] verifying against that
server's JWKS [RFC7517];</t>
  <t>the OCM Address in the credential is identical to the <spanx style="verb">userId</spanx> the
KeyPackage was requested for, which is the OCM Address of the user the
requester intends to add; in particular, its host part names the server
the KeyPackage was fetched from; and</t>
  <t>the KeyPackage signature verifies with the <spanx style="verb">signature_key</spanx> of its
LeafNode, proving possession of the private key ([RFC9420] Section
10.1).</t>
</list></t>

<t>Requests to the KeyPackage endpoint are signed at the server level
(<xref target="security-considerations"/>), so in native client deployments the
fetch is performed by the admin's home server on the admin client's
behalf.  The home server SHOULD relay the response with its HTTP
Message Signature intact, allowing the native client to verify the
channel binding end-to-end against the target server's published JWKS;
a native client that cannot do so delegates the channel verification to
its home server and verifies the KeyPackage signature itself.</t>

<t>[RFC9420] Section 5.3.1 requires a credential to be validated whenever
it is introduced into the group.  This protocol distributes that duty to
the party that introduces the credential:</t>

<t><list style="symbols">
  <t>Add: the admin client committing an Add MUST have validated the
KeyPackage as described above.  Other members accept the new leaf on the
strength of the admin-signed Commit; they do not contact the new
member's home server.</t>
  <t>Update proposals, and Commits whose UpdatePath carries a new
credential: the successor credential MUST present the same OCM Address
as the credential it replaces, and members MUST reject the proposal or
Commit otherwise.  This is the successor-credential policy anticipated
by [RFC9420] Section 5.3.1.  Continuity of the signature key is anchored
in MLS itself: the message introducing the new leaf is signed with the
member's current key, so only the holder of the previous key can rotate
to a new one.</t>
  <t>Joining via Welcome: the joiner MUST verify the GroupInfo signature
and the integrity of the ratchet tree as required by [RFC9420] Section
12.4.3.1, and MUST verify that every leaf credential is a basic
credential carrying a well-formed OCM Address.  The joiner accepts the
bindings of those credentials transitively, on the basis that each was
validated by an admin client when it was introduced.  It MAY
additionally re-validate any leaf against the <spanx style="verb">/mls-key-packages</spanx>
endpoint of its home server, but such re-validation can fail benignly,
since published KeyPackages rotate independently of leaves already in
groups.</t>
</list></t>

<t>In this transitive model, each home server is trusted to attest only its
own users, and each admin client is trusted to have performed the
attestation check at introduction time.  The protocol does not
independently verify assertions made by a user's home server, because
that server is the Authentication Service for its users.  Compromise of
that trusted server is outside the threat model.</t>

<t>Users who require protection of their key material from their own server
should choose a native client implementation where cryptographic
operations occur on the user's device.</t>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<section anchor="threat-model"><name>Threat Model</name>

<t>The threat model follows the Internet threat model described in
[RFC3552] and inherits the trust assumptions of [OCM].  It assumes that
the OCM Servers participating in a group, including Member Servers,
Admin Servers, and the Group Owner Server, have not been compromised and
correctly enforce the protocol and their local authorization policies.
Their administrative interfaces, host operating systems, private keys,
credentials, and underlying storage are part of the trusted endpoints.
Compromise of an OCM Server or its trusted infrastructure is outside the
scope of this specification.</t>

<t>An attacker is assumed to have extensive control of the communication
channel and may observe, block, replay, insert, modify, delay, or
reorder traffic.  TLS, HTTP Message Signatures, and MLS provide the
protections described in this specification against such an attacker.</t>

<t>An attacker may control a remote user, a current or former group member,
or an OCM Server of its own.  It may send malformed messages, retain key
material it legitimately obtained while it was a member, disclose
plaintext or keys available to it, and attempt to cause inconsistent
group state or resource exhaustion.  An attacker-controlled server can
make assertions under its own identity, but must not thereby gain
authority for users outside its administrative domain or admission to a
group without the required authorization.</t>

<t>The distributed Delivery Service is not trusted to provide availability
or consistent delivery.  It can delay, drop, reorder, selectively
deliver, or partition messages and can observe metadata deliberately
exposed by this protocol.  It cannot derive group secrets or forge valid
MLS messages.  The Group Owner Server is trusted to arbitrate Commits,
but its unavailability can stall epoch transitions until failover
completes.</t>

<t>In web-client deployments, the trusted OCM Server acts as the MLS client
and holds MLS state, Group Keys, FKs, and plaintext on behalf of its
users.  Native-client deployments move that cryptographic endpoint to
the user's device.  Exposure of member key material and subsequent
recovery are considered according to the forward-secrecy and
post-compromise-security properties of [RFC9420]; full compromise of an
OCM Server remains outside scope.</t>

<t>Every current group member is an authorized recipient of the group's
cryptographic material.  MLS cannot prevent a member from retaining or
disclosing plaintext, Group Keys, or FKs that it legitimately receives.
A member with write access and the applicable FK can also create a
cryptographically valid arbitrary payload for a shared Resource.  MLS
authenticates the member performing a protocol operation; it does not
establish that the member or supplied content is benign.</t>

<t>This protocol deliberately accepts several deployment-dependent
trade-offs described below.  Encryption is optional.  Key-reuse mode
trades cryptographic revocation for operational efficiency and trust in
former Member Servers.  Temporary retention of previous or forked epoch
state weakens forward secrecy for a bounded period.  Public handshake
messages and distribution of the ratchet tree expose group membership
and membership changes to participating servers.  The protocol does not
provide protection from complete or selective denial of service.</t>

<t><strong>Virtual Clients.</strong> All Emulator Clients of a Virtual Client hold the
secret state needed to act as that Virtual Client.  Compromise of one
device therefore compromises the Virtual Client, and the devices must
fully trust one another.  Implementations MUST follow the onboarding,
removal, state-transfer, key-deletion, nonce-protection, and ratchet
coordination requirements and security considerations of
[ietf-mls-virtual-clients].</t>

<t><strong>FK rotation vs key-reuse.</strong> FK rotation provides cryptographic access
revocation on member removal, independent of trust assumptions, and
SHOULD also be performed periodically or when key compromise is
suspected.  In key-reuse mode the FK is unchanged and the ciphertext is
not re-encrypted, so revocation is not cryptographic: it relies on
trusting servers to discard all key material they are no longer entitled
to after a Remove Commit.  This includes superseded Group Keys, old
wrapped FKs, and any cached unwrapped FKs.  Key-reuse mode SHOULD only
be used within formal federations with governance agreements that
enforce this behaviour.</t>

<t><strong>Two access-control layers.</strong> For an encrypted federation share, access
is controlled at two independent layers: the per-server transport
credential in the <spanx style="verb">protocol</spanx> object gates who can fetch the ciphertext,
and the Group Key gates who can unwrap the FK and decrypt it.
Confidentiality rests on the cryptographic layer alone; the transport
credential provides defence in depth and is shared by all users on a
Member Server.  The two layers can diverge: a server whose last group
member was just removed may still hold a valid transport credential
until the sending server revokes it, which is why revocation SHOULD
accompany the <spanx style="verb">SHARE_UNSHARED</spanx> notification.  For unencrypted federation
shares the transport credential is the only access control, exactly as
in base OCM, and access-follows-membership then depends on the receiving
server re-evaluating share resolution on every Commit
(<xref target="share-creation"/>) and on the sending server revoking the credentials
of departed servers promptly.</t>

<t><strong>Credential rotation.</strong> Rotated transport credentials are delivered in
group-encrypted <spanx style="verb">MLS_APPLICATION</spanx> messages sent only to the affected
server (<xref target="credential-update"/>).  A removed member is excluded
cryptographically: it does not hold the new epoch's key material.  Other
Member Servers are excluded only by targeted delivery; a credential
message that leaks to another member server is readable by it.  Since
every Member Server already holds transport access to the same
ciphertext under its own credential, the impact of such a leak is
limited to transport-layer attribution.</t>

<t><strong>Key distribution via Application Messages.</strong> Wrapped FKs are
distributed in MLS <spanx style="verb">PrivateMessage</spanx> objects encrypted in the current
epoch.  A removed member cannot decrypt these messages as they do not
hold the new epoch's key material.  Because sending servers re-wrap and
redistribute FKs after every epoch transition (<xref target="fk-rewrap"/>), and
Member Servers always replace their locally stored wrapped FK with the
latest received, the current Group Key is always sufficient for
unwrapping once the re-wrapped FKs have arrived.</t>

<t><strong>Group Key retention window.</strong> Between processing a Commit and
receiving the re-wrapped FKs for the new epoch (<xref target="fk-rewrap"/>), a Member
Server may retain the previous epoch's Group Key in order to keep
serving access requests.  This retention extends the lifetime of the
previous epoch's Group Key and therefore weakens forward secrecy for the
duration of the window.  The window is bounded by the arrival of the
re-wrapped FKs, and Member Servers MUST delete the previous Group Key as
soon as it is no longer needed, or after a bounded time, whichever comes
first.</t>

<t><strong>Commit ordering.</strong> The Group Owner Server is the sole arbiter of
Commits, eliminating conflicting Commits for the same epoch during
normal operation.  An unavailable Group Owner Server can stall epoch
transitions, but the Delivery Service and network attackers cannot cause
the group to accept a Commit constructed by a non-admin client, because
every Member Server independently verifies the committer against the
admin set before processing a Commit (<xref target="admins"/>).  The role passes
automatically to the next admin's server when the first admin leaves the
group (<xref target="admin-set"/>), and an unavailable arbiter is eventually replaced
through failover (<xref target="failover"/>), during which conflicting Commits can
briefly exist and are resolved deterministically.</t>

<t><strong>Forked-state retention.</strong> During a detected failover window, Member
Servers retain the previous epoch's group state so that they can revert
to the winning Commit (<xref target="failover"/>).  Retaining forked state weakens
forward secrecy for its duration; [RFC9420] Section 14 requires such
state to be deleted promptly, so the retention is bounded in time and
limited to servers that have observed the failover trigger.</t>

<t><strong>Rejoin.</strong> The rejoin procedure (<xref target="rejoin"/>) lets a home server replace
its own users' leaves with fresh KeyPackages on the strength of its HTTP
Signature alone, without per-request admin approval.  The procedure
relies on the home server's existing role as the Authentication Service
for its own users and therefore introduces no additional trust
assumption.  Because admin clients verify that a rejoin only replaces
leaves whose OCM Addresses name the requesting server and that are
already present in the ratchet tree, a rejoin cannot admit a new party.</t>

<t><strong>Admin liveness and removal latency.</strong> A Remove proposal takes
cryptographic effect only when an admin client commits it.  Removing
another member additionally requires explicit admin approval, so the
revocation latency for a membership change is bounded by admin
availability.  Groups SHOULD appoint multiple admins, on multiple Member
Servers, to keep this window small and to avoid stalling group
operations when a single admin is offline.  The same bound applies to
the post-compromise security provided by Update proposals, which only
take effect once committed.</t>

<t><strong>Application message ordering.</strong> Per [RFC9420] Section 15.2, sending
servers MUST apply a new epoch secret before encrypting any application
data.  <spanx style="verb">MLS_APPLICATION</spanx> messages carrying re-wrapped keys MUST be sent
only after the sending server has processed the corresponding
<spanx style="verb">MLS_COMMIT</spanx>.</t>

<t><strong>Ordering and the DS.</strong> All ordering in this protocol derives from
MLS-authenticated metadata: Commits are ordered by the epoch they
advance, and FK updates by the <spanx style="verb">(epoch, generation)</spanx> of the enclosing
<spanx style="verb">PrivateMessage</spanx>.  No unauthenticated transport counter is relied upon.
Servers in the DS role can still delay, drop, or selectively withhold
messages, but cannot reorder them undetectably or forge them, consistent
with the MLS threat model ([RFC9420] Section 16.9).</t>

<t><strong>Reinitialisation continuity.</strong> A reinitialisation Welcome is accepted
only with a resumption PSK from the old group's final epoch and after
verification of the old group's ReInit Commit and of membership
preservation (<xref target="reinit"/>).  A party that was not a member of the old
group's final epoch cannot produce that PSK, so the binding between a
group's OCM Address and its MLS group state cannot be hijacked through a
forged reinitialisation.</t>

<t><strong>Handshake message confidentiality.</strong> Proposals and Commits are sent as
PublicMessage, so group operations are visible to the servers that
handle them.  The MLS architecture [RFC9750] recommends encrypting
handshake messages to hide membership changes and signatures from the
Delivery Service; this protocol deliberately departs from that
recommendation because the servers performing the DS role must know the
group's membership anyway: sending servers derive notification
recipients from the ratchet tree, and receiving servers resolve
federation shares to their local users.  No information is exposed to
those servers beyond what their OCM duties already require, and
transport protection (TLS and HTTP Signatures [RFC9421]) prevents
exposure to outside observers.  Application Messages, which carry key
material, are always encrypted as PrivateMessage.</t>

<t><strong>Group membership and admin enumeration.</strong> The ratchet tree contains
the OCM Address of every group member, and the GroupContext contains the
group's admin set.  This information forms part of the MLS group state
and its changes are conveyed in public handshake messages.  Every group
member and every Member Server can therefore enumerate all members and
admins of the group and observe membership and admin-set changes over
time.  This is an accepted privacy trade-off inherent to this design:
servers need the membership information to route shares and
notifications, resolve federation shares to local users, and enforce
admin policy.  Federated groups do not provide anonymous membership or
hidden administrator roles.  The information is not exposed by the
protocol to servers outside the group, although an authorized member or
Member Server can disclose it, and transport protection prevents
exposure to outside observers in transit.</t>

<t><strong>Admin set integrity.</strong> The admin set and the group's OCM Address are
carried in the GroupContext (<xref target="admin-set"/>), so they are covered by the
MLS confirmation tag and agreed upon by all members of every epoch.  A
malicious server cannot unilaterally appoint admins or seize the Group
Owner Server role; changing the admin set requires a Commit constructed
by an existing admin client.</t>

<t><strong>Post-compromise security.</strong> Member Servers SHOULD periodically rotate
their users' leaf keys via Update proposals to maintain post-compromise
security ([RFC9420] Section 16.6).  Members that do not update SHOULD
eventually be removed from the group.</t>

<t><strong>Key material deletion.</strong> Security-sensitive values MUST be deleted as
soon as they are consumed, per [RFC9420] Section 9.2.  In particular,
the exporter_secret used to derive the Group Key must not be retained
after the Group Key has been derived.</t>

<t><strong>KeyPackage reuse.</strong> KeyPackages MUST be one-time use, except for a
designated last resort KeyPackage used when a user's single-use
KeyPackages are exhausted ([RFC9420] Section 16.8).  Servers MUST remove
a KeyPackage that has been consumed, and SHOULD rate-limit KeyPackage
requests to make exhaustion attacks impractical.</t>

<t><strong>User enumeration.</strong> A server MUST only reply to HTTPS GET requests
signed using HTTP Message Signatures [RFC9421] and SHOULD implement rate
limiting and other access control methods on the <spanx style="verb">/mls-key-packages</spanx>
endpoint to avoid user enumeration.</t>

</section>
<section anchor="underlying-security-specifications"><name>Underlying Security Specifications</name>

<t>This specification relies on the base Open Cloud Mesh protocol [OCM],
the Messaging Layer Security protocol [RFC9420], HTTP Message Signatures
[RFC9421], and JSON Web Keys and JWK Sets [RFC7517].  All security
considerations in those specifications apply to implementations of this
protocol.  The security and privacy considerations of the MLS
architecture [RFC9750] also apply.</t>

<t>Implementations using Virtual Clients additionally need to follow all
security considerations of [ietf-mls-virtual-clients], as required
above.  Where this specification uses AEAD algorithms defined for HPKE,
the applicable algorithm and nonce-management considerations of
[RFC9180] apply, although this specification does not otherwise use the
HPKE construction.</t>

</section>
</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>The MLS Exporter label <spanx style="verb">"ocm-group-key"</spanx> used in the Group Key
Derivation section is to be registered in the "MLS Exporter Labels"
registry defined in [RFC9420] Section 17.8, to avoid collisions with
other applications using the MLS Exporter:</t>

<t><list style="symbols">
  <t>Label: "ocm-group-key"</t>
  <t>Recommended: N</t>
  <t>Reference: This document</t>
</list></t>

<t>The GroupContext extension <spanx style="verb">ocm_federated_group</spanx> defined in
<xref target="admin-set"/> is to be registered in the "MLS Extension Types" registry
defined in [RFC9420] Section 17.3:</t>

<t><list style="symbols">
  <t>Value: TBD</t>
  <t>Name: ocm_federated_group</t>
  <t>Message(s): GC</t>
  <t>Recommended: N</t>
  <t>Reference: This document</t>
</list></t>

<t>The following notification types are to be registered in the "OCM
Notification Types" registry defined in [OCM], within the "Open Cloud
Mesh (OCM) Parameters" group:</t>

<figure><artwork><![CDATA[
   +===================+===========+===============+
   | Notification Type | Scope     | Reference     |
   +===================+===========+===============+
   | MLS_WELCOME       | Recipient | This document |
   | MLS_PROPOSAL      | Recipient | This document |
   | MLS_COMMIT        | Recipient | This document |
   | MLS_APPLICATION   | Recipient | This document |
   | MLS_REJOIN        | Recipient | This document |
   +===================+===========+===============+
]]></artwork></figure>

<t>The following entry is to be registered in the "OCM Share Types"
registry defined in [OCM], within the "Open Cloud Mesh (OCM)
Parameters" group.  This document is the registering specification for
the "federation" share type:</t>

<figure><artwork><![CDATA[
   +============+===============+
   | Share Type | Reference     |
   +============+===============+
   | federation | This document |
   +============+===============+
]]></artwork></figure>

<t>The following entries are to be registered in the "OCM Share Payloads"
registry defined in [OCM], within the "Open Cloud Mesh (OCM)
Parameters" group.  They extend the existing "webdav", "webapp", and
"ssh" protocols to the "federation" share type; the wire format of the
share payload for these combinations is completely specified by this
document together with [OCM] (see <xref target="share-creation"/>).  These
registrations do not modify the protocols' own registrations:</t>

<figure><artwork><![CDATA[
   +===============+============+=====================+===============+
   | Resource Type | Share Type | Protocols           | Reference     |
   +===============+============+=====================+===============+
   | file          | federation | webdav, webapp, ssh | This document |
   | folder        | federation | webdav, webapp, ssh | This document |
   +===============+============+=====================+===============+
]]></artwork></figure>

<t>The following entries are to be registered in the "OCM Encryption
Schemes" registry defined in [OCM], within the "Open Cloud Mesh (OCM)
Parameters" group:</t>

<figure><artwork><![CDATA[
   +=========+============+===============+
   | Scheme  | Share Type | Reference     |
   +=========+============+===============+
   | ocm-pgp | federation | This document |
   | ocm-mls | federation | This document |
   +=========+============+===============+
]]></artwork></figure>

</section>
<section anchor="open-issues"><name>Open Issues</name>

<t>This section collects open design issues and shall be removed before
publication.</t>

<t><list style="symbols">
  <t><strong>Streaming decryption.</strong> A chunked AEAD construction enabling
streaming decryption of large files should be specified for native
client implementations.  The specific construction and its interaction
with the FK wrapping model needs to be defined.</t>
  <t><strong>Application Message batching.</strong> The frequency and batching of
<spanx style="verb">MLS_APPLICATION</spanx> messages carrying wrapped FKs needs to be defined.
Since every epoch transition triggers a re-wrap of every shared
resource's FK (<xref target="fk-rewrap"/>), batching is load-bearing when many shares
exist and epoch transitions are frequent.</t>
  <t><strong>Commit retransmission.</strong> A missed Commit is detected directly from
the MLS epoch: a Commit arriving for a later epoch than the next
expected one indicates a gap.  A mechanism for requesting retransmission
of missed Commits, from the Group Owner Server or any Admin Server,
needs to be specified.  Retransmission is the first remedy for a gap;
the rejoin procedure (<xref target="rejoin"/>) is the fallback when retransmitted
Commits can no longer be applied. The proposed OCM Journaling mechanism
can be useful in this context.</t>
</list></t>

</section>
<section anchor="changes"><name>Changes</name>

<t>This section collects the changes with respect to the previous
version in the IETF datatracker.  It is meant to ease the review
process and it shall be removed when going to RFC last call.
The complete changelog is updated in the OCM-API GitHub repository.</t>

<section anchor="version-02"><name>Version 02</name>
<t><list style="symbols">
  <t>Following the introduction of an <spanx style="verb">encryption</spanx> object for Shares in
Version 07 of [OCM] and a corresponding IANA Registry, this document
has been adapted and corresponding registry entries have been added.</t>
</list></t>

</section>
<section anchor="version-01"><name>Version 01</name>
<t><list style="symbols">
  <t>Following the introduction of IANA Registries in Version 06 of [OCM],
all registry entries related to the <spanx style="verb">federation</spanx> share type have been
introduced in this document.</t>
</list></t>

</section>
</section>
<section anchor="references"><name>References</name>

<section anchor="normative-references"><name>Normative References</name>

<t>[OCM] Lo Presti, G., de Jong, M.B., Baghbani, M. and Nordin, M.  "<eref target="https://datatracker.ietf.org/doc/draft-ietf-ocm-open-cloud-mesh/">Open
Cloud
Mesh</eref>",
Work in Progress, Internet-Draft.</t>

<t>[ietf-mls-virtual-clients] Alwen, J., Kohbrok, K., McMillion, B.,
Mularczyk, M. and Robert, R.  "<eref target="https://datatracker.ietf.org/doc/html/draft-ietf-mls-virtual-clients-01">MLS Virtual
Clients</eref>",
Work in Progress, Internet-Draft, draft-ietf-mls-virtual-clients-01.</t>

<t>[RFC2119] Bradner, S.  "<eref target="https://datatracker.ietf.org/doc/html/rfc2119">Key words for use in RFCs to Indicate
Requirement Levels</eref>",
March 1997.</t>

<t>[RFC4648] Josefsson, S.  "<eref target="https://datatracker.ietf.org/doc/html/rfc4648">The Base16, Base32, and Base64 Data
Encodings</eref>", October
2006.</t>

<t>[RFC7517] Jones, M., "<eref target="https://datatracker.ietf.org/doc/html/rfc7517">JSON Web Key
(JWK)</eref>", May 2015.</t>

<t>[RFC8174] Leiba, B.  "<eref target="https://datatracker.ietf.org/html/rfc8174">Ambiguity of Uppercase vs Lowercase in RFC 2119
Key Words</eref>", May 2017.</t>

<t>[RFC9180] Barnes, R., Bhargavan, K., Lipp, B. and Wood, C. A.  "<eref target="https://datatracker.ietf.org/doc/html/rfc9180">Hybrid
Public Key Encryption</eref>",
February 2022.</t>

<t>[RFC9420] Barnes, R., Beurdouche, B., Robert, R., Millican, J., Omara,
E. and Cohn-Gordon, K.  "<eref target="https://datatracker.ietf.org/doc/html/rfc9420">The Messaging Layer Security (MLS)
Protocol</eref>", July 2023.</t>

<t>[RFC9421] Backman, A., Richer, J. and Sporny, M.  "<eref target="https://datatracker.ietf.org/doc/html/rfc9421">HTTP Message
Signatures</eref>", February
2024.</t>

</section>
<section anchor="informative-references"><name>Informative References</name>

<t>[RFC3552] Rescorla, E. and Korver, B.  "<eref target="https://datatracker.ietf.org/doc/html/rfc3552">Guidelines for Writing RFC Text
on Security
Considerations</eref>", BCP 72,
July 2003.</t>

<t>[RFC4918] Dusseault, L. M.  "<eref target="https://datatracker.ietf.org/doc/html/rfc4918">HTTP Extensions for Web Distributed
Authoring and
Versioning</eref>", June 2007.</t>

<t>[RFC9750] Beurdouche, B., Rescorla, E., Omara, E., Inguva, S. and Duric,
A.  "<eref target="https://datatracker.ietf.org/doc/html/rfc9750">The Messaging Layer Security (MLS)
Architecture</eref>", April
2025.</t>

</section>
</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>This work builds on the Open Cloud Mesh specification and the
discussions in the OCM community.</t>

<t>Work on this document has been funded by [Sovereign Tech Agency][sta]
through the <eref target="https://www.sovereign.tech/programs/fund">Tech Fund</eref>, with a specific <eref target="https://www.sovereign.tech/tech/open-cloud-mesh">project</eref>.</t>

</section>


  </middle>

  <back>








  </back>

<!-- ##markdown-source:
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
RMtkp/M6CKMIWeqIUcxpcCRc9B6UaHIbX2jet08g/FIMIbSLKvw+V5OuohMa
VoBOcMIONZiWfPoKAHS1wChZadkGApyRb5iFi2D7zPbyAaWMLwsLB1pzlvQ0
a2QzuXVGrxZRJwaHxyxhwQkppmNzC+jYhOyAscsSxkPRiHVls1NqUKJcGrOS
u8npKUgop70yM65ASQ2laPNJjoYP1jnM+lb6ITtk/KSw2g73BbCDg9jP0dfy
5i62GuKvvmUBP8IPphSOIJ6d4uHrN6j9T17u0929rjLrEw89mBXYemKOcAXP
+rlgMlnZuV63CnGDDDKPlau8mlxaiacvcnHEM4aHBRUnc4ZeMHO6q6Lgai4p
2S4usRqrKbXT5mpDLOXEge3qmYLzy/X4vq+q68RqLMhqfCGUIMQI1mDuioPI
1BwqJDHUaJneSWnlTX/KPAaheLZCl7yldBS6zIK1Npr4FDfuXWVMDFmOzTZd
gtJgLTmAUU6mJTBZ14pJlwZcnLsDKy9BEdaoE+meqFNKsjJ8vUVhVwBNGc1t
31eUsqzyOLjj1K6Aae+qVnp3lVKTUd8mf3Njzi4WRPHlQPUcSRCqXvu6e2P7
Di+4rEN9MlKbU4nfT53SWlfIa0iaDwXS9xj0dLqSjx6v1mLa9ywH/0DTQoHa
cdbNoHTcpWbya8GSMQQ23rJhESwp77poRDmCkbL2N8Mav+51mrCPR6oTm46Q
VmpD9sQainvg7aGonChA1xtaLFtQrzTQmOHOCejzBCNV6pUkJ9pjmIzol+yH
S2VUkRxJ6mqRoR6UkGBJ23GXEZbepRGZ65wT7KtL5hyS3EgFkZpifAVl0TKu
usrIsKyPn9ldxZTnq8VJGXtCSKy4sjN6t7pjMuTrNQaIDd5aDLUvElOL4yiR
+1W5ICwJJcfQw1tMr9q5kUMIdVQ3GnV5QNwimBfE2x73uo7BxLxkkImfg3Yo
gfsjpl817D5+2WFUManOMytCDT6L9oOUwLenSzCTlqkrxAAnhiApDeSwuI8Q
eNJ+II3VjwI2JxwMywJ1M0fFn90VEjTBknpykFkguMFH4LA6W58xbYFyt6TH
tcdOk5CFuCQCDRFWbTVFZHdznfTwGoqstgOt5NCPIaIfewfC9AjI4l4IyFCO
NnEuEwDXrubCcm9RghDjlHIgsBfIgrO8DOA26qBd2NLgAJhOl9BZh/WyZhKy
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
Hoo2fqpUs9nUOLCo/wE0Z2j5IJsBAA==

-->

</rfc>

