Skip to content

Commit f42ce28

Browse files
codedustcodedust
authored andcommitted
Clarify terminology for keys in cross-signing module
- do not use the term 'cross-signing keys' anymore: Previously, the term 'cross-signing keys' was used to refer to the master, user-signing and self-signing keys. This is not ideal since the master key is used for cross-signing but may also be used to sign the backup key, for example. In these contexts, the master key is not used for cross-signing. The term 'cross-signing keys' has therefor been replaced by 'keys used for cross-signing' or, more explicitely, by 'master, user-signing and self-signing key'. - the naming of the master key has been harmonised (no more 'master cross-signing key' or 'master signing keys'). Also the abbr. 'MSK' has been replaced by 'MK'. - in the QR code example, the term 'cross-signing key' has been replaced by 'master key' since in mode 0x00, the current user's own master key and what the device thinks the other user's master key is used. - it has been made more explicit that private keys used for cross-signing can be stored on the server are stored as described in the secrets module (as opposed to store them in unencrypted form) Signed-off-by: codedust <[email protected]>
1 parent 7d2de48 commit f42ce28

File tree

8 files changed

+64
-60
lines changed

8 files changed

+64
-60
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Clarify terminology for keys in cross-signing module.

content/client-server-api/modules/end_to_end_encryption.md

