Skip to content
This repository was archived by the owner on Aug 15, 2025. It is now read-only.

Commit c53a37b

Browse files
committed
lots of clarifications and new security idea
1 parent 4c7dc8c commit c53a37b

File tree

1 file changed

+28
-9
lines changed
  • docs/Protocol Specifications

1 file changed

+28
-9
lines changed

docs/Protocol Specifications/core.md

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -593,15 +593,22 @@ of the key change, it must be informed of the change upon reconnection.
593593
polyproto does not require the use of CRLs or OCSP.
594594

595595
An ID-Cert can be revoked by the home server or the actor at any time. This can be done for various
596-
reasons, such as a suspected leak of the private identity key. When an ID-Cert is revoked, the server
597-
must revoke the session associated with the revoked ID-Cert. Revoking an ID-Cert is considered a
598-
[sensitive action](#412-sensitive-actions) and therefore should require a second factor of authentication.
596+
reasons, such as a suspected leak of the private identity key.
597+
598+
When an ID-Cert is revoked, the server must revoke the session associated with the revoked ID-Cert.
599+
Revoking an ID-Cert is considered a [sensitive action](#412-sensitive-actions) and therefore should
600+
require a second factor of authentication.
599601

600602
!!! info
601603

602604
The above paragraph is true for both foreign and home servers. The API routes associated with
603605
revoking an ID-Cert are the same regardless of the server type.
604606

607+
!!! info "Revocation detection"
608+
609+
For information on how revocation detection is supposed to be handled, concern the excerpt
610+
<a href="#idcert-cache-ttls">"Caching ID-Certs and cache TTLs"</a>
611+
605612
TODO: Write about identifier changing and how to handle that across servers
606613
TODO: Perhaps recommend never using more than a specified number of certificates at once to make
607614
re-signing easier
@@ -632,7 +639,7 @@ ID-Cert attached to the message and ensuring its public key matches the sender's
632639
signatures and [weak public keys](https://en.wikipedia.org/wiki/Weak_key) must be rejected.
633640

634641
**Example:** Say we have two actors. Alice, who is registered on Server A, and Bob, who is registered
635-
on Server B. Alice and Bob are having a conversation on Server B. Given a signed message from Alice,
642+
on Server B. Alice and Bob **are having a conversation on Server B**. Given a signed message from Alice,
636643
such as Bob would receive from Server B, the process of verifying the signature would look like this:
637644

638645
```mermaid
@@ -644,6 +651,10 @@ participant sb as Server B
644651
participant sa as Server A
645652
646653
sb->>b: Alice's signed message
654+
opt Server A's ID-Cert is not cached on Bob's client
655+
b->>sa: Request Server A ID-Cert
656+
sa->>b: Server A ID-Cert
657+
end
647658
opt Alice's ID-Cert is not cached on Bob's client
648659
b->>sb: Request Alice's ID-Cert
649660
opt Alice's ID-Cert is not cached on Server B
@@ -652,10 +663,6 @@ opt Alice's ID-Cert is not cached on Bob's client
652663
end
653664
sb->>b: Alice's ID-Cert
654665
end
655-
opt Server A's ID-Cert is not cached on Bob's client
656-
b->>sa: Request Server A ID-Cert
657-
sa->>b: Server A ID-Cert
658-
end
659666
b->>b: Verify signature of Alice's message (Fig. 4)
660667
```
661668

@@ -664,6 +671,8 @@ b->>b: Verify signature of Alice's message (Fig. 4)
664671
Bob's client and Server B should now cache Server A's and Alice's ID-Certs, to avoid having to
665672
request them again.
666673

674+
<a name="idcert-cache-ttls" id="idcert-cache-ttls"></a>
675+
667676
The TTL (time to live) of these cached items should be relatively short. Recommended values
668677
are between one (1) and twelve (12) hours. Cached ID-Certs must be evicted from
669678
the cache, after the TTL has expired. Expired cached ID-Certs must not be used for signature
@@ -721,7 +730,17 @@ end
721730
*Fig. 4: Sequence diagram showing how message verification should be handled if the first attempt
722731
to verify the signature fails.*
723732

724-
??? question "Why should Bob's client request Alice's public identity key from his own server first?"
733+
TODO: IDEA: To keep other servers from not re-requesting the idcert after the ttls has passed, the
734+
idcert should have some sort of timestamp that is signed by the original server, so that clients can
735+
verify that a server has the most up-to-date idcert cached for a user -flori
736+
737+
??? question "Why should Bob's client request Alice's public identity key from Server B first, if Alice's identity lives on Server A?"
738+
739+
In the case where `[email protected]` and `[email protected]` are having a
740+
conversation where the communications server is any server other than `server-a.example.com`,
741+
Bob should request Alice's ID-Cert from that server first, instead of from `server-a.example.com`.
742+
743+
For this example, where Alice "is on" Server A and Bob "is on" Server B:
725744

726745
Bob's client could request Alice's public identity key from Server A, instead of Server B.
727746
However, this is discouraged, as it

0 commit comments

Comments
 (0)