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 Mar 10, 2026. It is now read-only.
Copy file name to clipboardExpand all lines: PROTOCOL.md
+56-30Lines changed: 56 additions & 30 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,52 +8,67 @@ Author: ChadSec (Freedom Club)
8
8
### 1.1. Prologue
9
9
10
10
Coldwire is a post-quantum secure communication protocol focused on:
11
-
- Minimal metadata leakage
12
-
- 0-trust in server (server is just a dumb relay)
13
-
- Messages & Keys plausible deniblity
14
-
- Post-quantum future proofing
15
-
- Design minimalism
11
+
- Minimal metadata
12
+
-*0-trust* in server (server is just a dumb relay, and is always assumed malicious)
13
+
- Messages & Keys plausible deniblity
14
+
- Post-quantum future proofing (NIST Post-quantum algorithms with tier-5 security)
15
+
- Design minimalism (few dependecies, simple UI)
16
+
16
17
17
18
There are a **best** and **worst** case scenario for Coldwire's security:
18
-
-**Best case security**: Provides unbreakable encryption, no matter how much compute power an adversary has, by utilizing One-time-Pads (OTP) encryption.
19
+
-**Best case security**: Provides *unbreakable encryption*, no matter how much compute power an adversary has, by utilizing One-time-Pads (OTP) encryption.
19
20
20
21
-**Worst case security**: Falls back to `ML-KEM-1024` (`Kyber1024`) security
21
22
23
+
We depend on The Open-Quantum Safe Project for the implementation of the Post-Quantum (PQ) algorithms.
24
+
25
+
We have chosen Python for our first `client` implementation for rapid development, and memory-safety. Additionally, this saves us from distributing binaries, which is a great thing security wise.
26
+
27
+
What you see in the source code tree, is exactly what you get. No surpises.
28
+
29
+
Additionally, we do extra effort to prevent 0-day exploits (memory-safety issues) in the underlying LibOQS and Tkinter libraries, by always truncating buffers to safe lengths before passing on to the libraries, we reduce the risk of buffer-overflows.
22
30
23
31
There are no persistent contact lists or user directories on the server, no concept of friend requests server-side, no usernames, no avatars, no bio, IPs, no online status, no metadata.
24
32
25
-
Server only relays encrypted data between clients, deleting data after delivery. Data is only kept in an in-memory database (official implementation uses Redis).
33
+
Server only relays encrypted data between clients, deleting data after delivery. Data is only kept in an in-memory database (official server implementation uses Redis).
26
34
27
35
### 1.2. Terminology & Wording
28
36
29
-
`Alice`: User initiating verification (User 1)
37
+
`Alice`: Our user, or a hypothetical `User 1`
30
38
31
-
`Bob`: Contact being verified (User 2)
39
+
`Bob`: Our Contact, or a hypothetical `User 2`
32
40
33
41
`Client`: The Coldwire client software (context-dependent, could refer to user or app)
34
42
35
43
`User`: The human end-user (not the software)
44
+
36
45
`SMP`: Socialist Millionaire Problem
37
46
38
-
All requests payloads and responses are sent & received in `JSON` format, unless expliclity stated otherwise.
47
+
`Dilithium`, `Dilithium5`: Interchangeably refers to `ML-DSA-87`
48
+
49
+
`Kyber`, `Kyber1024`: Interchangeably refers to `ML-KEM-1024`
50
+
51
+
`per-contact keys`: Refers to a keypair whose public key is **only sent once** to a contact in the `SMP` phase.
52
+
53
+
*All* requests payloads and responses are sent & received in `JSON` format, unless expliclity stated otherwise.
*Both* clients mark each others per-contact keys as verified locally.
192
+
Now those keys serve as "root of trust" for Perfect Forward Secrecy (PFS) ephemeral keys exchanges.
193
+
194
+
### 4.6. SMP Security notes
172
195
173
-
If valid: mutual key verification established.
196
+
Per-contact keypairs ensure compartmentalization of trust, we don't re-use our main authentication key for optimal cryptographic hygiene.
174
197
175
-
Both clients mark contact as verified locally.
198
+
Verification security depends on entropy of the answer, `SMP` verification must occur within a relatively short timeframe to avoid brute-force feasibility.
176
199
177
-
### SMP Security notes
200
+
`SMP` answer entropy doesn't have to be astronomically large, it just has to have enough entropy to be uncrackable for the duration of the `SMP` verification process.
178
201
179
-
Per-contact keypairs ensure compartmentalization of trust.
202
+
Server remains unaware of trust relationships. Server is not aware of verification success. Verification is end-to-end.
180
203
181
-
Verification security depends on entropy of shared answer.
204
+
The reason we use `per-contact keys` instead of our main identity keys is for **plausible deniability**, because `per-contact keys` are only exchanged *briefly*.
182
205
183
-
SMP interaction must occur within short timeframe to avoid brute-force feasibility.
206
+
Neither `Alice` nor `Bob` can prove each other's ownership defintively.
184
207
185
-
Server remains unaware of trust relationships; verification is end-to-end.
208
+
This **plausible deniability** only occurs if the server wasn't always malicious. (I.e. the server did not log `Alice` nor `Bob` requests containing their public_key).
186
209
210
+
This **plausible deniability** only occurs if the server was compromised *After* SMP verification is complete.
0 commit comments