Skip to content

Store sender data for Megolm sessions as per Invisible crypto #3544

@andybalaam

Description

@andybalaam

Part of Invisible Crypto.

Currently when we store an Inbound group session, we associate some SessionCreatorInfo to it. Currently this info mainly contains the curve25519 identity key of the session creator.

We need now to add more info:

  • user_id - the associated mxid of the session creator (rooted in Master Signing Key authenticity).
  • master_key - the Master Signing Key signing (via the SSK) this device at time of reception.
  • master_key_verified - true if at time of reception the user was verified (see here)

We are currently computing the "authenticity" of a megolm session but we are doing it at decryption time.
The info we get at decryption time are sender: OwnedUserId and sender_device: OwnedDeviceId.
Both related to a VerificationState. This owner info is untrusted (claimed), unless the VerificationState is Trusted.

The VerificationState variants are:

  • Verified
  • Unverified::UnverifiedIdentity
  • Unverified::UnsignedDevice
  • Unverified::MissingDevice
  • Unverified::InsecureSource

We are basically trying to get this same info but at reception time.

Three places we populate SenderData in an InboundGroupSession

  1. When we receive the room keys via a to-device message. (This is already done via SenderDataFinder.)

  2. When we get new or updated device info from /keys/query. To do this we need to be able to look up InboundGroupSessions that don't have SenderData by device curve key. This will require a new index on the inboundgroupsessions table. Question: if there are lots of sessions for a particular device, will we break everything by working through batches of them to update them?

  3. When we decrypt a message for a session. In this case we have the session and device already, so it's just a case of persisting (into inboundgroupsessions) the VerificationState that we already look up at this moment.

The plan

In order to complete this we need to do these tasks:

Old tasks that are no longer relevant (see old plan in a comment below):

Out of scope


[Moved from https://github.com/element-hq/crypto-internal/issues/310]

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions