Skip to content

MSC4161: Crypto terminology for non-technical users#4161

Open
andybalaam wants to merge 60 commits intomainfrom
andybalaam/crypto-terminology
Open

MSC4161: Crypto terminology for non-technical users#4161
andybalaam wants to merge 60 commits intomainfrom
andybalaam/crypto-terminology

Conversation

@andybalaam
Copy link
Copy Markdown
Member

@andybalaam andybalaam commented Jun 27, 2024

Rendered

Conflict of Interest declaration: I am employed by Element. This MSC was written as part of my work on the Element Cryptography team.


SCT Stuff

MSC checklist

No FCP tickyboxes

@uhoreg uhoreg added e2e proposal A matrix spec change proposal kind:maintenance MSC which clarifies/updates existing spec labels Jun 27, 2024
@turt2live turt2live added the needs-implementation This MSC does not have a qualifying implementation for the SCT to review. The MSC cannot enter FCP. label Jun 27, 2024
Comment thread proposals/4161-crypto-terminology.md Outdated
Comment thread proposals/4161-crypto-terminology.md Outdated
Comment thread proposals/4161-crypto-terminology.md Outdated
Comment thread proposals/4161-crypto-terminology.md Outdated
Comment thread proposals/4161-crypto-terminology.md Outdated
Comment thread proposals/4161-crypto-terminology.md Outdated
Comment thread proposals/4161-crypto-terminology.md
@richvdh richvdh marked this pull request as ready for review July 11, 2024 15:21
Comment thread proposals/4161-crypto-terminology.md Outdated
Comment thread proposals/4161-crypto-terminology.md
Based on real-world feedback from Element clients, 'identity was changed', and
especially 'identity appears to have been changed' were very confusing.

Resetting an identity is something that the user can do themselves, so it is
much clearer what we mean. They can ask the other user "did you reset your
identity?" and it is easier for them to answer.
@escix
Copy link
Copy Markdown

escix commented Oct 18, 2025

After watching Andy's conference (two passwords), these are my comments:

Most of the users don't care whether they are linking/combining or whatever they are doing other than login and get the messages. So, from my point of view, it is all about how am I getting the messages from the server. This is really the login flow management and wordings.

So the flow is:

  1. the user login using their login credentials
  2. they need to get their messages from the server, this can be done via verifying their new login using other existing logins or using the recovery key.

My suggestion is 'Login Verification'. This means for the user, they are just verifying the new login. They can use either other logged in devices or 'Access Code'.

'Access Code' is the 'recovery key'. From a user point of view, this means to access the messages from the server (i.e. recover the key) they need the 'Access Code'.

For the user verification, we can also use 'Contact Verification'.

Summary:

  1. Login Credentials
  2. Login Verification (using other logins or Access Code)
  3. Access Code
  4. Contact Verification

And it is much easier to tell others 'Mate, if you lose your access code, then you will lose your access to the messages 😄'

image

One more thought:

What if the verification from other logins is disabled altogether. Alternatively, if a verified login is available, is it possible to get the 'Access Code' from that login and use it to verify the new login?

This maybe a security issue, but if the Access Code can be retrieved by entering the login credentials then I can't see this being any different from emoji verification.

EDIT 20251104: This also removes the confusion between devices/sessions, as the requirement is to verify each and every 'Login'.

@andybalaam
Copy link
Copy Markdown
Member Author

After some informal user testing and feedback from the 2025 Matrix conference, I have pushed two significant changes today.

  • "Verified" devices has been changed to "Confirmed" (and a note added about "linking" devices when we are simultaneously doing login and confirmation)
  • "Identity" has been changed to "Digital Identity".

Feedback welcome, but I think this now represents my best ideas about what we should do.

@github-project-automation github-project-automation bot moved this to Tracking for review in Spec Core Team Workflow Feb 6, 2026
@turt2live turt2live moved this from Tracking for review to Proposed for FCP readiness in Spec Core Team Workflow Feb 6, 2026
Copy link
Copy Markdown
Member

@turt2live turt2live left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This MSC is currently in queue for proposed-FCP, though I feel there's a couple more steps that need to happen before it can confidently enter that state. The MSC checklist I'll add shortly after this review will cover the points in more detail.

