mirror of
https://github.com/logos-messaging/specs.git
synced 2026-01-02 14:13:06 +00:00
Update dandelion.md
This commit is contained in:
parent
b6494b7894
commit
e8cdcfd881
@ -21,8 +21,8 @@ instead of disseminating messages as per usual relay operation.
|
|||||||
|
|
||||||
## Background and Motivation
|
## Background and Motivation
|
||||||
|
|
||||||
[Waku Relay](https://rfc.vac.dev/waku/standards/core/11/relay), offers privacy, pseudonymity, and a first layer of anonymity protection by design.
|
[Waku Relay](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/11/relay.md), offers privacy, pseudonymity, and a first layer of anonymity protection by design.
|
||||||
Being a modular protocol family [Waku v2](https://rfc.vac.dev/waku/standards/core/10/waku2)
|
Being a modular protocol family [Waku v2](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/10/waku2.md)
|
||||||
offers features that inherently carry trade-offs as separate building blocks.
|
offers features that inherently carry trade-offs as separate building blocks.
|
||||||
Anonymity protection is such a feature.
|
Anonymity protection is such a feature.
|
||||||
The [Anonymity Trilemma](https://freedom.cs.purdue.edu/projects/trilemma.html)
|
The [Anonymity Trilemma](https://freedom.cs.purdue.edu/projects/trilemma.html)
|
||||||
@ -37,7 +37,7 @@ and [Dandelion++](https://arxiv.org/abs/1805.11060).
|
|||||||
|
|
||||||
Dandelion is a message spreading method, which, compared to other methods,
|
Dandelion is a message spreading method, which, compared to other methods,
|
||||||
increases the uncertainty of an attacker when trying to link messages to senders.
|
increases the uncertainty of an attacker when trying to link messages to senders.
|
||||||
Libp2p gossipsub aims at spanning a [d-regular graph](https://en.wikipedia.org/wiki/Regular_graph) topology, with d=6 as the [default value](https://rfc.vac.dev/spec/29/#gossipsub-v10-parameters).
|
Libp2p gossipsub aims at spanning a [d-regular graph](https://en.wikipedia.org/wiki/Regular_graph) topology, with d=6 as the [default value](https://github.com/vacp2p/rfc-index/blob/main/waku/informational/29/config.md/#gossipsub-v10-parameters).
|
||||||
Messages are forwarded within this (expected) symmetric topology,
|
Messages are forwarded within this (expected) symmetric topology,
|
||||||
which reduces uncertainty when trying to link messages to senders.
|
which reduces uncertainty when trying to link messages to senders.
|
||||||
Dandelion breaks this symmetry by subdividing message spreading into a "stem" and a "fluff" phase.
|
Dandelion breaks this symmetry by subdividing message spreading into a "stem" and a "fluff" phase.
|
||||||
@ -61,11 +61,11 @@ Further information on Waku anonymity may be found in our [Waku Privacy and Anon
|
|||||||
|
|
||||||
## Theory and Functioning
|
## Theory and Functioning
|
||||||
|
|
||||||
WAKU2-DANDELION can be seen as an anonymity enhancing add-on to [Waku Relay](https://rfc.vac.dev/waku/standards/core/11/relay) message dissemination,
|
WAKU2-DANDELION can be seen as an anonymity enhancing add-on to [Waku Relay](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/11/relay.md) message dissemination,
|
||||||
which is based on [libp2p gossipsub](https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/README.md).
|
which is based on [libp2p gossipsub](https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/README.md).
|
||||||
WAKU2-DANDELION subdivides message dissemination into a "stem" and a "fluff" phase.
|
WAKU2-DANDELION subdivides message dissemination into a "stem" and a "fluff" phase.
|
||||||
This specification is mainly concerned with specifying the stem phase.
|
This specification is mainly concerned with specifying the stem phase.
|
||||||
The fluff phase corresponds to [Waku Relay](https://rfc.vac.dev/waku/standards/core/11/relay),
|
The fluff phase corresponds to [Waku Relay](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/11/relay.md),
|
||||||
with optional fluff phase augmentations such as random delays.
|
with optional fluff phase augmentations such as random delays.
|
||||||
Adding random delay in the fluff phase further reduces symmetry in dissemination patterns and
|
Adding random delay in the fluff phase further reduces symmetry in dissemination patterns and
|
||||||
introduces more uncertainty for the attacker.
|
introduces more uncertainty for the attacker.
|
||||||
@ -92,7 +92,7 @@ are always sent as stem messages.
|
|||||||
|
|
||||||
The stem phase can be seen as a different protocol, and messages are introduced into Waku Relay, and by extension gossipsub,
|
The stem phase can be seen as a different protocol, and messages are introduced into Waku Relay, and by extension gossipsub,
|
||||||
once they arrive at a node in fluff state for the first time.
|
once they arrive at a node in fluff state for the first time.
|
||||||
WAKU2-DANDELION uses [19/WAKU2-LIGHTPUSH](https://rfc.vac.dev/waku/standards/core/19/lightpush) as the protocol for relaying stem messages.
|
WAKU2-DANDELION uses [19/WAKU2-LIGHTPUSH](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md) as the protocol for relaying stem messages.
|
||||||
|
|
||||||
There are no negative effects on gossipsub peer scoring,
|
There are no negative effects on gossipsub peer scoring,
|
||||||
because Dandelion nodes in _stem state_ still normally relay Waku Relay (gossipsub) messages.
|
because Dandelion nodes in _stem state_ still normally relay Waku Relay (gossipsub) messages.
|
||||||
@ -116,16 +116,16 @@ corresponding to 10 minute epochs.
|
|||||||
On entering stem state,
|
On entering stem state,
|
||||||
nodes supporting WAKU2-DANDELION MUST randomly select two nodes for each pubsub topic from the respective gossipsub mesh node set.
|
nodes supporting WAKU2-DANDELION MUST randomly select two nodes for each pubsub topic from the respective gossipsub mesh node set.
|
||||||
These nodes are referred to as stem relays.
|
These nodes are referred to as stem relays.
|
||||||
Stem relays MUST support [19/WAKU2-LIGHTPUSH](https://rfc.vac.dev/waku/standards/core/19/lightpush).
|
Stem relays MUST support [19/WAKU2-LIGHTPUSH](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md).
|
||||||
If a chosen peer does not support [19/WAKU2-LIGHTPUSH](https://rfc.vac.dev/waku/standards/core/19/lightpush),
|
If a chosen peer does not support [19/WAKU2-LIGHTPUSH](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md),
|
||||||
the node SHOULD switch to fluff state.
|
the node SHOULD switch to fluff state.
|
||||||
(We may update this strategy in future versions of this document.)
|
(We may update this strategy in future versions of this document.)
|
||||||
|
|
||||||
Further, the node establishes a map that maps each incoming stem connection
|
Further, the node establishes a map that maps each incoming stem connection
|
||||||
to one of its stem relays chosen at random (but fixed per epoch).
|
to one of its stem relays chosen at random (but fixed per epoch).
|
||||||
Incoming stem connections are identified by the [Peer IDs](https://docs.libp2p.io/concepts/peers/#peer-id/)
|
Incoming stem connections are identified by the [Peer IDs](https://docs.libp2p.io/concepts/peers/#peer-id/)
|
||||||
of peers the node receives [19/WAKU2-LIGHTPUSH](https://rfc.vac.dev/waku/standards/core/19/lightpush) messages from.
|
of peers the node receives [19/WAKU2-LIGHTPUSH](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md) messages from.
|
||||||
Incoming [19/WAKU2-LIGHTPUSH](https://rfc.vac.dev/waku/standards/core/19/lightpush) connections from peers that do not support WAKU2-DANDELION are identified and mapped in the same way.
|
Incoming [19/WAKU2-LIGHTPUSH](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md) connections from peers that do not support WAKU2-DANDELION are identified and mapped in the same way.
|
||||||
This makes the protocol simpler, increases the anonymity set, and offers Dandelion anonymity properties to such peers, too.
|
This makes the protocol simpler, increases the anonymity set, and offers Dandelion anonymity properties to such peers, too.
|
||||||
|
|
||||||
The node itself is mapped in the same way, so that all messages originated by the node are relayed via a per-epoch-fixed Dandelion relay, too.
|
The node itself is mapped in the same way, so that all messages originated by the node are relayed via a per-epoch-fixed Dandelion relay, too.
|
||||||
@ -133,7 +133,7 @@ The node itself is mapped in the same way, so that all messages originated by th
|
|||||||
While in stem state, nodes MUST relay stem messages to the respective stem relay.
|
While in stem state, nodes MUST relay stem messages to the respective stem relay.
|
||||||
Received fluff messages MUST be relayed as specified in the fluff state section.
|
Received fluff messages MUST be relayed as specified in the fluff state section.
|
||||||
|
|
||||||
The stem protocol ([19/WAKU2-LIGHTPUSH](https://rfc.vac.dev/waku/standards/core/19/lightpush)) is independent of the fluff protocol ([Waku Relay](https://rfc.vac.dev/waku/standards/core/11/relay)).
|
The stem protocol ([19/WAKU2-LIGHTPUSH](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md)) is independent of the fluff protocol ([Waku Relay](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/11/relay.md)).
|
||||||
While in stem state, nodes MUST NOT gossip about stem messages,
|
While in stem state, nodes MUST NOT gossip about stem messages,
|
||||||
and MUST NOT send control messages related to stem messages.
|
and MUST NOT send control messages related to stem messages.
|
||||||
(An existing gossipsub implementation does _not_ have to be adjusted to not send gossip about stem messages,
|
(An existing gossipsub implementation does _not_ have to be adjusted to not send gossip about stem messages,
|
||||||
@ -161,7 +161,7 @@ this regular forwarding already comprises random delays.
|
|||||||
|
|
||||||
## Implementation Notes
|
## Implementation Notes
|
||||||
|
|
||||||
Handling of the WAKU2-DANDELION stem phase can be implemented as an extension to an existing [19/WAKU2-LIGHTPUSH](https://rfc.vac.dev/waku/standards/core/19/lightpush) implementation.
|
Handling of the WAKU2-DANDELION stem phase can be implemented as an extension to an existing [19/WAKU2-LIGHTPUSH](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md) implementation.
|
||||||
|
|
||||||
Fluff phase augmentations might alter gossipsub message dissemination (e.g. adding random delays).
|
Fluff phase augmentations might alter gossipsub message dissemination (e.g. adding random delays).
|
||||||
If this is the case, they have to be implemented on the libp2p gossipsub layer.
|
If this is the case, they have to be implemented on the libp2p gossipsub layer.
|
||||||
@ -197,7 +197,7 @@ WAKU2-DANDELION does not protect against targeted deanonymization attacks.
|
|||||||
|
|
||||||
Stem relays receiving messages can either be in stem state or in fluff state themselves.
|
Stem relays receiving messages can either be in stem state or in fluff state themselves.
|
||||||
They might also not support WAKU2-DANDELION,
|
They might also not support WAKU2-DANDELION,
|
||||||
and interpret the message as classical [19/WAKU2-LIGHTPUSH](https://rfc.vac.dev/waku/standards/core/19/lightpush),
|
and interpret the message as classical [19/WAKU2-LIGHTPUSH](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md),
|
||||||
which effectively makes them act as fluff state relays.
|
which effectively makes them act as fluff state relays.
|
||||||
While such peers lower the overall anonymity properties,
|
While such peers lower the overall anonymity properties,
|
||||||
the [Dandelion++ paper](https://arxiv.org/abs/1805.11060)
|
the [Dandelion++ paper](https://arxiv.org/abs/1805.11060)
|
||||||
@ -234,9 +234,9 @@ We will quantify the resulting loss of anonymity in future versions of this docu
|
|||||||
#### Stem Relay Selection
|
#### Stem Relay Selection
|
||||||
|
|
||||||
In its current version, WAKU2-DANDELION nodes default to fluff state
|
In its current version, WAKU2-DANDELION nodes default to fluff state
|
||||||
if the random stem relay selection yields at least one peer that does not support [19/WAKU2-LIGHTPUSH](https://rfc.vac.dev/waku/standards/core/19/lightpush) (which is the stem protocol used in WAKU2-DANDELION.
|
if the random stem relay selection yields at least one peer that does not support [19/WAKU2-LIGHTPUSH](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md) (which is the stem protocol used in WAKU2-DANDELION.
|
||||||
If nodes would reselect peers until they find peers supporting [19/WAKU2-LIGHTPUSH](https://rfc.vac.dev/waku/standards/core/19/lightpush),
|
If nodes would reselect peers until they find peers supporting [19/WAKU2-LIGHTPUSH](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md),
|
||||||
malicious nodes would get an advantage if a significant number of honest nodes would not support [19/WAKU2-LIGHTPUSH](https://rfc.vac.dev/waku/standards/core/19/lightpush).
|
malicious nodes would get an advantage if a significant number of honest nodes would not support [19/WAKU2-LIGHTPUSH](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md).
|
||||||
Even though this causes messages to enter fluff phase earlier,
|
Even though this causes messages to enter fluff phase earlier,
|
||||||
we choose the trade-off in favour of protocol stability and sacrifice a bit of anonymity.
|
we choose the trade-off in favour of protocol stability and sacrifice a bit of anonymity.
|
||||||
(We will look into improving this in future versions of this document.)
|
(We will look into improving this in future versions of this document.)
|
||||||
@ -254,7 +254,7 @@ We plan to add a separate fluff augmentation specification that will introduce r
|
|||||||
Optimal delay times depend on the message frequency and patterns.
|
Optimal delay times depend on the message frequency and patterns.
|
||||||
This delay fluff augmentation specification will be oblivious to the actual message content,
|
This delay fluff augmentation specification will be oblivious to the actual message content,
|
||||||
because Waku Dandelion specifications add anonymity on the routing layer.
|
because Waku Dandelion specifications add anonymity on the routing layer.
|
||||||
Still, it is important to note that [Waku2 messages](https://rfc.vac.dev/waku/standards/core/14/message/#payloads) (in their current version) carry an originator timestamp,
|
Still, it is important to note that [Waku2 messages](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/14/message.md/#payloads) (in their current version) carry an originator timestamp,
|
||||||
which works against fluff phase random delays.
|
which works against fluff phase random delays.
|
||||||
An analysis of the benefits of this timestamp versus anonymity risks is on our roadmap.
|
An analysis of the benefits of this timestamp versus anonymity risks is on our roadmap.
|
||||||
|
|
||||||
@ -267,14 +267,14 @@ Note: Introducing random delays can have a negative effect on
|
|||||||
#### Stem Flag
|
#### Stem Flag
|
||||||
|
|
||||||
While WAKU2-DANDELION without fluff augmentation does not effect Waku Relay nodes,
|
While WAKU2-DANDELION without fluff augmentation does not effect Waku Relay nodes,
|
||||||
messages sent by nodes that only support [19/WAKU2-LIGHTPUSH](https://rfc.vac.dev/waku/standards/core/19/lightpush) might be routed through a Dandelion stem without them knowing.
|
messages sent by nodes that only support [19/WAKU2-LIGHTPUSH](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md) might be routed through a Dandelion stem without them knowing.
|
||||||
While this improves anonymity, as discussed above, it also introduces additional latency and lightpush nodes cannot opt out of this.
|
While this improves anonymity, as discussed above, it also introduces additional latency and lightpush nodes cannot opt out of this.
|
||||||
|
|
||||||
In future versions of this specification we might
|
In future versions of this specification we might
|
||||||
|
|
||||||
- add a flag to [14/WAKU2-MESSAGE](https://rfc.vac.dev/waku/standards/core/14/message) indicating a message should be routed over a Dandelion stem (opt-in), or
|
- add a flag to [14/WAKU2-MESSAGE](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/14/message.md) indicating a message should be routed over a Dandelion stem (opt-in), or
|
||||||
- add a flag to [14/WAKU2-MESSAGE](https://rfc.vac.dev/waku/standards/core/14/message) indicating a message should _not_ be routed over a Dandelion stem (opt-out), or
|
- add a flag to [14/WAKU2-MESSAGE](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/14/message.md) indicating a message should _not_ be routed over a Dandelion stem (opt-out), or
|
||||||
- introducing a fork of [19/WAKU2-LIGHTPUSH](https://rfc.vac.dev/waku/standards/core/19/lightpush) exclusively used for Dandelion stem.
|
- introducing a fork of [19/WAKU2-LIGHTPUSH](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md) exclusively used for Dandelion stem.
|
||||||
|
|
||||||
In the current version, we decided against these options in favour of a simpler protocol and an increased anonymity set.
|
In the current version, we decided against these options in favour of a simpler protocol and an increased anonymity set.
|
||||||
|
|
||||||
@ -287,11 +287,13 @@ Copyright and related rights waived via [CC0](https://creativecommons.org/public
|
|||||||
- [Dandelion](https://arxiv.org/abs/1701.04439)
|
- [Dandelion](https://arxiv.org/abs/1701.04439)
|
||||||
- [Dandelion++](https://arxiv.org/abs/1805.11060)
|
- [Dandelion++](https://arxiv.org/abs/1805.11060)
|
||||||
- [multi-node (botnet) attacker model](../../informational/adversarial-models.md/#multi-node)
|
- [multi-node (botnet) attacker model](../../informational/adversarial-models.md/#multi-node)
|
||||||
- [Waku Relay](https://rfc.vac.dev/waku/standards/core/11/relay)
|
- [Waku Relay](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/11/relay.md)
|
||||||
- [Waku v2](https://rfc.vac.dev/waku/standards/core/10/waku2)
|
- [Waku v2](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/10/waku2.md)
|
||||||
- [d-regular graph](https://en.wikipedia.org/wiki/Regular_graph)
|
- [d-regular graph](https://en.wikipedia.org/wiki/Regular_graph)
|
||||||
- [Anonymity Trilemma](https://freedom.cs.purdue.edu/projects/trilemma.html)
|
- [Anonymity Trilemma](https://freedom.cs.purdue.edu/projects/trilemma.html)
|
||||||
- [Waku Privacy and Anonymity Analysis](https://vac.dev/wakuv2-relay-anon).
|
- [Waku Privacy and Anonymity Analysis](https://vac.dev/wakuv2-relay-anon).
|
||||||
- [On the Anonymity of Peer-To-Peer Network Anonymity Schemes Used by Cryptocurrencies](https://arxiv.org/pdf/2201.11860.pdf)
|
- [On the Anonymity of Peer-To-Peer Network Anonymity Schemes Used by Cryptocurrencies](https://arxiv.org/pdf/2201.11860.pdf)
|
||||||
- [Adversarial Models](../../informational/adversarial-models.md)
|
- [Adversarial Models](../../informational/adversarial-models.md)
|
||||||
- [14/WAKU2-MESSAGE](https://rfc.vac.dev/waku/standards/core/14/message)
|
- [14/WAKU2-MESSAGE](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/14/message.md)
|
||||||
|
- [29/WAKU-CONFIG](https://github.com/vacp2p/rfc-index/blob/main/waku/informational/29/config.md)
|
||||||
|
- [19/WAKU2-LIGHTPUSH](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user