Lines changed: 52 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ Example:
9393
```
9494

9595
`ed25519` and `curve25519` keys are used for [device keys](#device-keys).
96-
Additionally, `ed25519` keys are used for [cross-signing keys](#cross-signing).
96+
Additionally, `ed25519` keys are keys used for [cross-signing](#cross-signing).
9797

9898
`signed_curve25519` keys are used for [one-time and fallback keys](#one-time-and-fallback-keys).
9999

@@ -675,7 +675,7 @@ The process between Alice and Bob verifying each other would be:
675675
15. Assuming they match, Alice and Bob's devices each calculate Message
676676
Authentication Codes (MACs) for:
677677
* Each of the keys that they wish the other user to verify (usually their
678-
device ed25519 key and their master cross-signing key).
678+
device ed25519 key and their master key, see below).
679679
* The complete list of key IDs that they wish the other user to verify.
680680

681681
The MAC calculation is defined [below](#mac-calculation).
@@ -931,16 +931,16 @@ and can be translated online:
931931
Rather than requiring Alice to verify each of Bob's devices with each of
932932
her own devices and vice versa, the cross-signing feature allows users
933933
to sign their device keys such that Alice and Bob only need to verify
934-
once. With cross-signing, each user has a set of cross-signing keys that
934+
once. With cross-signing, each user has a set of ed25519 key pairs that
935935
are used to sign their own device keys and other users' keys, and can be
936936
used to trust device keys that were not verified directly.
937937

938-
Each user has three ed25519 key pairs for cross-signing:
938+
Each user has three ed25519 key pairs used for cross-signing:
939939

940-
- a master key (MSK) that serves as the user's identity in
941-
cross-signing and signs their other cross-signing keys;
940+
- a master key (MK) that serves as the user's identity in
941+
cross-signing and signs their user-signing and self-signing keys;
942942
- a user-signing key (USK) -- only visible to the user that it belongs
943-
to --that signs other users' master keys; and
943+
to -- that signs other users' master keys; and
944944
- a self-signing key (SSK) that signs the user's own device keys.
945945

946946
The master key may also be used to sign other items such as the backup
@@ -950,13 +950,15 @@ previously verified Bob's device and Bob's device has signed his master
950950
key, then Alice's device can trust Bob's master key, and she can sign it
951951
with her user-signing key.
952952

953-
Users upload their cross-signing keys to the server using [POST
953+
Users upload the public part of their master, user-signing and self-signing
954+
key to the server using [POST
954955
/\_matrix/client/v3/keys/device\_signing/upload](/client-server-api/#post_matrixclientv3keysdevice_signingupload). When Alice uploads
955-
new cross-signing keys, her user ID will appear in the `changed`
956+
new keys, her user ID will appear in the `changed`
956957
property of the `device_lists` field of the `/sync` of response of all
957958
users who share an encrypted room with her. When Bob sees Alice's user
958959
ID in his `/sync`, he will call [POST /\_matrix/client/v3/keys/query](/client-server-api/#post_matrixclientv3keysquery)
959-
to retrieve Alice's device and cross-signing keys.
960+
to retrieve Alice's device keys, as well as their master, user-signing and
961+
self-signing key.
960962

961963
If Alice has a device and wishes to send an encrypted message to Bob,
962964
she can trust Bob's device if:
@@ -971,13 +973,13 @@ The following diagram illustrates how keys are signed:
971973

972974
```
973975
+------------------+ .................. +----------------+
974-
| +--------------+ | .................. : | +------------+ |
975-
| | v v v : : v v v | |
976-
| | +-----------+ : : +-----------+ | |
977-
| | | Alice MSK | : : | Bob MSK | | |
978-
| | +-----------+ : : +-----------+ | |
979-
| | | : : : : | | |
980-
| | +--+ :... : : ...: +--+ | |
976+
| +--------------+ | ................... : | +------------+ |
977+
| | v v v : : v v v | |
978+
| | +----------+ : : +----------+ | |
979+
| | | Alice MK | : : | Bob MK | | |
980+
| | +----------+ : : +----------+ | |
981+
| | | : : : : | | |
982+
| | +--+ :.... : : ...: +---+ | |
981983
| | v v : : v v | |
982984
| | +-----------+ ............. : : ............. +-----------+ | |
983985
| | | Alice SSK | : Alice USK : : : : Bob USK : | Bob SSK | | |
@@ -1004,11 +1006,11 @@ signatures that she cannot see:
10041006
+------------------+ +----------------+ +----------------+
10051007
| +--------------+ | | | | +------------+ |
10061008
| | v v | v v v | |
1007-
| | +-----------+ | +-----------+ | |
1008-
| | | Alice MSK | | | Bob MSK | | |
1009-
| | +-----------+ | +-----------+ | |
1010-
| | | | | | | |
1011-
| | +--+ +--+ | +--+ | |
1009+
| | +----------+ | +----------+ | |
1010+
| | | Alice MK | | | Bob MK | | |
1011+
| | +----------+ | +----------+ | |
1012+
| | | | | | | |
1013+
| | +--+ +---+ | +---+ | |
10121014
| | v v | v | |
10131015
| | +-----------+ +-----------+ | +-----------+ | |
10141016
| | | Alice SSK | | Alice USK | | | Bob SSK | | |
@@ -1024,16 +1026,16 @@ signatures that she cannot see:
10241026
```
10251027

10261028
[Verification methods](#device-verification) can be used to verify a
1027-
user's master key by using the master public key, encoded using unpadded
1029+
user's master key by treating the master public key, encoded using unpadded
10281030
base64, as the device ID, and treating it as a normal device. For
10291031
example, if Alice and Bob verify each other using SAS, Alice's
10301032
`m.key.verification.mac` message to Bob may include
10311033
`"ed25519:alices+master+public+key": "alices+master+public+key"` in the
10321034
`mac` property. Servers therefore must ensure that device IDs will not
1033-
collide with cross-signing public keys.
1035+
collide with public keys used for cross-signing.
10341036

1035-
The cross-signing private keys can be stored on the server or shared with other
1036-
devices using the [Secrets](#secrets) module. When doing so, the master,
1037+
Using the [Secrets](#secrets) module the private keys used for cross-signing can
1038+
be stored on the server or shared with other devices. When doing so, the master,
10371039
user-signing, and self-signing keys are identified using the names
10381040
`m.cross_signing.master`, `m.cross_signing.user_signing`, and
10391041
`m.cross_signing.self_signing`, respectively, and the keys are base64-encoded
@@ -1052,22 +1054,23 @@ If a user's client sees that any other user has changed their master
10521054
key, that client must notify the user about the change before allowing
10531055
communication between the users to continue.
10541056

1055-
Since device key IDs (`ed25519:DEVICE_ID`) and cross-signing key IDs
1056-
(`ed25519:PUBLIC_KEY`) occupy the same namespace, clients must ensure that they
1057-
use the correct keys when verifying.
1057+
Since device key IDs (`ed25519:DEVICE_ID`) as well as master, user-signing and
1058+
self-signing key IDs (`ed25519:PUBLIC_KEY`) occupy the same namespace, clients
1059+
must ensure that they use the correct keys when verifying.
10581060

1059-
While servers MUST not allow devices to have the same IDs as cross-signing
1060-
keys, a malicious server could construct such a situation, so clients must not
1061-
rely on the server being well-behaved and should take the following precautions
1062-
against this.
1061+
While servers MUST not allow devices to have the same IDs as keys used for
1062+
cross-signing, a malicious server could construct such a situation, so clients
1063+
must not rely on the server being well-behaved and should take the following
1064+
precautions against this:
10631065

10641066
1. Clients MUST refer to keys by their public keys during the verification
10651067
process, rather than only by the key ID.
10661068
2. Clients MUST fix the keys that are being verified at the beginning of the
10671069
verification process, and ensure that they do not change in the course of
10681070
verification.
10691071
3. Clients SHOULD also display a warning and MUST refuse to verify a user when
1070-
they detect that the user has a device with the same ID as a cross-signing key.
1072+
they detect that the user has a device with the same ID as a key used for
1073+
cross-signing.
10711074

10721075
A user's user-signing and self-signing keys are intended to be easily
10731076
replaceable if they are compromised by re-issuing a new key signed by
@@ -1104,7 +1107,7 @@ user-signing keys.
11041107

11051108
Verifying by QR codes provides a quick way to verify when one of the parties
11061109
has a device capable of scanning a QR code. The QR code encodes both parties'
1107-
master signing keys as well as a random shared secret that is used to allow
1110+
master keys as well as a random shared secret that is used to allow
11081111
bi-directional verification from a single scan.
11091112

11101113
To advertise the ability to show a QR code, clients use the names
@@ -1202,15 +1205,14 @@ The binary segment MUST be of the following form:
12021205
bytes of the ID as a UTF-8 string
12031206
- the ID encoded as a UTF-8 string
12041207
- the first key, as 32 bytes. The key to use depends on the mode field:
1205-
- if `0x00` or `0x01`, then the current user's own master cross-signing public key
1208+
- if `0x00` or `0x01`, then the current user's own master public key
12061209
- if `0x02`, then the current device's Ed25519 signing key
12071210
- the second key, as 32 bytes. The key to use depends on the mode field:
12081211
- if `0x00`, then what the device thinks the other user's master
1209-
cross-signing public key is
1212+
public key is
12101213
- if `0x01`, then what the device thinks the other device's Ed25519 signing
12111214
public key is
1212-
- if `0x02`, then what the device thinks the user's master cross-signing public
1213-
key is
1215+
- if `0x02`, then what the device thinks the user's master public key is
12141216
- a random shared secret, as a sequence of bytes. It is suggested to use a secret
12151217
that is about 8 bytes long. Note: as we do not share the length of the
12161218
secret, and it is not a fixed size, clients will just use the remainder of
@@ -1221,14 +1223,14 @@ For example, if Alice displays a QR code encoding the following binary data:
12211223
```
12221224
"MATRIX" |ver|mode| len | event ID
12231225
4D 41 54 52 49 58 02 00 00 2D 21 41 42 43 44 ...
1224-
| user's cross-signing key | other user's cross-signing key | shared secret
1225-
00 01 02 03 04 05 06 07 ... 10 11 12 13 14 15 16 17 ... 20 21 22 23 24 25 26 27
1226+
| the first key | the second key | shared secret
1227+
00 01 02 03 04 05 06 07 ... 10 11 12 13 14 15 16 17 ... 20 21 22 23 24 25 26 27
12261228
```
12271229

1228-
this indicates that Alice is verifying another user (say Bob), in response to
1229-
the request from event "$ABCD...", her cross-signing key is
1230+
Mode `0x00` indicates that Alice is verifying another user (say Bob), in
1231+
response to the request from event "$ABCD...", her master key is
12301232
`0001020304050607...` (which is "AAECAwQFBg..." in base64), she thinks that
1231-
Bob's cross-signing key is `1011121314151617...` (which is "EBESExQVFh..." in
1233+
Bob's master key is `1011121314151617...` (which is "EBESExQVFh..." in
12321234
base64), and the shared secret is `2021222324252627` (which is "ICEiIyQlJic" in
12331235
base64).
12341236

@@ -1300,8 +1302,8 @@ one of its variants.
13001302
Clients must only store keys in backups after they have ensured that the
13011303
`auth_data` is trusted. This can be done either by:
13021304

1303-
- checking that it is signed by the user's [master cross-signing
1304-
key](#cross-signing) or by a verified device belonging to the same user, or
1305+
- checking that it is signed by the user's [master key](#cross-signing)
1306+
or by a verified device belonging to the same user, or
13051307
- deriving the public key from a private key that it obtained from a trusted
13061308
source. Trusted sources for the private key include the user entering the
13071309
key, retrieving the key stored in [secret storage](#secret-storage), or
@@ -1786,13 +1788,14 @@ a way to identify the server's support for fallback keys.
17861788

17871789
| Parameter | Type | Description |
17881790
|------------|-----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------|
1789-
| changed | [string] | List of users who have updated their device identity or cross-signing keys, or who now share an encrypted room with the client since the previous sync response. |
1791+
| changed | [string] | List of users who have updated their device identity or their master, self-signing or user-signing keys, or who now share an encrypted room with the client since the previous sync response. |
17901792
| left | [string] | List of users with whom we do not share any encrypted rooms anymore since the previous sync response. |
17911793

17921794
{{% boxes/note %}}
17931795
For optimal performance, Alice should be added to `changed` in Bob's
1794-
sync only when she updates her devices or cross-signing keys, or when
1795-
Alice and Bob now share a room but didn't share any room previously.
1796+
sync only when she updates her devices or master, self-signing or
1797+
user-signing keys, or when Alice and Bob now share a room but didn't
1798+
share any room previously.
17961799
However, for the sake of simpler logic, a server may add Alice to
17971800
`changed` when Alice and Bob share a new room, even if they previously
17981801
already shared a room.

data/api/client-server/cross_signing.yaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,16 @@ paths:
2121
x-addedInMatrixVersion: "1.1"
2222
x-changedInMatrixVersion:
2323
"1.11": UIA is not always required for this endpoint.
24-
summary: Upload cross-signing keys.
24+
summary: Upload keys used for cross-signing.
2525
description: |-
26-
Publishes cross-signing keys for the user.
26+
Publishes keys used for cross-signing for the user.
2727
2828
This API endpoint uses the [User-Interactive Authentication API](/client-server-api/#user-interactive-authentication-api).
2929
3030
User-Interactive Authentication MUST be performed, except in these cases:
31-
- there is no existing cross-signing master key uploaded to the homeserver, OR
32-
- there is an existing cross-signing master key and it exactly matches the
33-
cross-signing master key provided in the request body. If there are any additional
31+
- there is no existing master key uploaded to the homeserver, OR
32+
- there is an existing master key and it exactly matches the
33+
master key provided in the request body. If there are any additional
3434
keys provided in the request (self-signing key, user-signing key) they MUST also
3535
match the existing keys stored on the server. In other words, the request contains
3636
no new keys.

data/api/client-server/definitions/cross_signing_key.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
# limitations under the License.
1414
type: object
1515
title: CrossSigningKey
16-
description: Cross signing key
16+
description: Key used for cross signing
1717
properties:
1818
user_id:
1919
type: string

data/api/client-server/keys.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ paths:
219219
x-addedInMatrixVersion: "1.1"
220220
type: object
221221
description: |-
222-
Information on the master cross-signing keys of the queried users.
222+
Information on the master keys of the queried users.
223223
A map from user ID, to master key information. For each key, the
224224
information returned will be the same as uploaded via
225225
`/keys/device_signing/upload`, along with the signatures

data/api/server-server/definitions/event-schemas/m.signing_key_update.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ type: object
1717
title: m.signing_key_update
1818
description: |-
1919
An EDU that lets servers push details to each other when one of their users
20-
updates their cross-signing keys.
20+
updates their keys used for cross-signing.
2121
allOf:
2222
- $ref: ../edu.yaml
2323
- type: object
@@ -34,7 +34,7 @@ allOf:
3434
properties:
3535
user_id:
3636
type: string
37-
description: The user ID whose cross-signing keys have changed.
37+
description: The user ID whose keys have changed.
3838
example: "@alice:example.com"
3939
master_key:
4040
allOf:

data/api/server-server/user_devices.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ paths:
7979
- keys
8080
master_key:
8181
type: object
82-
description: The user\'s master cross-signing key.
82+
description: The user\'s master key.
8383
allOf:
8484
- $ref: ../client-server/definitions/cross_signing_key.yaml
8585
- example:

data/api/server-server/user_keys.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ paths:
194194
x-addedInMatrixVersion: "1.1"
195195
type: object
196196
description: |-
197-
Information on the master cross-signing keys of the queried users.
197+
Information on the master keys of the queried users.
198198
A map from user ID, to master key information. For each key, the
199199
information returned will be the same as uploaded via
200200
`/keys/device_signing/upload`, along with the signatures

0 commit comments

Comments
 (0)