The things I feel need addressing before this is ready for proposed-FCP are:

  • Resolution of outstanding comments (prior to this review). These threads are either long, old, or both. They should be incorporated into the proposal text or marked as resolved in GitHub if already addressed.
    • The exception is (always) the "implementation requirements" thread - that takes place of implementations in the description.
  • Evidence of implementation. See my comment on the "implementation requirements" thread.

When these two points, and any other unchecked boxes from the checklist or concerns from other SCT members, are addressed, please re-raise this MSC for proposed-FCP in the SCT Office. Questions regarding threads are best asked in those threads. Questions for the SCT which are outside of existing threads should be raised in the SCT Office (SCT members might not see individual/team pings).

Overall though, in case it's not totally clear from the small number of comments, this proposal is extremely close to proposed-FCP. I'm looking forward to it getting pushed to that state!

Comment on lines +86 to +94
Devices that have not been cross-signed by the user who owns them are
**unconfirmed**. It is important that devices are **confirmed**, to prevent
security problems like a compromised server creating fake devices that
can impersonate users (see
[MSC4153](https://github.com/matrix-org/matrix-spec-proposals/pull/4153)).

> "This device is not confirmed. Please confirm it to continue."

> "Confirm it's you" (when asking to confirm a device during login)
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For clarity: If the device does not support encryption, is it confirmed or unconfirmed?

(this should be addressed in the MSC)

Comment on lines +136 to +137
When an unverified contact resets their digital identity, the user should be warned that
this happened.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
When an unverified contact resets their digital identity, the user should be warned that
this happened.
When a verified contact resets their digital identity, the user should be warned that
this happened.

surely?

Comment on lines +269 to +274
When the user does not have the message key for a permanent and well-understood
reason, for example if it was sent before they joined the room, we say **you
don't have access to this message**.

> "You don't have access to this message" e.g. if it was sent before the user
> entered the room, or the user does not have key storage set up.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

presumably this also includes when the sender refuses to provide the key (using a withheld error code)?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not seeing implementation attached to this MSC, so I've gone through to identify precise implementation requirements. Please provide screenshots and/or PR links which demonstrate each of these checkboxes. Ideally, implementation for each checkbox is provided for each of Element's clients (including Classic), though at a minimum all of these requirements must be met by at least a single Element client (preferably Web over X over Classic).

In short, though the MSC states that clients SHOULD use the terminology of the MSC, the implementation requirements upon Element are a MUST (at least while this proposal is pre-acceptance - Element can return to a SHOULD after successful FCP).

Implementation evidence required:

  • Element using "devices" or "sessions" to refer to what the spec calls devices.
  • Element using the word "unconfirmed" for devices which aren't cross-signed.
  • Element using the term "linking" to refer to logging in & confirming a device concurrently.
  • Element using "log out" or "sign out".
  • Element shows other users as "verified" and "not verified".
  • Element shows warnings that digital identities have been reset.
    • If the MSC intended to show this when verified contacts reset their identity, then those users need to produce such warnings. Alternatively, unverified users need to produce the warnings. If both are intended, then Element needs to do both as well.
    • Element offers to "withdraw verification" or to "re-verify"
    • When for a verified contact, Element's warning cannot be dismissed and states that the other user's "digital identity has been reset".
  • Element does not use the term "cross-signing" in its UI.
  • Element does not use the term "Trust On First Use (TOFU)" in its UI.
  • Element does not use the term "cryptographic identity" in its UI.
  • Element uses "digital identity" to refer to a device's cross-signing keys/identity and key backup/storage.
  • Element uses "message key" to talk about keys required to decrypt a message/event.
  • Element uses "unable to decrypt" to describe the following scenarios:
    • "Waiting for this message" when message keys are expected but not delivered (yet, hopefully).
    • "You don't have access to this message" when keys are not expected and not delivered (ever, hopefully).
    • When some error occurred. Exact wording is not defined by the MSC, though "unable to decrypt" is to be used.
  • Element uses "message history" to describe decryptable events.
  • Element uses "key storage" (ideally in combination with "message history") to talk about key backup.
  • Element uses "recovery" when a user loses access to all of their devices (or has zero encryption-capable devices).
    • Element uses "recovery key" or "recovery code" or "recovery passphrase" to talk about how to fix this.
    • If using "recovery key/code", Element is talking about a machine-generated key a user can upload or enter.
    • If using "recovery passphrase", Element is talking about a user-understandable phrase or password-like string to represent the machine-generated key.
    • When a user loses their recovery key, Element says they can "reset" it.
    • Element does not use "secret storage" or "quad S".
    • If Element uses tooltips to say "your recovery key may have been called a security key in the past" (or similar), this is fine.
  • Element allows users to "change their recovery key" rather than reset it.
  • Element distinguishes between resetting digital identity and changing recovery key.

@turt2live
Copy link
Copy Markdown
Member

turt2live commented Mar 23, 2026

MSCs proposed for Final Comment Period (FCP) should meet the requirements outlined in the checklist prior to being accepted into the spec. This checklist is a bit long, but aims to reduce the number of follow-on MSCs after a feature lands.

SCT members: please check off things you check for, and raise a concern against FCP if the checklist is incomplete. If an item doesn't apply, prefer to check it rather than remove it. Unchecking items is encouraged where applicable.

MSC authors: feel free to ask in a thread on your MSC or in the#matrix-spec:matrix.org room for clarification of any of these points.

  • Are appropriate implementation(s) specified in the MSC’s PR description?
  • Are all MSCs that this MSC depends on already accepted?
  • For each new endpoint that is introduced:
    • Have authentication requirements been specified?
    • Have rate-limiting requirements been specified?
    • Have guest access requirements been specified?
    • Are error responses specified?
      • Does each error case have a specified errcode (e.g. M_FORBIDDEN) and HTTP status code?
        • If a new errcode is introduced, is it clear that it is new?
  • Will the MSC require a new room version, and if so, has that been made clear?
    • Is the reason for a new room version clearly stated? For example, modifying the set of redacted fields changes how event IDs are calculated, thus requiring a new room version.
  • Are backwards-compatibility concerns appropriately addressed?
  • Are the endpoint conventions honoured?
    • Do HTTP endpoints use_underscores_like_this?
    • Will the endpoint return unbounded data? If so, has pagination been considered?
    • If the endpoint utilises pagination, is it consistent with the appendices?
  • An introduction exists and clearly outlines the problem being solved. Ideally, the first paragraph should be understandable by a non-technical audience.
  • All outstanding threads are resolved
    • All feedback is incorporated into the proposal text itself, either as a fix or noted as an alternative
  • While the exact sections do not need to be present, the details implied by the proposal template are covered. Namely:
    • Introduction
    • Proposal text
    • Potential issues
    • Alternatives
    • Dependencies
  • Stable identifiers are used throughout the proposal, except for the unstable prefix section
    • Unstable prefixes consider the awkward accepted-but-not-merged state
    • Chosen unstable prefixes do not pollute any global namespace (use “org.matrix.mscXXXX”, not “org.matrix”).
  • Changes have applicable Sign Off from all authors/editors/contributors
  • There is a dedicated "Security Considerations" section which detail any possible attacks/vulnerabilities this proposal may introduce, even if this is "None.". See RFC3552 for things to think about, but in particular pay attention to the OWASP Top Ten.

Copy link
Copy Markdown

@CrazyNicc CrazyNicc left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a minor suggestion for improving the clarity, and using one less term.

Comment on lines +102 to +108
When a mechanism for simultaneously logging in and confirming a device
is available (e.g.
[MSC4108: QR code login](https://github.com/matrix-org/matrix-spec-proposals/pull/4108))
then we talk about **linking** the device. After a device is linked, it is
logged in and confirmed.

> "Link this device by scanning the QR code"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we really introduce another term here? I feel like Log-in and confirm this device by scanning the QR code would be more fitting, and use already established terms in this document, although it is a bit longer. I wouldn't immediately know what linking a device would mean.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Signal, WhatsApp and Telegram all use "linking" to refer to logging in with QR codes, so I'd expect users to know what it means even though it's not an established term in Matrix.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alright, that makes sense

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

e2e kind:maintenance MSC which clarifies/updates existing spec needs-implementation This MSC does not have a qualifying implementation for the SCT to review. The MSC cannot enter FCP. proposal A matrix spec change proposal

Projects

None yet

Development

Successfully merging this pull request may close these issues.