-
Notifications
You must be signed in to change notification settings - Fork 251
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Store sender data for Megolm sessions as per Invisible crypto #3544
Comments
Part of #3543. Builds on top of #3556 Implements the "fast lane" as described in #3544 This will begin to populate `InboundGroupSession`s with the new `SenderData` struct introduced in #3556 but it will only do it when the information is already available in the store. Future PRs for this issue will query Matrix APIs using spawned async tasks. Future issues will do retries and migration of old sessions. --------- Signed-off-by: Andy Balaam <mail@artificialworlds.net> Co-authored-by: Damir Jelić <poljar@termina.org.uk>
Old description for reference: Part of Invisible Crypto. Currently when we store an Inbound group session, we associate some SessionCreatorInfo to it. Currently this info mainly contains the We need now to add more info:
We are currently computing the "authenticity" of a megolm session but we are doing it at decryption time. The VerificationState variants are:
We are basically trying to get this same info but at reception time. Three speeds for handling a new sessionWhen we receive a to-device message establishing a megolm session, we want to process it as quickly as possible, so there are 3 speeds:
"Quarantine"(These ideas will be used by e.g. https://github.com/element-hq/crypto-internal/issues/308 - not really for this issue.) In previous documents, we talked about "quarantine", but this is a difficult subject because different sessions will be acceptable to different clients at different times. We prefer to talk about what messages will be shown in what modes. These are some possible policies:
Importing session keysIf we import a session from backup or from an exported file, we mark it as legacy and let the background task handle it. The planIn order to complete this we need to do these tasks:
In addition, as a separate story, we need to this: [Moved from https://github.com/element-hq/crypto-internal/issues/310] |
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
andsender_device: OwnedDeviceId
.Both related to a
VerificationState
. This owner info is untrusted (claimed), unless the VerificationState is Trusted.The VerificationState variants are:
We are basically trying to get this same info but at reception time.
Three places we populate SenderData in an InboundGroupSession
When we receive the room keys via a to-device message. (This is already done via SenderDataFinder.)
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?
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:
/keys/query
#3753Device::is_owner_of_session
#3754Old tasks that are no longer relevant (see old plan in a comment below):
Sender Data: Change DB schemata to add next_retry_time_ms property/column #3545Sender Data: Background task to retry fetching sender data for megolm sessions #3546Sender Data: Async migration task to prepare old sessions for fetching sender data #3547 (essentially just adds anext_retry_time
so they get retried)Out of scope
[Moved from https://github.com/element-hq/crypto-internal/issues/310]
The text was updated successfully, but these errors were encountered: