You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Jan 2, 2026. It is now read-only.
_Fig. X: Demonstration of authentication on a foreign server._
924
967
925
968
Before a foreign actor is allowed to send messages on the server, the server must also check with
926
-
the actor's home server to ensure that the ID-Cert has not been revoked. See [section 6.4.1](#641-verifying-that-a-newly-retrieved-id-cert-is-not-out-of-date)
927
-
for information on how this is done.
969
+
the actor's home server to ensure that the ID-Cert has not been revoked (steps #9 and #10 in the
970
+
diagram). See [section 6.4.1](#641-verifying-that-a-newly-retrieved-id-cert-is-not-out-of-date) for
971
+
information on how this is done.
928
972
929
-
#### 4.1.2 Sensitive actions
973
+
#### 4.2 Sensitive actions
930
974
931
975
TODO: Better describe "Sensitive-Solution".
932
976
@@ -962,7 +1006,7 @@ value of this header is to be that password.
962
1006
963
1007
:::
964
1008
965
-
### 4.2 Challenge strings
1009
+
### 4.3 Challenge strings
966
1010
967
1011
Servers use challenge strings to verify an actor's private identity key
968
1012
possession without revealing the private key itself. These strings, ranging from 32 to 256
@@ -972,8 +1016,8 @@ ID-Cert to the server, which then verifies the signature's authenticity.
972
1016
973
1017
:::warning
974
1018
975
-
Challenge strings provide a different set of security guarantees than[sensitive actions](#412-sensitive-actions)
976
-
do. They are not to be used interchangeably.
1019
+
Challenge strings provide a different set of security guarantees than
1020
+
[sensitive actions](#42-sensitive-actions)do. They are not to be used interchangeably.
977
1021
978
1022
:::
979
1023
@@ -1020,7 +1064,12 @@ else
1020
1064
end
1021
1065
```
1022
1066
1023
-
### 4.3 Protection against misuse by malicious home servers
1067
+
<!-- prettier-ignore-start -->
1068
+
<!-- markdownlint-disable-next-line MD036 -->
1069
+
_Fig. X: Challenge string validation_
1070
+
<!-- prettier-ignore-end -->
1071
+
1072
+
### 4.4 Protection against misuse by malicious home servers
1024
1073
1025
1074
To protect users from misuse by malicious home servers, a mechanism is needed to prevent home
1026
1075
servers from generating federation tokens for users without their consent and knowledge.
@@ -1054,11 +1103,11 @@ excluding the new session. The `NEW_SESSION` event's stored data can be accessed
1054
1103
:::note
1055
1104
1056
1105
With proper safety precautions and strong encryption, it is extremely unlikely for a malicious
1057
-
server to be able to listen in on encrypted conversations, without all users in that
1058
-
conversation noticing. When implementing the polyproto-mls P2 extension, MLS's forward secrecy
1059
-
guarantees ensure that, in theory, a malicious session cannot decrypt any messages sent before
1060
-
its' join epoch. If secrecy or confidentiality are of concern, users should host their own home
1061
-
server and use end-to-end encryption, such as polyproto-mls.
1106
+
server to be able to listen in on encrypted conversations, without all users in that conversation
1107
+
noticing. When implementing the polyproto-mls P2 extension, MLS's forward secrecy guarantees ensure
1108
+
that, in theory, a malicious session cannot decrypt any messages sent before its join epoch. If
1109
+
secrecy or confidentiality are of concern, users should host their own home server and use
1110
+
end-to-end encryption, such as polyproto-mls.
1062
1111
1063
1112
:::
1064
1113
@@ -1106,7 +1155,7 @@ The ID-Cert, an [X.509](https://en.wikipedia.org/wiki/X.509) certificate, valida
1106
1155
identity key. It is an actor-generated CSR ([Certificate Signing Request](https://en.wikipedia.org/wiki/Certificate_signing_request)),
1107
1156
signed by a home server, encompassing actor identity information and the client's public identity key.
1108
1157
Clients can get an ID-Cert in return for a valid and well-formed CSR. Generating a new ID-Cert is
1109
-
considered a [sensitive action](#412-sensitive-actions) and therefore should require a second factor
1158
+
considered a [sensitive action](#42-sensitive-actions) and therefore should require a second factor
1110
1159
of authentication.
1111
1160
1112
1161
A CSR in the context of polyproto will be referred to as an ID-CSR. ID-CSRs are DER- or PEM-encoded
@@ -1257,13 +1306,13 @@ malicious server cannot generate an identity key pair for Alice, which is signed
1257
1306
1258
1307
#### 6.1.3 Key rotation
1259
1308
1260
-
A session can choose to regenerate their ID-Cert at any time. This is done by taking an identity
1261
-
key pair, using the private key to generate a new CSR, and sending the new Certificate Signing
1262
-
Request to the home server. The home server will then generate the new ID-Cert, given that
1263
-
the CSR is valid. Actors can only regenerate ID-Certs for their current session, identified by their
1264
-
session ID and session token. Other sessions can only be invalidated by[revoking them](#614-early-revocation-of-id-certs).
1265
-
Re-generating an ID-Cert is a[sensitive action](#412-sensitive-actions), performed by using the
1266
-
appropriate API route.
1309
+
A session can choose to regenerate their ID-Cert at any time. This is done by taking an identity key
1310
+
pair, using the private key to generate a new CSR, and sending the new Certificate Signing Request
1311
+
to the home server. The home server will then generate the new ID-Cert, given that the CSR is valid.
1312
+
Actors can only regenerate ID-Certs for their current session, identified by their session ID and
1313
+
session token. Other sessions can only be invalidated by
1314
+
[revoking them](#614-early-revocation-of-id-certs). Re-generating an ID-Cert is a
1315
+
[sensitive action](#42-sensitive-actions), performed by using the appropriate API route.
1267
1316
1268
1317
Home servers must keep track of the ID-Certs of all users (and their clients) registered on them
1269
1318
and must offer a clients' ID-Cert for a given timestamp on request. This is to ensure messages
@@ -1345,7 +1394,7 @@ reasons, such as
1345
1394
- keeping the number of ID-Certs associated with an actor within a desired boundary
1346
1395
1347
1396
When an ID-Cert is revoked, the server must revoke the session associated with the revoked ID-Cert.
1348
-
Revoking an ID-Cert is considered a [sensitive action](#412-sensitive-actions) and therefore should
1397
+
Revoking an ID-Cert is considered a [sensitive action](#42-sensitive-actions) and therefore should
1349
1398
require a second factor of authentication.
1350
1399
1351
1400
{/*TODO*/}
@@ -2294,12 +2343,12 @@ JSON file.
2294
2343
### 7.4 Challenges and trust
2295
2344
2296
2345
Changing the publicly visible ownership of actor data requires the chain of trust to be maintained.
2297
-
If an "old" account wants to change the publicly visible ownership of its data, the "old"
2298
-
account must prove that it possesses the private keys that were used to
2299
-
sign the messages. This is done by signing a [challenge string](#42-challenge-strings) with the private
2300
-
keys. If the server verifies the challenge, it authorizes the new account to re-sign the old
2301
-
account's messages signed with the verified key. Instead of overwriting the message, a new message variant
2302
-
with the new signature is created, preserving the old message.
2346
+
If an "old" account wants to change the publicly visible ownership of its data, the "old" account
2347
+
must prove that it possesses the private keys that were used to sign the messages. This is done by
2348
+
signing a [challenge string](#42-sensitive-actions) with the private keys. If the server verifies
2349
+
the challenge, it authorizes the new account to re-sign the old account's messages signed with the
2350
+
verified key. Instead of overwriting the message, a new message variant with the new signature is
2351
+
created, preserving the old message.
2303
2352
2304
2353
Implementations and protocol extensions should carefully consider the extent of messages that can be
0 commit comments