Files
research.logos.co/assets/js/b6f6cb50.b78d4357.js
2026-02-13 14:11:27 +00:00

1 line
71 KiB
JavaScript

"use strict";(self.webpackChunkresearch_logos_co=self.webpackChunkresearch_logos_co||[]).push([[8195],{10598:e=>{e.exports=JSON.parse('{"permalink":"/rlog/wakuv2-relay-anon","source":"@site/rlog/2022-07-22-relay-anonymity.mdx","title":"Waku Privacy and Anonymity Analysis Part I: Definitions and Waku Relay","description":"Introducing a basic threat model and privacy/anonymity analysis for the Waku v2 relay protocol.","date":"2022-07-22T10:00:00.000Z","tags":[],"readingTime":16.795,"hasTruncateMarker":true,"authors":[{"name":"Daniel","github":"kaiserd","key":"kaiserd","page":null}],"frontMatter":{"layout":"post","name":"Waku Privacy and Anonymity Analysis Part I: Definitions and Waku Relay","title":"Waku Privacy and Anonymity Analysis Part I: Definitions and Waku Relay","date":"2022-07-22T10:00:00.000Z","authors":"kaiserd","published":true,"slug":"wakuv2-relay-anon","categories":"research","image":"/img/anonymity_trilemma.svg","discuss":"https://forum.research.logos.co/t/discussion-waku-privacy-and-anonymity-analysis/149","_includes":["math"],"toc_min_heading_level":2,"toc_max_heading_level":5},"unlisted":false,"prevItem":{"title":"Building Privacy-Protecting Infrastructure","permalink":"/rlog/building-privacy-protecting-infrastructure"},"nextItem":{"title":"Noise handshakes as key-exchange mechanism for Waku","permalink":"/rlog/wakuv2-noise"}}')},28453:(e,s,a)=>{a.d(s,{R:()=>r,x:()=>l});var n=a(96540);const t={},i=n.createContext(t);function r(e){const s=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),n.createElement(i.Provider,{value:s},e.children)}},47111:(e,s,a)=>{a.d(s,{A:()=>n});const n=a.p+"assets/images/libp2p_gossipsub_types_of_peering-d0772153a5d11dea7b24c0bdc307a93d.png"},84118:(e,s,a)=>{a.r(s),a.d(s,{assets:()=>c,contentTitle:()=>l,default:()=>d,frontMatter:()=>r,metadata:()=>n,toc:()=>h});var n=a(10598),t=a(74848),i=a(28453);const r={layout:"post",name:"Waku Privacy and Anonymity Analysis Part I: Definitions and Waku Relay",title:"Waku Privacy and Anonymity Analysis Part I: Definitions and Waku Relay",date:new Date("2022-07-22T10:00:00.000Z"),authors:"kaiserd",published:!0,slug:"wakuv2-relay-anon",categories:"research",image:"/img/anonymity_trilemma.svg",discuss:"https://forum.research.logos.co/t/discussion-waku-privacy-and-anonymity-analysis/149",_includes:["math"],toc_min_heading_level:2,toc_max_heading_level:5},l=void 0,c={authorsImageUrls:[void 0]},h=[{value:"Informal Definitions: Security, Privacy, and Anonymity",id:"informal-definitions-security-privacy-and-anonymity",level:2},{value:"Security",id:"security",level:3},{value:"Privacy",id:"privacy",level:3},{value:"Anonymity",id:"anonymity",level:3},{value:"Receiver Anonymity",id:"receiver-anonymity",level:4},{value:"Sender Anonymity",id:"sender-anonymity",level:4},{value:"Anonymity Trilemma",id:"anonymity-trilemma",level:3},{value:"Censorship Resistance",id:"censorship-resistance",level:3},{value:"Attacker Types",id:"attacker-types",level:2},{value:"Internal",id:"internal",level:3},{value:"Single Node",id:"single-node",level:4},{value:"Multi Node",id:"multi-node",level:4},{value:"Linearly Scaling Nodes",id:"linearly-scaling-nodes",level:4},{value:"External",id:"external",level:3},{value:"Local",id:"local",level:4},{value:"AS",id:"as",level:4},{value:"Global On-Net",id:"global-on-net",level:4},{value:"Attack-based Threat Analysis",id:"attack-based-threat-analysis",level:2},{value:"Scope",id:"scope",level:3},{value:"Prerequisite: Get a Specific Position in the Network",id:"prerequisite-get-a-specific-position-in-the-network",level:3},{value:"Replay Attack",id:"replay-attack",level:3},{value:"Neighbourhood Surveillance",id:"neighbourhood-surveillance",level:3},{value:"Controlled Neighbourhood",id:"controlled-neighbourhood",level:3},{value:"Observing Messages",id:"observing-messages",level:3},{value:"Correlation",id:"correlation",level:3},{value:"DoS",id:"dos",level:3},{value:"Summary and Future Work",id:"summary-and-future-work",level:2},{value:"References",id:"references",level:2}];function o(e){const s={a:"a",annotation:"annotation",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",math:"math",mi:"mi",mn:"mn",mrow:"mrow",msub:"msub",p:"p",semantics:"semantics",span:"span",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.p,{children:"Introducing a basic threat model and privacy/anonymity analysis for the Waku v2 relay protocol."}),"\n","\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/core/10/waku2",children:"Waku v2"})," enables secure, privacy preserving communication using a set of modular P2P protocols.\nWaku v2 also aims at protecting the user's anonymity.\nThis post is the first in a series about Waku v2 security, privacy, and anonymity.\nThe goal is to eventually have a full privacy and anonymity analysis for each of the Waku v2 protocols, as well as covering the interactions of various Waku v2 protocols.\nThis provides transparency with respect to Waku's current privacy and anonymity guarantees, and also identifies weak points that we have to address."]}),"\n",(0,t.jsxs)(s.p,{children:["In this post, we first give an informal description of security, privacy and anonymity in the context of Waku v2.\nFor each definition, we summarize Waku's current guarantees regarding the respective property.\nWe also provide attacker models, an attack-based threat model, and a first anonymity analysis of ",(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/core/11/relay",children:"Waku v2 relay"})," within the respective models."]}),"\n",(0,t.jsxs)(s.p,{children:["Waku comprises many protocols that can be combined in a modular way.\nFor our privacy and anonymity analysis, we start with the relay protocol because it is at the core of Waku v2 enabling Waku's publish subscribe approach to P2P messaging.\nIn its current form, Waku relay is a minor extension of ",(0,t.jsx)(s.a,{href:"https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/README.md",children:"libp2p GossipSub"}),"."]}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{alt:"Figure 1: The Waku v2 relay mesh is based on the GossipSub mesh",src:a(47111).A+"",width:"800",height:"305"})}),"\n",(0,t.jsx)(s.h2,{id:"informal-definitions-security-privacy-and-anonymity",children:"Informal Definitions: Security, Privacy, and Anonymity"}),"\n",(0,t.jsx)(s.p,{children:"The concepts of security, privacy, and anonymity are linked and have quite a bit of overlap."}),"\n",(0,t.jsx)(s.h3,{id:"security",children:"Security"}),"\n",(0,t.jsxs)(s.p,{children:["Of the three, ",(0,t.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/Information_security",children:"Security"})," has the clearest agreed upon definition,\nat least regarding its key concepts: ",(0,t.jsx)(s.em,{children:"confidentiality"}),", ",(0,t.jsx)(s.em,{children:"integrity"}),", and ",(0,t.jsx)(s.em,{children:"availability"}),"."]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"confidentiality: data is not disclosed to unauthorized entities."}),"\n",(0,t.jsx)(s.li,{children:"integrity: data is not modified by unauthorized entities."}),"\n",(0,t.jsx)(s.li,{children:"availability: data is available, i.e. accessible by authorized entities."}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["While these are the key concepts, the definition of information security has been extended over time including further concepts,\ne.g. ",(0,t.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/Authentication",children:"authentication"})," and ",(0,t.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/Non-repudiation",children:"non-repudiation"}),".\nWe might cover these in future posts."]}),"\n",(0,t.jsx)(s.h3,{id:"privacy",children:"Privacy"}),"\n",(0,t.jsx)(s.p,{children:"Privacy allows users to choose which data and information"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"they want to share"}),"\n",(0,t.jsx)(s.li,{children:"and with whom they want to share it."}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["This includes data and information that is associated with and/or generated by users.\nProtected data also comprises metadata that might be generated without users being aware of it.\nThis means, no further information about the sender or the message is leaked.\nMetadata that is protected as part of the privacy-preserving property does not cover protecting the identities of sender and receiver.\nIdentities are protected by the ",(0,t.jsx)(s.a,{href:"#anonymity",children:"anonymity property"}),"."]}),"\n",(0,t.jsx)(s.p,{children:"Often privacy is realized by the confidentiality property of security.\nThis neither makes privacy and security the same, nor the one a sub category of the other.\nWhile security is abstract itself (its properties can be realized in various ways), privacy lives on a more abstract level using security properties.\nPrivacy typically does not use integrity and availability.\nAn adversary who has no access to the private data, because the message has been encrypted, could still alter the message."}),"\n",(0,t.jsxs)(s.p,{children:["Waku offers confidentiality via secure channels set up with the help of the ",(0,t.jsx)(s.a,{href:"https://noiseprotocol.org/",children:"Noise Protocol Framework"}),".\nUsing these secure channels, message content is only disclosed to the intended receivers.\nThey also provide good metadata protection properties.\nHowever, we do not have a metadata protection analysis as of yet,\nwhich is part of our privacy/anonymity roadmap."]}),"\n",(0,t.jsx)(s.h3,{id:"anonymity",children:"Anonymity"}),"\n",(0,t.jsx)(s.p,{children:"Privacy and anonymity are closely linked.\nBoth the identity of a user and data that allows inferring a user's identity should be part of the privacy policy.\nFor the purpose of analysis, we want to have a clearer separation between these concepts."}),"\n",(0,t.jsxs)(s.p,{children:["We define anonymity as ",(0,t.jsx)(s.em,{children:"unlinkablity of users' identities and their shared data and/or actions"}),"."]}),"\n",(0,t.jsxs)(s.p,{children:["We subdivide anonymity into ",(0,t.jsx)(s.em,{children:"receiver anonymity"})," and ",(0,t.jsx)(s.em,{children:"sender anonymity"}),"."]}),"\n",(0,t.jsx)(s.h4,{id:"receiver-anonymity",children:"Receiver Anonymity"}),"\n",(0,t.jsxs)(s.p,{children:["We define receiver anonymity as ",(0,t.jsx)(s.em,{children:"unlinkability of users' identities and the data they receive and/or related actions"}),".\nThe data transmitted via Waku relay must be a ",(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/core/14/message",children:"Waku message"}),", which contains a content topic field.\nBecause each message is associated with a content topic, and each receiver is interested in messages with specific content topics,\nreceiver anonymity in the context of Waku corresponds to ",(0,t.jsx)(s.em,{children:"subscriber-topic unlinkability"}),'.\nAn example for the "action" part of our receiver anonymity definition is subscribing to a specific topic.']}),"\n",(0,t.jsx)(s.p,{children:"The Waku message's content topic is not related to the libp2p pubsub topic.\nFor now, Waku uses a single libp2p pubsub topic, which means messages are propagated via a single mesh of peers.\nWith this, the receiver discloses its participation in Waku on the gossipsub layer.\nWe will leave the analysis of libp2p gossipsub to a future article within this series, and only provide a few hints and pointers here."}),"\n",(0,t.jsxs)(s.p,{children:["Waku offers k-anonymity regarding content topic interest in the global adversary model.\n",(0,t.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/K-anonymity",children:"K-anonymity"})," in the context of Waku means an attacker can link receivers to content topics with a maximum certainty of ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsxs)(s.mrow,{children:[(0,t.jsx)(s.mn,{children:"1"}),(0,t.jsx)(s.mi,{mathvariant:"normal",children:"/"}),(0,t.jsx)(s.mi,{children:"k"})]}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"1/k"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,t.jsx)(s.span,{className:"mord",children:"1/"}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03148em"},children:"k"})]})})]}),".\nThe larger ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"k"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"k"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.6944em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03148em"},children:"k"})]})})]}),", the less certainty the attacker gains.\nReceivers basically hide in a pool of ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"k"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"k"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.6944em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03148em"},children:"k"})]})})]})," content topics, any subset of which could be topics they subscribed to.\nThe attacker does not know which of those the receiver actually subscribed to,\nand the receiver enjoys ",(0,t.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/Plausible_deniability#Use_in_cryptography",children:"plausible deniability"})," regarding content topic subscription.\nAssuming there are ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"n"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"n"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",children:"n"})]})})]})," Waku content topics, a receiver has ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"n"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"n"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",children:"n"})]})})]}),"-anonymity with respect to association to a specific content topic."]}),"\n",(0,t.jsxs)(s.p,{children:["Technically, Waku allows distributing messages over several libp2p pubsub topics.\nThis yields ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"k"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"k"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.6944em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03148em"},children:"k"})]})})]}),"-anonymity, assuming ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"k"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"k"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.6944em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03148em"},children:"k"})]})})]})," content topics share the same pubsub topic.\nHowever, if done wrongly, such sharding of pubsub topics can breach anonymity.\nA formal specification of anonymity-preserving topic sharding building on the concepts of ",(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/status/deprecated/10/waku-usage#partitioned-topic",children:"partitioned topics"})," is part of our roadmap."]}),"\n",(0,t.jsxs)(s.p,{children:["Also, Waku is not directly concerned with 1:1 communication, so for this post, 1:1 communication is out of scope.\nChannels for 1:1 communication can be implemented on top of Waku relay.\nIn the future, a 1:1 communication protocol might be added to Waku.\nSimilar to topic sharding, it would maintain receiver anonymity leveraging ",(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/status/deprecated/10/waku-usage/#partitioned-topic",children:"partitioned topics"}),"."]}),"\n",(0,t.jsx)(s.h4,{id:"sender-anonymity",children:"Sender Anonymity"}),"\n",(0,t.jsxs)(s.p,{children:["We define sender anonymity as ",(0,t.jsx)(s.em,{children:"unlinkability of users' identities and the data they send and/or related actions"}),".\nBecause the data in the context of Waku is Waku messages, sender anonymity corresponds to ",(0,t.jsx)(s.em,{children:"sender-message unlinkability"}),"."]}),"\n",(0,t.jsxs)(s.p,{children:["In summary, Waku offers weak sender anonymity because of ",(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/core/11/relay",children:"Waku's strict no sign policy"}),",\nwhich has its origins in the ",(0,t.jsx)(s.a,{href:"https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#why-are-we-using-the-strictnosign-signature-policy",children:"Ethereum consensus specs"}),".\n",(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/core/17/rln-relay",children:"17/WAKU-RLN-RELAY"})," and ",(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/deprecated/18/swap",children:"18/WAKU2-SWAP"})," mitigate replay and injection attacks."]}),"\n",(0,t.jsx)(s.p,{children:"Waku currently does not offer sender anonymity in stronger attacker models, as well as cannot protect against targeted attacks in weaker attacker models like the single or multi node attacker.\nWe will cover this in more detail in later sections."}),"\n",(0,t.jsx)(s.h3,{id:"anonymity-trilemma",children:"Anonymity Trilemma"}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.a,{href:"https://freedom.cs.purdue.edu/projects/trilemma.html",children:"The Anonymity trilemma"})," states that only two out of ",(0,t.jsx)(s.em,{children:"strong anonymity"}),", ",(0,t.jsx)(s.em,{children:"low bandwidth"}),", and ",(0,t.jsx)(s.em,{children:"low latency"})," can be guaranteed in the global on-net attacker model.\nWaku's goal, being a modular set of protocols, is to offer any combination of two out of these three properties, as well as blends.\nAn example for blending is an adjustable number of pubsub topics and peers in the respective pubsub topic mesh; this allows tuning the trade-off between anonymity and bandwidth."]}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{alt:"Figure 2: Anonymity Trilemma: pick two. ",src:a(93776).A+"",width:"81",height:"94"})}),"\n",(0,t.jsxs)(s.p,{children:["A fourth factor that influences ",(0,t.jsx)(s.a,{href:"https://freedom.cs.purdue.edu/projects/trilemma.html",children:"the anonymity trilemma"})," is ",(0,t.jsx)(s.em,{children:"frequency and patterns"})," of messages.\nThe more messages there are, and the more randomly distributed they are, the better the anonymity protection offered by a given anonymous communication protocol.\nSo, incentivising users to use the protocol, for instance by lowering entry barriers, helps protecting the anonymity of all users.\nThe frequency/patterns factor is also related to the above described k-anonymity."]}),"\n",(0,t.jsx)(s.h3,{id:"censorship-resistance",children:"Censorship Resistance"}),"\n",(0,t.jsx)(s.p,{children:"Another security related property that Waku aims to offer is censorship resistance.\nCensorship resistance guarantees that users can participate even if an attacker tries to deny them access.\nSo, censorship resistance ties into the availability aspect of security.\nIn the context of Waku that means users should be able to send messages as well as receive all messages they are interested in,\neven if an attacker tries to prevent them from disseminating messages or tries to deny them access to messages."}),"\n",(0,t.jsxs)(s.p,{children:["Currently, Waku only guarantees censorship resistance in the weak single node attacker model.\nWhile currently employed secure channels mitigate targeted censorship, e.g. blocking specific content topics,\ngeneral censorship resistance in strong attacker models is part of our roadmap.\nAmong other options, we will investigate ",(0,t.jsx)(s.a,{href:"https://www.pluggabletransports.info/about/",children:"Pluggable Transports"})," in future articles."]}),"\n",(0,t.jsx)(s.h2,{id:"attacker-types",children:"Attacker Types"}),"\n",(0,t.jsx)(s.p,{children:"The following lists various attacker types with varying degrees of power.\nThe more power an attacker has, the more difficult it is to gain the respective attacker position."}),"\n",(0,t.jsx)(s.p,{children:"Each attacker type comes in a passive and an active variant.\nWhile a passive attacker can stay hidden and is not suspicious,\nthe respective active attacker has more (or at least the same) deanonymization power."}),"\n",(0,t.jsx)(s.p,{children:"We also distinguish between internal and external attackers."}),"\n",(0,t.jsx)(s.h3,{id:"internal",children:"Internal"}),"\n",(0,t.jsx)(s.p,{children:"With respect to Waku relay, an internal attacker participates in the same pubsub topic as its victims.\nWithout additional measures on higher layer protocols, access to an internal position is easy to get."}),"\n",(0,t.jsx)(s.h4,{id:"single-node",children:"Single Node"}),"\n",(0,t.jsx)(s.p,{children:"This attacker controls a single node.\nBecause this position corresponds to normal usage of Waku relay, it is trivial to obtain."}),"\n",(0,t.jsx)(s.h4,{id:"multi-node",children:"Multi Node"}),"\n",(0,t.jsxs)(s.p,{children:["This attacker controls several nodes. We assume a smaller static number of controlled nodes.\nThe multi node position can be achieved relatively easily by setting up multiple nodes.\nBotnets might be leveraged to increase the number of available hosts.\nMulti node attackers could use ",(0,t.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/Sybil_attack",children:"Sybil attacks"})," to increase the number of controlled nodes.\nA countermeasure is for nodes to only accept libp2p gossipsub graft requests from peers with different IP addresses, or even different subnets."]}),"\n",(0,t.jsx)(s.h4,{id:"linearly-scaling-nodes",children:"Linearly Scaling Nodes"}),"\n",(0,t.jsx)(s.p,{children:"This attacker controls a number of nodes that scales linearly with the number of nodes in the network.\nThis attacker is especially interesting to investigate in the context of DHT security,\nwhich Waku uses for ambient peer discovery."}),"\n",(0,t.jsx)(s.h3,{id:"external",children:"External"}),"\n",(0,t.jsxs)(s.p,{children:["An external attacker can only see encrypted traffic (protected by a secure channel set up with ",(0,t.jsx)(s.a,{href:"https://github.com/waku-org/specs/blob/master/standards/application/noise.md",children:"WAKU2-NOISE"}),").\nBecause an internal position can be easily obtained,\nin practice external attackers would mount combined attacks that leverage both internal an external attacks.\nWe cover this more below when describing attacks."]}),"\n",(0,t.jsx)(s.h4,{id:"local",children:"Local"}),"\n",(0,t.jsx)(s.p,{children:"A local attacker has access to communication links in a local network segment.\nThis could be a rogue access point (with routing capability)."}),"\n",(0,t.jsx)(s.h4,{id:"as",children:"AS"}),"\n",(0,t.jsx)(s.p,{children:"An AS attacker controls a single AS (autonomous system).\nA passive AS attacker can listen to traffic on arbitrary links within the AS.\nAn active AS attacker can drop, inject, and alter traffic on arbitrary links within the AS."}),"\n",(0,t.jsx)(s.p,{children:"In practice, a malicious ISP would be considered as an AS attacker.\nA malicious ISP could also easily setup a set of nodes at specific points in the network,\ngaining internal attack power similar to a strong multi node attacker."}),"\n",(0,t.jsx)(s.h4,{id:"global-on-net",children:"Global On-Net"}),"\n",(0,t.jsxs)(s.p,{children:["A global on-net attacker has complete overview over the whole network.\nA passive global attacker can listen to traffic on all links,\nwhile the active global attacker basically carries the traffic: it can freely drop, inject, and alter traffic at all positions in the network.\nThis basically corresponds to the ",(0,t.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/Dolev%E2%80%93Yao_model",children:"Dolev-Yao model"}),"."]}),"\n",(0,t.jsx)(s.p,{children:"An entity with this power would, in practice, also have the power of the internal linearly scaling nodes attacker."}),"\n",(0,t.jsx)(s.h2,{id:"attack-based-threat-analysis",children:"Attack-based Threat Analysis"}),"\n",(0,t.jsx)(s.p,{children:"The following lists various attacks including the weakest attacker model in which the attack can be successfully performed.\nThe respective attack can be performed in all stronger attacker models as well."}),"\n",(0,t.jsx)(s.p,{children:"An attack is considered more powerful if it can be successfully performed in a weaker attacker model."}),"\n",(0,t.jsx)(s.p,{children:"If not stated otherwise, we look at these attacks with respect to their capability to deanonymize the message sender."}),"\n",(0,t.jsx)(s.h3,{id:"scope",children:"Scope"}),"\n",(0,t.jsx)(s.p,{children:"In this post, we introduce a simple tightly scoped threat model for Waku v2 Relay, which will be extended in the course of this article series."}),"\n",(0,t.jsx)(s.p,{children:"In this first post, we will look at the relay protocol in isolation.\nEven though many threats arise from layers Waku relay is based on, and layers that in turn live on top of relay,\nwe want to first look at relay in isolation because it is at the core of Waku v2.\nAddressing and trying to solve all security issues of a complex system at once is an overwhelming task, which is why we focus on the soundness of relay first."}),"\n",(0,t.jsx)(s.p,{children:"This also goes well with the modular design philosophy of Waku v2, as layers of varying levels of security guarantees can be built on top of relay, all of which can relay on the guarantees that Waku provides.\nInstead of looking at a multiplicative explosion of possible interactions, we look at the core in this article, and cover the most relevant combinations in future posts."}),"\n",(0,t.jsxs)(s.p,{children:["Further restricting the scope, we will look at the data field of a relay message as a black box.\nIn a second article on Waku v2 relay, we will look into the data field, which according to the ",(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/core/11/relay#message-fields",children:"specification of Waku v2 relay"})," must be a ",(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/core/14/message",children:"Waku v2 message"}),".\nWe only consider messages with version field ",(0,t.jsx)(s.code,{children:"2"}),", which indicates that the payload has to be encoded using ",(0,t.jsx)(s.a,{href:"https://github.com/waku-org/specs/blob/master/standards/application/noise.md",children:"WAKU2-NOISE"}),"."]}),"\n",(0,t.jsx)(s.h3,{id:"prerequisite-get-a-specific-position-in-the-network",children:"Prerequisite: Get a Specific Position in the Network"}),"\n",(0,t.jsx)(s.p,{children:"Some attacks require the attacker node(s) to be in a specific position in the network.\nIn most cases, this corresponds to trying to get into the mesh peer list for the desired pubsub topic of the victim node."}),"\n",(0,t.jsx)(s.p,{children:"In libp2p gossipsub, and by extension Waku v2 relay, nodes can simply send a graft message for the desired topic to the victim node.\nIf the victim node still has open slots, the attacker gets the desired position.\nThis only requires the attacker to know the gossipsub multiaddress of the victim node."}),"\n",(0,t.jsxs)(s.p,{children:["A linearly scaling nodes attacker can leverage DHT based discovery systems to boost the probability of malicious nodes being returned, which in turn significantly increases the probability of attacker nodes ending up in the peer lists of victim nodes.\n",(0,t.jsx)(s.a,{href:"https://research.logos.co/wakuv2-apd",children:"Waku v2 discv5"})," will employ countermeasures that mitigate the amplifying effect this attacker type can achieve."]}),"\n",(0,t.jsx)(s.h3,{id:"replay-attack",children:"Replay Attack"}),"\n",(0,t.jsxs)(s.p,{children:["In the scope we defined above, Waku v2 is resilient against replay attacks.\nGossipSub nodes, and by extension Waku relay nodes, feature a ",(0,t.jsx)(s.code,{children:"seen"})," cache, and only relay messages they have not seen before.\nFurther, replay attacks will be punished by ",(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/core/17/rln-relay",children:"RLN"})," and ",(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/deprecated/18/swap",children:"SWAP"}),"."]}),"\n",(0,t.jsx)(s.h3,{id:"neighbourhood-surveillance",children:"Neighbourhood Surveillance"}),"\n",(0,t.jsxs)(s.p,{children:["This attack can be performed by a single node attacker that is connected to all peers of the victim node ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"v"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"})]})})]})," with respect to a specific topic mesh.\nThe attacker also has to be connected to ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"v"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"})]})})]}),".\nIn this position, the attacker will receive messages ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsxs)(s.msub,{children:[(0,t.jsx)(s.mi,{children:"m"}),(0,t.jsx)(s.mi,{children:"v"})]})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"m_v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.5806em",verticalAlign:"-0.15em"}}),(0,t.jsxs)(s.span,{className:"mord",children:[(0,t.jsx)(s.span,{className:"mord mathnormal",children:"m"}),(0,t.jsx)(s.span,{className:"msupsub",children:(0,t.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,t.jsxs)(s.span,{className:"vlist-r",children:[(0,t.jsx)(s.span,{className:"vlist",style:{height:"0.1514em"},children:(0,t.jsxs)(s.span,{style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"},children:[(0,t.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,t.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,t.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"v"})})]})}),(0,t.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,t.jsx)(s.span,{className:"vlist-r",children:(0,t.jsx)(s.span,{className:"vlist",style:{height:"0.15em"},children:(0,t.jsx)(s.span,{})})})]})})]})]})})]})," sent by ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"v"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"})]})})]})," both on the direct path from ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"v"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"})]})})]}),", and on indirect paths relayed by peers of ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"v"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"})]})})]}),".\nIt will also receive messages ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsxs)(s.msub,{children:[(0,t.jsx)(s.mi,{children:"m"}),(0,t.jsx)(s.mi,{children:"x"})]})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"m_x"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.5806em",verticalAlign:"-0.15em"}}),(0,t.jsxs)(s.span,{className:"mord",children:[(0,t.jsx)(s.span,{className:"mord mathnormal",children:"m"}),(0,t.jsx)(s.span,{className:"msupsub",children:(0,t.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,t.jsxs)(s.span,{className:"vlist-r",children:[(0,t.jsx)(s.span,{className:"vlist",style:{height:"0.1514em"},children:(0,t.jsxs)(s.span,{style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"},children:[(0,t.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,t.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,t.jsx)(s.span,{className:"mord mathnormal mtight",children:"x"})})]})}),(0,t.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,t.jsx)(s.span,{className:"vlist-r",children:(0,t.jsx)(s.span,{className:"vlist",style:{height:"0.15em"},children:(0,t.jsx)(s.span,{})})})]})})]})]})})]})," that are not sent by ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"v"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"})]})})]}),". These messages ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsxs)(s.msub,{children:[(0,t.jsx)(s.mi,{children:"m"}),(0,t.jsx)(s.mi,{children:"x"})]})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"m_x"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.5806em",verticalAlign:"-0.15em"}}),(0,t.jsxs)(s.span,{className:"mord",children:[(0,t.jsx)(s.span,{className:"mord mathnormal",children:"m"}),(0,t.jsx)(s.span,{className:"msupsub",children:(0,t.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,t.jsxs)(s.span,{className:"vlist-r",children:[(0,t.jsx)(s.span,{className:"vlist",style:{height:"0.1514em"},children:(0,t.jsxs)(s.span,{style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"},children:[(0,t.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,t.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,t.jsx)(s.span,{className:"mord mathnormal mtight",children:"x"})})]})}),(0,t.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,t.jsx)(s.span,{className:"vlist-r",children:(0,t.jsx)(s.span,{className:"vlist",style:{height:"0.15em"},children:(0,t.jsx)(s.span,{})})})]})})]})]})})]})," are relayed by both ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"v"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"})]})})]})," and the peers of ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"v"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"})]})})]}),".\nMessages that are received (significantly) faster from ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"v"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"})]})})]})," than from any other of ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"v"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"})]})})]}),"'s peers are very likely messages that ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"v"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"})]})})]})," sent,\nbecause for these messages the attacker is one hop closer to the source."]}),"\n",(0,t.jsxs)(s.p,{children:["The attacker can (periodically) measure latency between itself and ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"v"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"})]})})]}),", and between itself and the peers of ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"v"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"})]})})]})," to get more accurate estimates for the expected timings.\nAn AS attacker (and if the topology allows, even a local attacker) could also learn the latency between ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"v"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"})]})})]})," and its well-behaving peers.\nAn active AS attacker could also increase the latency between ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"v"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"})]})})]})," and its peers to make the timing differences more prominent.\nThis, however, might lead to ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"v"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"})]})})]})," switching to other peers."]}),"\n",(0,t.jsxs)(s.p,{children:["This attack cannot (reliably) distinguish messages ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsxs)(s.msub,{children:[(0,t.jsx)(s.mi,{children:"m"}),(0,t.jsx)(s.mi,{children:"v"})]})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"m_v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.5806em",verticalAlign:"-0.15em"}}),(0,t.jsxs)(s.span,{className:"mord",children:[(0,t.jsx)(s.span,{className:"mord mathnormal",children:"m"}),(0,t.jsx)(s.span,{className:"msupsub",children:(0,t.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,t.jsxs)(s.span,{className:"vlist-r",children:[(0,t.jsx)(s.span,{className:"vlist",style:{height:"0.1514em"},children:(0,t.jsxs)(s.span,{style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"},children:[(0,t.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,t.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,t.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"v"})})]})}),(0,t.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,t.jsx)(s.span,{className:"vlist-r",children:(0,t.jsx)(s.span,{className:"vlist",style:{height:"0.15em"},children:(0,t.jsx)(s.span,{})})})]})})]})]})})]})," sent by ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"v"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"})]})})]})," from messages ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsxs)(s.msub,{children:[(0,t.jsx)(s.mi,{children:"m"}),(0,t.jsx)(s.mi,{children:"y"})]})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"m_y"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.7167em",verticalAlign:"-0.2861em"}}),(0,t.jsxs)(s.span,{className:"mord",children:[(0,t.jsx)(s.span,{className:"mord mathnormal",children:"m"}),(0,t.jsx)(s.span,{className:"msupsub",children:(0,t.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,t.jsxs)(s.span,{className:"vlist-r",children:[(0,t.jsx)(s.span,{className:"vlist",style:{height:"0.1514em"},children:(0,t.jsxs)(s.span,{style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"},children:[(0,t.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,t.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,t.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"y"})})]})}),(0,t.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,t.jsx)(s.span,{className:"vlist-r",children:(0,t.jsx)(s.span,{className:"vlist",style:{height:"0.2861em"},children:(0,t.jsx)(s.span,{})})})]})})]})]})})]})," relayed by peers of ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"v"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"})]})})]})," the attacker is not connected to.\nStill, there are hop-count variations that might be leveraged.\nMessages ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsxs)(s.msub,{children:[(0,t.jsx)(s.mi,{children:"m"}),(0,t.jsx)(s.mi,{children:"v"})]})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"m_v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.5806em",verticalAlign:"-0.15em"}}),(0,t.jsxs)(s.span,{className:"mord",children:[(0,t.jsx)(s.span,{className:"mord mathnormal",children:"m"}),(0,t.jsx)(s.span,{className:"msupsub",children:(0,t.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,t.jsxs)(s.span,{className:"vlist-r",children:[(0,t.jsx)(s.span,{className:"vlist",style:{height:"0.1514em"},children:(0,t.jsxs)(s.span,{style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"},children:[(0,t.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,t.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,t.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"v"})})]})}),(0,t.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,t.jsx)(s.span,{className:"vlist-r",children:(0,t.jsx)(s.span,{className:"vlist",style:{height:"0.15em"},children:(0,t.jsx)(s.span,{})})})]})})]})]})})]})," always have a hop-count of 1 on the path from ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"v"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"})]})})]})," to the attacker, while all other paths are longer.\nMessages ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsxs)(s.msub,{children:[(0,t.jsx)(s.mi,{children:"m"}),(0,t.jsx)(s.mi,{children:"y"})]})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"m_y"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.7167em",verticalAlign:"-0.2861em"}}),(0,t.jsxs)(s.span,{className:"mord",children:[(0,t.jsx)(s.span,{className:"mord mathnormal",children:"m"}),(0,t.jsx)(s.span,{className:"msupsub",children:(0,t.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,t.jsxs)(s.span,{className:"vlist-r",children:[(0,t.jsx)(s.span,{className:"vlist",style:{height:"0.1514em"},children:(0,t.jsxs)(s.span,{style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"},children:[(0,t.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,t.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,t.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"y"})})]})}),(0,t.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,t.jsx)(s.span,{className:"vlist-r",children:(0,t.jsx)(s.span,{className:"vlist",style:{height:"0.2861em"},children:(0,t.jsx)(s.span,{})})})]})})]})]})})]})," might have the same hop-count on the path from ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"v"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"})]})})]})," as well as on other paths."]}),"\n",(0,t.jsx)(s.h3,{id:"controlled-neighbourhood",children:"Controlled Neighbourhood"}),"\n",(0,t.jsxs)(s.p,{children:["If a multi node attacker manages to control all peers of the victim node, it can trivially tell which messages originated from ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"v"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"})]})})]}),"."]}),"\n",(0,t.jsx)(s.h3,{id:"observing-messages",children:"Observing Messages"}),"\n",(0,t.jsxs)(s.p,{children:["If Waku relay was not protected with Noise, the AS attacker could simply check for messages leaving ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"v"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"})]})})]})," which have not been relayed to ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"v"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"})]})})]}),".\nThese are the messages sent by ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"v"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"})]})})]}),".\nWaku relay protects against this attack by employing secure channels setup using Noise."]}),"\n",(0,t.jsx)(s.h3,{id:"correlation",children:"Correlation"}),"\n",(0,t.jsxs)(s.p,{children:["Monitoring all traffic (in an AS or globally), allows the attacker to identify traffic correlated with messages originating from ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"v"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"})]})})]}),".\nThis (alone) does not allow an external attacker to learn which message ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsx)(s.mi,{children:"v"})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"v"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,t.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"v"})]})})]})," sent, but it allows identifying the respective traffic propagating through the network.\nThe more traffic in the network, the lower the success rate of this attack."]}),"\n",(0,t.jsx)(s.p,{children:"Combined with just a few nodes controlled by the attacker, the actual message associated with the correlated traffic can eventually be identified."}),"\n",(0,t.jsx)(s.h3,{id:"dos",children:"DoS"}),"\n",(0,t.jsx)(s.p,{children:"An active single node attacker could run a disruption attack by"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"(1) dropping messages that should be relayed"}),"\n",(0,t.jsx)(s.li,{children:"(2) flooding neighbours with bogus messages"}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["While (1) has a negative effect on availability, the impact is not significant.\nA linearly scaling botnet attacker, however, could significantly disrupt the network with such an attack.\n(2) is thwarted by ",(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/core/17/rln-relay",children:"RLN"}),".\nAlso ",(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/deprecated/18/swap",children:"SWAP"})," helps mitigating DoS attacks."]}),"\n",(0,t.jsxs)(s.p,{children:["A local attacker can DoS Waku by dropping all Waku traffic within its controlled network segment.\nAn AS attacker can DoS Waku within its authority, while a global attacker can DoS the whole network.\nA countermeasure are censorship resistance techniques like ",(0,t.jsx)(s.a,{href:"https://www.pluggabletransports.info/about/",children:"Pluggable Transports"}),"."]}),"\n",(0,t.jsx)(s.h2,{id:"summary-and-future-work",children:"Summary and Future Work"}),"\n",(0,t.jsx)(s.p,{children:"Currently, Waku v2 relay offers k-anonymity with respect to receiver anonymity.\nThis also includes k-anonymity towards legitimate members of the same topic."}),"\n",(0,t.jsxs)(s.p,{children:["Waku v2 relay offers sender anonymity in the single node attacker model with its ",(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/core/11/relay/#signature-policy",children:"strict no sign policy"}),".\nCurrently, Waku v2 does not guarantee sender anonymity in the multi node and stronger attacker models.\nHowever, we are working on modular anonymity-preserving protocols and building blocks as part of our privacy/anonymity roadmap.\nThe goal is to allow tunable anonymity with respect to trade offs between ",(0,t.jsx)(s.em,{children:"strong anonymity"}),", ",(0,t.jsx)(s.em,{children:"low bandwidth"}),", and ",(0,t.jsx)(s.em,{children:"low latency"}),".\nAll of these cannot be fully guaranteed as the ",(0,t.jsx)(s.a,{href:"https://freedom.cs.purdue.edu/projects/trilemma.html",children:"the anonymity trilemma"})," states.\nSome applications have specific requirements, e.g. low latency, which require a compromise on anonymity.\nAnonymity-preserving mechanisms we plan to investigate and eventually specify as pluggable anonymity protocols for Waku comprise"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://arxiv.org/abs/1805.11060",children:"Dandelion++"})," for lightweight anonymity;"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/Onion_routing",children:"onion routing"})," as a building block adding a low latency anonymization layer;"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/Mix_network",children:"a mix network"})," for providing strong anonymity (on top of onion routing) even in the strongest attacker model at the cost of higher latency."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["These pluggable anonymity-preserving protocols will form a sub-set of the Waku v2 protocol set.\nAs an intermediate step, we might directly employ Tor for onion-routing, and ",(0,t.jsx)(s.a,{href:"https://nymtech.net/",children:"Nym"})," as a mix-net layer."]}),"\n",(0,t.jsx)(s.p,{children:"In future research log posts, we will cover further Waku v2 protocols and identify anonymity problems that will be added to our roadmap.\nThese protocols comprise"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/core/13/store",children:"13/WAKU2-STORE"}),", which can violate receiver anonymity as it allows filtering by content topic.\nA countermeasure is using the content topic exclusively for local filters."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/core/12/filter",children:"12/WAKU2-FILTER"}),", which discloses nodes' interest in topics;"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/core/19/lightpush",children:"19/WAKU2-LIGHTPUSH"}),", which also discloses nodes' interest in topics and links the lightpush client as the sender of a message to the lightpush service node;"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/application/21/fault-tolerant-store",children:"21/WAKU2-FTSTORE"}),", which discloses nodes' interest in specific time ranges allowing to infer information like online times."]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"While these protocols are not necessary for the operation of Waku v2, and can be seen as pluggable features,\nwe aim to provide alternatives without the cost of lowering the anonymity level."}),"\n",(0,t.jsx)(s.h2,{id:"references",children:"References"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/core/10/waku2",children:"10/WAKU2"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/core/11/relay",children:"11/WAKU2-RELAY"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/README.md",children:"libp2p GossipSub"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/Information_security",children:"Security"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/Authentication",children:"Authentication"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/Non-repudiation",children:"Non-repudiation"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://noiseprotocol.org/",children:"Noise Protocol Framework"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/Plausible_deniability#Use_in_cryptography",children:"plausible deniability"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/core/14/message",children:"Waku v2 message"})}),"\n",(0,t.jsxs)(s.li,{children:["[partitioned topics](",(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/status/deprecated/10/waku-usage",children:"https://rfc.vac.dev/status/deprecated/10/waku-usage"}),"\n#partitioned-topic)"]}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/Sybil_attack",children:"Sybil attack"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/Dolev%E2%80%93Yao_model",children:"Dolev-Yao model"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://github.com/waku-org/specs/blob/master/standards/application/noise.md",children:"WAKU2-NOISE"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://research.logos.co/wakuv2-apd",children:"33/WAKU2-DISCV5"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#why-are-we-using-the-strictnosign-signature-policy",children:"strict no sign policy"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/core/11/relay#signature-policy",children:"Waku v2 strict no sign policy"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/core/17/rln-relay",children:"17/WAKU-RLN-RELAY"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://freedom.cs.purdue.edu/projects/trilemma.html",children:"anonymity trilemma"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/deprecated/18/swap",children:"18/WAKU2-SWAP"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://www.pluggabletransports.info/about/",children:"Pluggable Transports"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://nymtech.net/",children:"Nym"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://arxiv.org/abs/1805.11060",children:"Dandelion++"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/core/13/store",children:"13/WAKU2-STORE"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/core/12/filter",children:"12/WAKU2-FILTER"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/core/19/lightpush",children:"19/WAKU2-LIGHTPUSH"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/application/21/fault-tolerant-store",children:"21/WAKU2-FTSTORE"})}),"\n"]})]})}function d(e={}){const{wrapper:s}={...(0,i.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(o,{...e})}):o(e)}},93776:(e,s,a)=>{a.d(s,{A:()=>n});const n="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iMjEuMzEyMTEzbW0iCiAgIGhlaWdodD0iMjQuODY2NzIybW0iCiAgIHZpZXdCb3g9IjAgMCAyMS4zMTIxMTMgMjQuODY2NzIyIgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmc1IgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxkZWZzCiAgICAgaWQ9ImRlZnMyIiAvPgogIDxnCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMy42NTM0ODM0LC02LjE1OTM5ODQpIj4KICAgIDxlbGxpcHNlCiAgICAgICBzdHlsZT0iZmlsbDojYzgwMDAwO2ZpbGwtb3BhY2l0eTowLjI7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlLXdpZHRoOjAuMjY0NTgzIgogICAgICAgaWQ9InBhdGgzOS0zIgogICAgICAgY3g9Ii04LjA5NDkxMTYiCiAgICAgICBjeT0iMTUuMzc4NTM4IgogICAgICAgcng9IjkuMzkyNzA3OCIKICAgICAgIHJ5PSIzLjk2ODc1IgogICAgICAgdHJhbnNmb3JtPSJyb3RhdGUoLTYwLjczMzYxMykiIC8+CiAgICA8ZWxsaXBzZQogICAgICAgc3R5bGU9ImZpbGw6IzAwMDA2NDtmaWxsLW9wYWNpdHk6MC4yO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZS13aWR0aDowLjI2NDU4MyIKICAgICAgIGlkPSJwYXRoMzktNiIKICAgICAgIGN4PSIxNC4xMTAyNDMiCiAgICAgICBjeT0iMjIuNDY4NjI4IgogICAgICAgcng9IjkuMzkyNzA3OCIKICAgICAgIHJ5PSIzLjk2ODc1IiAvPgogICAgPGVsbGlwc2UKICAgICAgIHN0eWxlPSJmaWxsOiMyODAwMjg7ZmlsbC1vcGFjaXR5OjAuMztmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2Utd2lkdGg6MC4xOTU5MDEiCiAgICAgICBpZD0icGF0aDM5LTciCiAgICAgICBjeD0iMTQuMTIzMzI5IgogICAgICAgY3k9IjI5LjA3NDIzNiIKICAgICAgIHJ4PSIxMC40Njk4NDYiCiAgICAgICByeT0iMS45NTE4ODUxIiAvPgogICAgPGVsbGlwc2UKICAgICAgIHN0eWxlPSJmaWxsOiMwMDY0MDA7ZmlsbC1vcGFjaXR5OjAuMjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2Utd2lkdGg6MC4yNjQ1ODMiCiAgICAgICBpZD0iZWxsaXBzZTc4NyIKICAgICAgIGN4PSItMjIuMTEyMzEyIgogICAgICAgY3k9Ii05LjYzNDU1MDEiCiAgICAgICByeD0iOS4zOTI3MDc4IgogICAgICAgcnk9IjMuOTY4NzUiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgtMC40ODg4NzA3NiwtMC44NzIzNTYyMiwtMC44NzIzNTYyMiwwLjQ4ODg3MDc2LDAsMCkiIC8+CiAgICA8dGV4dAogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEuNTQxNTVweDtmb250LWZhbWlseTpzYW5zLXNlcmlmO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4wMzg1Mzg2IgogICAgICAgeD0iLTEwLjYzMjMwNSIKICAgICAgIHk9IjE2LjM2NjU3OSIKICAgICAgIGlkPSJ0ZXh0NDI1OSIKICAgICAgIHRyYW5zZm9ybT0icm90YXRlKC01NS4wMjk4MDcpIj48dHNwYW4KICAgICAgICAgaWQ9InRzcGFuNDI1NyIKICAgICAgICAgc3R5bGU9InN0cm9rZS13aWR0aDowLjAzODUzODYiCiAgICAgICAgIHg9Ii0xMC42MzIzMDUiCiAgICAgICAgIHk9IjE2LjM2NjU3OSI+bG93IGxhdGVuY3k8L3RzcGFuPjwvdGV4dD4KICAgIDx0ZXh0CiAgICAgICB4bWw6c3BhY2U9InByZXNlcnZlIgogICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MS42MDUxN3B4O2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjA0MDEyOTQiCiAgICAgICB4PSIxNy4xMzU3NCIKICAgICAgIHk9Ii04Ljc1MjMyNiIKICAgICAgIGlkPSJ0ZXh0MTAzMjMiCiAgICAgICB0cmFuc2Zvcm09InJvdGF0ZSg1OC4wMjkxOSkiPjx0c3BhbgogICAgICAgICBpZD0idHNwYW4xMDMyMSIKICAgICAgICAgc3R5bGU9InN0cm9rZS13aWR0aDowLjA0MDEyOTQiCiAgICAgICAgIHg9IjE3LjEzNTc0IgogICAgICAgICB5PSItOC43NTIzMjYiPmxvdyBiYW5kd2lkdGg8L3RzcGFuPjwvdGV4dD4KICAgIDx0ZXh0CiAgICAgICB4bWw6c3BhY2U9InByZXNlcnZlIgogICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MS41NTM0NnB4O2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjAzODgzNjciCiAgICAgICB4PSI3LjQ3NTA3ODYiCiAgICAgICB5PSIyMi45MzU0IgogICAgICAgaWQ9InRleHQxMjk0MyI+PHRzcGFuCiAgICAgICAgIGlkPSJ0c3BhbjEyOTQxIgogICAgICAgICBzdHlsZT0ic3Ryb2tlLXdpZHRoOjAuMDM4ODM2NyIKICAgICAgICAgeD0iNy40NzUwNzg2IgogICAgICAgICB5PSIyMi45MzU0Ij5zdHJvbmcgYW5vbnltaXR5PC90c3Bhbj48L3RleHQ+CiAgICA8dGV4dAogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEuNDk2MjFweDtmb250LWZhbWlseTpzYW5zLXNlcmlmO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4wMzc0MDUzIgogICAgICAgeD0iNi4xNjc4NDEiCiAgICAgICB5PSIyOS42ODc5MjUiCiAgICAgICBpZD0idGV4dDE0MzgzIj48dHNwYW4KICAgICAgICAgaWQ9InRzcGFuMTQzODEiCiAgICAgICAgIHN0eWxlPSJzdHJva2Utd2lkdGg6MC4wMzc0MDUzIgogICAgICAgICB4PSI2LjE2Nzg0MSIKICAgICAgICAgeT0iMjkuNjg3OTI1Ij5mcmVxdWVuY3kgLyBwYXR0ZXJuPC90c3Bhbj48L3RleHQ+CiAgPC9nPgo8L3N2Zz4K"}}]);