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
@@ -201,13 +218,74 @@ Verification security depends on entropy of the answer, `SMP` verification must
201
218
202
219
Server remains unaware of trust relationships. Server is not aware of verification success. Verification is end-to-end.
203
220
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*.
221
+
The reason we use `per-contact keys` instead of our main identity keys is for **plausible unlinkability**, because `per-contact keys` are only exchanged *briefly*.
205
222
206
223
Neither `Alice` nor `Bob` can prove each other's ownership defintively.
207
224
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).
225
+
This **plausible unlinkability** only occurs if the server wasn't always malicious. (I.e. the server did not log `Alice` nor `Bob` requests containing their public_key).
226
+
227
+
This **plausible unlinkability** only occurs if the server was compromised *After* SMP verification is complete.
228
+
229
+
Additionally, this **plausible unlinkability** will be the basis on which we build **plausible deniability** later on with `OTP` pads and `PFS`.
230
+
231
+
`SMP` verification, if done relatively quickly with an answer with sufficent entropy, provides an *unbreakable mathmatical guarantee of authenticity* and integrity for the verification of the keys (Assuming no hash collisions).
232
+
233
+
## 5. Perfect Forward Secrecy
234
+
Perfect Forward Secrecy (PFS) ensure that if a ML-KEM-1024 keypair was compromised, it does not affect keys before, and after it.
235
+
236
+
### 5.1. Assumptions
237
+
`Alice` wants to generate / rotate ephemeral `ML-KEM-1024` (`Kyber1024`) keys with `Bob`.
238
+
`Alice` and `Bob` have verified each other's `per-contact` keys using `SMP`
239
+
240
+
### 5.2. PFS Exchange
241
+
`Alice` generates new ephemeral `ML-KEM-1024` keypair and signs them with her `per-contact` keys for `Bob`
242
+
243
+
`Alice` then checks if she already has a last `hash chain` state for `Bob`, if not, she generates new `hash chain` initial seed:
244
+
```python
245
+
hash_chain_seed = random_bytes(32)
246
+
```
247
+
And saves it in her local state file.
248
+
249
+
250
+
Afterwards, `Alice` computes the next hash in the chain:
251
+
```python
252
+
next_hash_chain = sha3_512(last_hash_chain_state)
253
+
```
254
+
255
+
Then adds `next_hash_chain` to start of her `Kyber` public key
"kyber_hashchain_signature": "the signature of kyber_publickey_hashchain base64 encoded",
267
+
"recipient": "Bob's user ID"
268
+
}
269
+
```
270
+
271
+
`Bob` receives, base64 decodes, and verifies the signature, and if valid, he first checks if he has a last `hash chain` state for `Alice`, if not, he sets the first `64 bytes` of `kyber_publickey_hashchain` as the last `hash chain` state.
272
+
273
+
If he already had a last `hash chain` state for `Alice`, he would compute it, and compare it with the hash chain `Alice` bundled in `kyber_publickey_hashchain`, and only proceeds if valid.
274
+
275
+
`Bob` then saves `Alice`'s ephemeral `Kyber1024` public key by extracting `1568 bytes` starting after the first `64 bytes` of `kyber_publickey_hashchain`.
276
+
277
+
Then `Bob` does the same as `Alice` did, generating his own `hash chain` seed if needed, generating new ephemeral `Kyber1024` keypair, and sending it back to `Alice`
278
+
279
+
`Alice` then does the same verification steps `Bob` did, and saves his key.
280
+
281
+
Now `Alice` and `Bob` both have each other ephemeral public keys, Have successfully rotated their ephemeral keys.
282
+
283
+
### 5.3. Security notes
284
+
We use `hash chain`s for replay protection.
285
+
We also use `per-contact` keys for tampering and spoofing protection.
286
+
209
287
210
-
This **plausible deniability** only occurs if the server was compromised *After* SMP verification is complete.
0 commit comments