[MLS] virtual-clients and room-policy's multi_device flag

Jason Bolduc <jasbolduc@gmail.com> Wed, 08 July 2026 18:59 UTC

Return-Path: <jasbolduc@gmail.com>
X-Original-To: mls@mail2.ietf.org
Delivered-To: mls@mail2.ietf.org
Received: from localhost (localhost [127.0.0.1]) by mail2.ietf.org (Postfix) with ESMTP id F41C31133F380 for <mls@mail2.ietf.org>; Wed, 8 Jul 2026 11:59:47 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1783537187; bh=Xgwxz6HJGZOwVBta0zePsYOyndkouDqzEYsypBqfyxI=; h=From:Date:Subject:To:Cc; b=E9ZBwo/6NECT2qfWT7It11MehYbWk5bnSvdxPr6Zo8L8fjH29dJGhZVFwn4PcmIJa eKzDwSxLkGuTZYxv/FhW8V0yQDxSKG9+eVuWq6Y5KuBDnaWhjPLS04Woofb8TTM9yL M6g6IIP/WScg6rQhveH4IVn1V6UMFaFaLDNbgQCc=
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -2.098
X-Spam-Level:
X-Spam-Status: No, score=-2.098 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: mail2.ietf.org (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
Received: from mail2.ietf.org ([166.84.6.31]) by localhost (mail2.ietf.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id YeA3BCSMiJ_5 for <mls@mail2.ietf.org>; Wed, 8 Jul 2026 11:59:47 -0700 (PDT)
Received: from mail-yx1-xb133.google.com (mail-yx1-xb133.google.com [IPv6:2607:f8b0:4864:20::b133]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (P-256) server-digest SHA256) (No client certificate requested) by mail2.ietf.org (Postfix) with ESMTPS id B242C1133F0F1 for <mls@ietf.org>; Wed, 8 Jul 2026 11:57:30 -0700 (PDT)
Received: by mail-yx1-xb133.google.com with SMTP id 956f58d0204a3-664a09bc459so1459903d50.1 for <mls@ietf.org>; Wed, 08 Jul 2026 11:57:30 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1783537044; cv=none; d=google.com; s=arc-20260327; b=EBkcTjezjl1LZT7Kh+tEzUt1PtjPZWSLjoZK2kwu9wz6416qOye71StxP69HqloA3U hLt6Qgj2F8mqTaec7HRMCc6IDYJG1z4TwYH5wIDj2a9zsNCGL4O+uRegrsO6CTa8Q1XY KRMU2/5Qfq4UnJuCsf6kKmLTd9cwyL4GJhG/r13Ah4pJGOdqTWhwm+KstbUka9jtQFNY 8vcNrSHTMH85i9lFD8ctW/+luIHWP8LgGIKR00fNlLXzr76yBKcCCzNu2ZJ1gjCIyCWf O6OrYsVrm3yHFL7AUJBAngr+wm9oy/Mfmv6oF8nbB0gbclGzMiVyT3ss8Wlw0G8mf4mo obfA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:mime-version:dkim-signature; bh=Xgwxz6HJGZOwVBta0zePsYOyndkouDqzEYsypBqfyxI=; fh=Ti7oCo0aSrGD+xj+Yi/xNOin/ilWGN2mXmDiXXqtgio=; b=StVyDx9QYswLr4ypIepRh9Y3tj61NUSKevdnin/NcGnx5zoMPkORtCddH2IVYfOiQ7 rPIY058qcb8fzJLiHkcVCNZ+z6tmRuitYqsUUIgAaDmn6wHmrQVO7euc12Xdd39cXAcr D4EbP9kugDt8m9aEUHjsDur5KrZ5g/Q7OS9r2DRKsYIAygGOCra/vpqkYd4kBTQJkLN4 PnfFm4B0yiiJnhM1y1LQtb9tspubFipf8xR0ko+dvi889DBrZuuAFfXGm7olqZMNOEmf 77n0ES8iuCYcrGIHCMwSdlwQUwnpv/x4p6mMacYSp3jgqAvO51bljVqyYChbZa6Zo20r qwRQ==; darn=ietf.org
ARC-Authentication-Results: i=1; mx.google.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783537044; x=1784141844; darn=ietf.org; h=content-type:cc:to:subject:message-id:date:from:mime-version:from :to:cc:subject:date:message-id:reply-to:content-type; bh=Xgwxz6HJGZOwVBta0zePsYOyndkouDqzEYsypBqfyxI=; b=i/STyko0yjUY0uIL8hVe3xiwgF9zhBSWeyy2qfM3xJeQ156jljn3FFahL57nJ/5lzm 3q1C28WMfg7+oRfHLmkTf/DXMkSnOhquyNYqEjhSVfj3w/tJOMDef3kdCSNWf2FKJrbf 8Y+cfTz/MCmoIuHuhPS1VJFkR5J0vFmXi4ThkIlqwNjLT2WGIWP26Jd25BcUFS64yyne 4voEPsQOIh0LR0GrHCc+WXvZOh0XnpNmEv+t5YmMrzRE8bWVO6BygZstoAPYQOMx4o7I 8bXwaw/R+sLn2v1mgL0duzdbxIbaGeNuPQZR8skH0yFIq1V1bbdgMQ3kL4mLk3P9RVIY RN4A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783537044; x=1784141844; h=content-type:cc:to:subject:message-id:date:from:mime-version :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to:content-type; bh=Xgwxz6HJGZOwVBta0zePsYOyndkouDqzEYsypBqfyxI=; b=LUMJI4TlFcYaLuTYgD30CAwhgrEzJ7ImL2vjjWrAeH6walxPaAhQ7NT9G6Zd8/7lef iZQfIfWsZi1qIjPgdBZu9M52FxIMJ/1e+xFtayqpXEXbAqY5eteQggVlSnlzIUoKj5lR Rm3HFms3GiiyXRESfs72y34xTBnRFAX9j46C+ds7fTb+Niw7YRvaH9nCAaABEzm7Qxc2 qxbBu3HiFXJCalEAinNK8e9E2PXxZw705iRyxn/OKz41RkWA6nRy6h7uAvygjH6fGiTu 1A/9v8GmMLM3QhY7FPXWhTSmL34h8mJqL+L3Lnsdjp3NYv9M3AUMECx5fOhyHJvU4887 uwLg==
X-Gm-Message-State: AOJu0Yxy6kTKmYFQXMiA8C1aiF5X7LF0B1v6x4UOhZr9wQ/SV/X1Lqna cveWyqz1c07pbaVuvy1C9SPAk5XDy+6c86aekvE8JGPDTJ1ONxJM9SgV0RZmJK994ygY/uPaJnP 8PKl1vonqCyXkA+f0F3CznWZdAMvLwVzLAgLF
X-Gm-Gg: AfdE7cmjZhTwOjQVM0GklPN3kmTdPrHLL4t4Futs2ihNtdDXI8PSTTU9//WUpY230yJ FgF2E+toP9IwGVAz1cniwg40dEsSpM4ras9pa0F4NmGoZpSSeae1/IUumbZtzp5JCI11IkTimQ4 V3pSX+fK423BRhk2KJHQ5xymw2Wz76BtDJglVNiAlmAHUg0+WSU214xnadtJfbGGVA4/RyTGNKE wluUIUchqXgpqppRLKvSkCjmOlXqts3QlqhEzBTqzvsrPrVo2Ko/dI3+6mzEkLmVUkHconZd/to s+dehhfHuBXUvAdyT4sGlyGClQnhpzTS2PWM/Uh7h8v6D5VeYFYzcKCdpemScsw=
X-Received: by 2002:a05:690c:4441:b0:80a:9f1a:d48b with SMTP id 00721157ae682-81dc0ce73c8mr32215117b3.54.1783537044460; Wed, 08 Jul 2026 11:57:24 -0700 (PDT)
MIME-Version: 1.0
From: Jason Bolduc <jasbolduc@gmail.com>
Date: Wed, 08 Jul 2026 11:57:12 -0700
X-Gm-Features: AVVi8CeJxAvOnJ1g8DI7WalQQzlmlBTutnJYs9QipoliPia443VY4Ngk8-nz5Zc
Message-ID: <CA+7d1zns1+setQdn1KXWFL2aE0VrTGMPcbP12eiLixeAJPHoEA@mail.gmail.com>
To: mls@ietf.org
Content-Type: multipart/alternative; boundary="000000000000fa9a5f06561e134a"
Message-ID-Hash: LGGDOZJ2EW5AZRXE2QV2B2MDCVHXS4FP
X-Message-ID-Hash: LGGDOZJ2EW5AZRXE2QV2B2MDCVHXS4FP
X-MailFrom: jasbolduc@gmail.com
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-mls.ietf.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
CC: mimi@ietf.org
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [MLS] virtual-clients and room-policy's multi_device flag
List-Id: Messaging Layer Security <mls.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/mls/9NAtb-LHFYecrL3RTFPp5As5dJs>
List-Archive: <https://mailarchive.ietf.org/arch/browse/mls>
List-Help: <mailto:mls-request@ietf.org?subject=help>
List-Owner: <mailto:mls-owner@ietf.org>
List-Post: <mailto:mls@ietf.org>
List-Subscribe: <mailto:mls-join@ietf.org>
List-Unsubscribe: <mailto:mls-leave@ietf.org>

Hi all,

While implementing both draft-ietf-mls-virtual-clients-01 and the MIMI room
policy (draft-ietf-mimi-room-policy-04) we ran into an interaction between
the two documents that neither talks about.

BaseRoomPolicy (room-policy §5) defines `multi_device`: "If false only a
single client can be an MLS member at one time." It also defines
`max_clients`, with normative force: "When max_clients has a value, the
room's associated MLS group MUST NOT have more clients than the provided
value." Both are expressed in terms of clients in the MLS group.

Virtual clients deliberately break the client==device equivalence: a user's
N devices jointly operate one leaf, and the emulation group behind that
leaf is invisible to the room. That invisibility is the mechanism's stated
metadata-hiding goal (virtual-clients §4.2, §8). So a room with
`multi_device = false` admits a five-device user without any violation as
written, and a room whose policy says `max_clients = 10` can carry fifty
devices while every hub-side count stays at ten.

The count itself is not the problem: a hub can still enumerate leaves
accurately, and the MUST NOT is still enforceable. `max_clients` and
'multi_device' bound leaves, and with virtual clients a leaf is no longer
one device, so if the intent was to bound the number of endpoints holding
the room's keys, that intent is no longer served even though every count is
correct. `max_users` does not have this problem, since it counts
participant-list entries rather than MLS clients, which suggests the
member-counting fields were not written with a member/device split in mind.

Whether that's a bug depends on what the flag intends, and the document
doesn't say:
- If 'multi_device=false' is a performance/simplicity bound (one leaf per
user), virtual clients are compatible with it.
- If it is a security semantic ("I want to talk to exactly one device"), it
is now unenforceable by construction, and a room policy cannot restore it:
no room-visible artifact distinguishes a virtual client from a plain one
unless the deployment chooses to reveal it (the DerivationInfo component is
visible in the tree, but its absence proves nothing about a foreign
provider's client implementation).

We'd suggest room-policy state the intent explicitly, and virtual-clients
note the interaction in its privacy considerations. If the intent is the
security semantic, that likely needs credential-level support (an
AS-attested "this leaf is not emulated" claim) rather than a policy bit,
though that is not simple either, since the Authentication Service cannot
easily verify non-emulation...

We can write up a more detailed document, if useful, with code that we're
already using. We hit this because our implementation sits on both sides:
an MLS deployment adding virtual-clients multi-device, federating via MIMI.

Thanks,
Jason