Repudiable E2EE Messages
<p>In a discussion [<a href="https://mastodon.social/@bengo/117010435874507144" rel="nofollow ugc">1</a>] started by <a href="https://mastodon.social/@bengo">@<bdi>bengo@mastodon.social</bdi></a>, the topic of direct message repudiation was brought up as a security/privacy concern.</p> <p>Currently, unencrypted Mastodon/ActivityPub DMs have repudiation (plausible deniability), because the activities are signed by the instance actor key, not tied to individual user actors.</p> [...]
Hover or focus to reveal
Sensitive
In a discussion [1] started by @bengo@mastodon.social, the topic of direct message repudiation was brought up as a security/privacy concern.
Currently, unencrypted Mastodon/ActivityPub DMs have repudiation (plausible deniability), because the activities are signed by the instance actor key, not tied to individual user actors.
If we would like to preserve this feature in E2EE DMs, we need to consider how activities are signed (tied to our work on limiting metadata exposure [2]), and how messages inside MLS encrypted envelopes are signed.
For simplicity, let's assume maximal protection against metadata exposure, so we only need to worry about in-protocol messages (MLS encrypted messages).
One possible path to achieve both: a) authenticated messages and b) message repudiation, we can use ephemeral signing keys that are created per-E2EE-chat (potentially rotated per MLS epoch). The following ideas were inspired by @soatok@furry.engineer's post [3] in the thread.
These ephemeral signing keys would be used to sign the clear-text of MLS encrypted messages [4], in order to provide per-participant message authentication. The ephemeral signing keys would not be tied to an individual participant's identity key (MLS Signature key [5]), which provides a basic level of repudiability.
In order to ensure ephemeral signing keys used by participants have been approved by all other participants, we could require that ephemeral signing keys are signed by every participant's MLS Signature key [5]. This is something like a naive group signature over the ephemeral signing keys, instead of doing a full-blown group signature algorithm over all messages. All participants in the group sign all ephemeral keys, which again provides repudiability ("that's not my key"), while ensuring authenticated keys are used to sign messages. If per-Epoch rotation is used for ephemeral signing keys, we could expose prior Epoch ephemeral signing key secrets to fulfill the OTR-style repudiation protocol.
These ephemeral signing keys would take the place of the MLS signing key for message authentication [6]. This extra level of indirection provides some level of plausible deniability, while preserving per-participant authentication, and protecting against impersonation by anyone possessing shared encryption secrets.
thanks for the kind words. activityforge is still very much WIP. currently working on the web UI to get minimal user/repository interaction working. all of the backend plumbing is in place for Factory creation of user repos, user Follow, and repository Like activities. I'll put out a blog post / update here when it is ready for other folks to try out