mirror of https://github.com/waku-org/specs.git
Update noise-sessions.md
This commit is contained in:
parent
cf6b9203b9
commit
30cd4bc29f
|
@ -8,7 +8,7 @@ contributors:
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
||||||
In [35/WAKU2-NOISE](https://rfc.vac.dev/35/) we defined how Waku messages' payloads can be encrypted using key material derived from key agreements based on the [Noise Protocol Framework](http://www.noiseprotocol.org/noise.html).
|
In [WAKU2-NOISE](../noise.md) we defined how Waku messages' payloads can be encrypted using key material derived from key agreements based on the [Noise Protocol Framework](http://www.noiseprotocol.org/noise.html).
|
||||||
|
|
||||||
Once two users complete a Noise handshake,
|
Once two users complete a Noise handshake,
|
||||||
an encryption/decryption session - _or a Noise session_ - would be instantiated.
|
an encryption/decryption session - _or a Noise session_ - would be instantiated.
|
||||||
|
@ -37,14 +37,14 @@ since it is required to either retrieve and encrypt/decrypt any further exchange
|
||||||
Once a Noise session is instantiated,
|
Once a Noise session is instantiated,
|
||||||
any further encrypted message between Alice and Bob within this session is exchanged on a `contentTopic` with name `/{application-name}/{application-version}/wakunoise/1/sessions/{ct-id}/proto`,
|
any further encrypted message between Alice and Bob within this session is exchanged on a `contentTopic` with name `/{application-name}/{application-version}/wakunoise/1/sessions/{ct-id}/proto`,
|
||||||
where `ct-id = Hash(Hash(session-id))`
|
where `ct-id = Hash(Hash(session-id))`
|
||||||
and `/{application-name}/{application-version}/` identifies the application currently employing [35/WAKU2-NOISE](https://rfc.vac.dev/35/).
|
and `/{application-name}/{application-version}/` identifies the application currently employing [WAKU2-NOISE](../noise.md).
|
||||||
|
|
||||||
## Session states
|
## Session states
|
||||||
|
|
||||||
A Noise session corresponding to a certain `session-id`:
|
A Noise session corresponding to a certain `session-id`:
|
||||||
- is always **active** as long as it is not marked as **stale**.
|
- is always **active** as long as it is not marked as **stale**.
|
||||||
For an active `session-id`, new messages are published on the content topic `/{application-name}/{application-version}/wakunoise/1/sessions/{ct-id}/proto`;
|
For an active `session-id`, new messages are published on the content topic `/{application-name}/{application-version}/wakunoise/1/sessions/{ct-id}/proto`;
|
||||||
- is marked as **stale** if a [session termination message](https://rfc.vac.dev/spec/35/#session-termination-message) containing `Hash(session-id)` is published on the content topic `/{application-name}/{application-version}/wakunoise/1/sessions/{ct-id}/proto`.
|
- is marked as **stale** if a [session termination message](../noise.md/#session-termination-message) containing `Hash(session-id)` is published on the content topic `/{application-name}/{application-version}/wakunoise/1/sessions/{ct-id}/proto`.
|
||||||
Session information relative to stale sessions MAY be deleted from users' device, unless required for later channel binding purposes.
|
Session information relative to stale sessions MAY be deleted from users' device, unless required for later channel binding purposes.
|
||||||
|
|
||||||
When a Noise session is marked as stale, it means that one party requested its termination while being online,
|
When a Noise session is marked as stale, it means that one party requested its termination while being online,
|
||||||
|
@ -68,7 +68,7 @@ and parties are required to instantiate a new Noise session if they wish to comm
|
||||||
However, parties can optionally persist and include the `session-id` corresponding to a stale Noise session in the [prologue information](https://noiseprotocol.org/noise.html#prologue) employed in the Noise handshake they execute to instantiate their new Noise session.
|
However, parties can optionally persist and include the `session-id` corresponding to a stale Noise session in the [prologue information](https://noiseprotocol.org/noise.html#prologue) employed in the Noise handshake they execute to instantiate their new Noise session.
|
||||||
This effectively emulates a mechanism to _"re-activate"_ a stale Noise session by binding it to a newly created active Noise session.
|
This effectively emulates a mechanism to _"re-activate"_ a stale Noise session by binding it to a newly created active Noise session.
|
||||||
|
|
||||||
In order to reduce users' metadata leakage, it is desirable (as suggested in [35/WAKU2-NOISE](https://rfc.vac.dev/spec/35/#after-handshake)) that content topics used for communications change every time a new message is exchanged.
|
In order to reduce users' metadata leakage, it is desirable (as suggested in [WAKU2-NOISE](../noise.md/#after-handshake)) that content topics used for communications change every time a new message is exchanged.
|
||||||
This can be easily realized by employing a key derivation function to compute a new `session-id` from the previously employed one (e.g. `session-id = HKDF(prev-session-id)`),
|
This can be easily realized by employing a key derivation function to compute a new `session-id` from the previously employed one (e.g. `session-id = HKDF(prev-session-id)`),
|
||||||
while keeping the Inbound/outbound Cipher States, the content topic derivation mechanism and the stale mechanism the same as above.
|
while keeping the Inbound/outbound Cipher States, the content topic derivation mechanism and the stale mechanism the same as above.
|
||||||
In this case, when one party sends **and** receives at least one message,
|
In this case, when one party sends **and** receives at least one message,
|
||||||
|
@ -113,7 +113,7 @@ such two devices stop to reciprocally propagate any information regarding Noise
|
||||||
|
|
||||||
As regards security, an attacker that compromises an encrypted message propagating session information,
|
As regards security, an attacker that compromises an encrypted message propagating session information,
|
||||||
might be able to compromise one or multiple messages exchanged within the session such information refers to.
|
might be able to compromise one or multiple messages exchanged within the session such information refers to.
|
||||||
This can be mitigated by adopting techniques similar to the the ones proposed in [35/WAKU2-NOISE](https://rfc.vac.dev/spec/35/#after-handshake),
|
This can be mitigated by adopting techniques similar to the the ones proposed in [WAKU2-NOISE](../noise.md/#after-handshake),
|
||||||
where encryption keys are changed every time a new message is exchanged.
|
where encryption keys are changed every time a new message is exchanged.
|
||||||
|
|
||||||
This session management mechanism is loosely based on the paper ["Multi-Device for Signal"](https://eprint.iacr.org/2019/1363.pdf).
|
This session management mechanism is loosely based on the paper ["Multi-Device for Signal"](https://eprint.iacr.org/2019/1363.pdf).
|
||||||
|
@ -149,7 +149,7 @@ This session management mechanism is loosely based on [Signal's Sesame Algorithm
|
||||||
|
|
||||||
# References
|
# References
|
||||||
- [13/WAKU2-STORE](https://rfc.vac.dev/spec/13/)
|
- [13/WAKU2-STORE](https://rfc.vac.dev/spec/13/)
|
||||||
- [35/WAKU2-NOISE](https://rfc.vac.dev/35/)
|
- [WAKU2-NOISE](../noise.md)
|
||||||
- [The Noise Protocol Framework](http://www.noiseprotocol.org/noise.html)
|
- [The Noise Protocol Framework](http://www.noiseprotocol.org/noise.html)
|
||||||
- [The Sesame Algorithm: Session Management for Asynchronous Message Encryption](https://signal.org/docs/specifications/sesame/)
|
- [The Sesame Algorithm: Session Management for Asynchronous Message Encryption](https://signal.org/docs/specifications/sesame/)
|
||||||
- ["Multi-Device for Signal"](https://eprint.iacr.org/2019/1363.pdf)
|
- ["Multi-Device for Signal"](https://eprint.iacr.org/2019/1363.pdf)
|
||||||
|
|
Loading…
Reference in New Issue