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
The *`Strandlock`* Protocol is a composite encryption protocol designed to intertwine multiple cryptographic primitives to achieve robust security. Its purpose is to ensure that the compromise of one, two, or even three different cryptographic primitives does not jeopardize the confidentiality or integrity of messages.
11
17
12
18
Even if `ML-KEM-1024` and `Classic McEliece-8192128` are broken, messages remain secure, provided that the initial `SMP` verification request is not intercepted. If the initial SMP request is intercepted, security is maintained as long as the SMP answer retains sufficient entropy.
19
+
13
20
If `xChaCha20poly1305` is broken, messages remain safe as long as (at least) one `KEM` is uncompromised.
21
+
14
22
If `OTP` implementation has mistakes, messages remain safe as long as `xChaCha20Poly1305` is remains unbroken.
15
23
16
24
If Both `KEMs`, and `xChaCha20Poly1305` are compromised in future, as long as `OTP batch` request was not intercepted nor logged, messages remain safe.
@@ -52,13 +60,14 @@ Every request includes a message type identifier, which may be visible only in t
52
60
53
61
##### Nonces:
54
62
Each request contains a `24-bytes nonce` immediately following the `type` field. These `nonces` are meant to be used for the next request to prevent metadata leakage, replay attacks, and on the small off-chance that a randomly generated nonce repeats twice, network adversaries wouldn't know a nonce reuse occured.
63
+
55
64
Additionally, while all public security proofs of `xChaCha20Poly1305` assume nonce is public, encrypting and or hiding the `nonce` might actually "future-proof" `xChaCha20Poly1305` against potentinal future attacks, leaving only open window through pure dumb brute-forcing of `32 bytes` key space.
56
65
57
66
##### Encryption:
58
67
All payloads are encrypted with `XChaCha20Poly1305`, except for the `SMP` initiation stage.
59
68
60
69
##### Human Verification:
61
-
SMP enforces a human-verifiable question-and-answer process before any chat communication. This prevents "trust on first use"-style attacks that plagues other encrypted protocols.
70
+
`SMP` enforces a human-verifiable question-and-answer process before any chat communication. This prevents "trust on first use"-style attacks that plagues other encrypted protocols.
`Bob` then saves the new keys, and marks `Alice` as `SMP` verified.
192
202
193
-
3.5 Final Verification (`Alice`):
203
+
##### 3.5 Final Verification (`Alice`):
194
204
195
205
`Alice` decrypts `Bob’s``SMP` payload and verifies `Bob’s` proof.
196
206
197
-
If valid, she applies the same XOR transformation to the `Strand Keys`, and saves them.
207
+
If valid, she applies the same `XOR` transformation to the `Strand Keys`, and saves them.
198
208
199
209
`Alice` marks `Bob` as verified.
200
210
@@ -212,11 +222,14 @@ Nonces are embedded in payloads, not sent in clear, except in step 2 and SMP fai
212
222
213
223
Do not confuse `Strand Nonces` with `SMP Nonces`, the latter is only used for SMP process (as salt for `Argon2id`, etc, not for encryption), while the former is used in Step 3 and onwards, even in other requests types (`PFS`, `MSGS`, etc.)
214
224
225
+
215
226
The security of the `SMP` process depends entirely on the entropy of the user-provided `answer`, we use extreme `Argon2id` parameters to protect against a *"god-like"* adversary with virtually *unlimited* computing power, and we salt the answer to prevent *Rainbow-style* attacks. **However**, if `answer` is *low-entropy*, even such measures cannot completely prevent the cracking of the answer.
227
+
216
228
We highly recommend implementations to only allow user to set a `8+ character` answer, and to check the entropy of provided answer (is all lowercase, is all uppercase, is only digits, etc), and to warn (or prevent) the user from continuing.
217
229
218
230
Even though the `question` is encrypted, an active *Man-in-the-middle* adversary **can still retrieve it**. The verification would fail, but the adversary would have the `question` plaintext.
219
231
This is acceptable, as the purpose of encrypting `SMP` process is to hide *metadata* against **passive** adversaries, not an **active** adversary.
232
+
220
233
The question **must not** contain any senstive data. And it must not contain any hints to the answer.
221
234
Implementations **must** check `answer` and `question` in initation stage, to ensure neither contain the other.
0 commit comments