<oembed><type>rich</type><version>1.0</version><author_name>npub1e46n428mcyfwznl7nlsf6d3s7rhlwm9x3cmkuqzt3emmdpadmkaqqjxmcu</author_name><author_url>https://nostr.ae/npub1e46n428mcyfwznl7nlsf6d3s7rhlwm9x3cmkuqzt3emmdpadmkaqqjxmcu</author_url><provider_name>njump</provider_name><provider_url>https://nostr.ae</provider_url><html>📅 Original date posted:2015-08-21&#xA;📝 Original message:Revised copy follows. re: mentioning the HTTP seeding stuff, I&#39;m not&#xA;sure we want to encourage more people aside from bitcoinj to use&#xA;that...I thought about adding a DNS seed section to this bip, but&#xA;decided against it...still, I think we should add the option to select&#xA;service bits to DNS seeds ASAP.&#xA;&#xA;Re: need to &#34;shard&#34; the blockchain: not sure what you&#39;re referring to&#xA;here. The bloom filter stuff requires you to download the chain&#xA;in-order, sure, but you have to do that for headers anyway, and&#xA;hopefully your total data isnt too much more than headers alone.&#xA;&#xA;Anyone have the best reference for the DoS issues?&#xA;&#xA;BIP: ?&#xA;Title: NODE_BLOOM service bit&#xA;Author: Matt Corallo &lt;bip at bluematt.me&gt;, Peter Todd &lt;pete at petertodd.org&gt;&#xA;Type: Standards Track (draft)&#xA;Created: 20-08-2015&#xA;&#xA;Abstract&#xA;========&#xA;&#xA;This BIP extends BIP 37, Connection Bloom filtering, by defining a&#xA;service bit to allow peers to advertise that they support bloom filters&#xA;explicitly. It also bumps the protocol version to allow peers to&#xA;identify old nodes which allow bloom filtering of the connection despite&#xA;lacking the new service bit.&#xA;&#xA;&#xA;Motivation&#xA;==========&#xA;&#xA;BIP 37 did not specify a service bit for the bloom filter service, thus&#xA;implicitly assuming that all nodes that serve peers data support it.&#xA;However, the connection filtering algorithm proposed in BIP 37, and&#xA;implemented in several clients today, has been shown to provide little&#xA;to no privacy[1], as well as being a large DoS risk on some nodes[2].&#xA;Thus, allowing node operators to disable connection bloom filtering is a&#xA;much-needed feature.&#xA;&#xA;&#xA;Specification&#xA;=============&#xA;&#xA;The following protocol bit is added:&#xA;&#xA;    NODE_BLOOM = (1 &lt;&lt; 2)&#xA;&#xA;Nodes which support bloom filters should set that protocol bit.&#xA;Otherwise it should remain unset. In addition the protocol version is&#xA;increased from 70002 to 70011 in the reference implementation. It is&#xA;often the case that nodes which have a protocol version smaller than&#xA;70011, but larger than 70000 support bloom filtered connections without&#xA;the NODE_BLOOM bit set, however clients which require bloom filtered&#xA;connections should avoid making this assumption.&#xA;&#xA;NODE_BLOOM is distinct from NODE_NETWORK, and it is legal to advertise&#xA;NODE_BLOOM but not NODE_NETWORK (eg for nodes running in pruned mode&#xA;which, nonetheless, provide filtered access to the data which they do have).&#xA;&#xA;If a node does not support bloom filters but receives a &#34;filterload&#34;,&#xA;&#34;filteradd&#34;, or &#34;filterclear&#34; message from a peer the node should&#xA;disconnect that peer immediately. For backwards compatibility, in&#xA;initial implementations, nodes may choose to only disconnect nodes which&#xA;have the new protocol version set and attempt to send a filter command.&#xA;&#xA;While outside the scope of this BIP it is suggested that DNS seeds and&#xA;other peer discovery mechanisms support the ability to specify the&#xA;services required; current implementations simply check only that&#xA;NODE_NETWORK is set.&#xA;&#xA;&#xA;Design rational&#xA;===============&#xA;&#xA;A service bit was chosen as applying a bloom filter is a service.&#xA;&#xA;The increase in protocol version is for backwards compatibility. In&#xA;initial implementations, old nodes which are not yet aware of NODE_BLOOM&#xA;and use a protocol version &lt; 70011 may still send filter* messages to a&#xA;node without NODE_BLOOM. This feature may be removed after there are&#xA;sufficient NODE_BLOOM nodes available and SPV clients have upgraded,&#xA;allowing node operators to fully close the bloom-related DoS vectors.&#xA;&#xA;&#xA;Reference Implementation&#xA;========================&#xA;&#xA;https://github.com/bitcoin/bitcoin/pull/6579&#xA;&#xA;&#xA;Copyright&#xA;=========&#xA;&#xA;This document is placed in the public domain.&#xA;&#xA;&#xA;References&#xA;==========&#xA;&#xA;[1] http://eprint.iacr.org/2014/763&#xA;[2] ???? is one example where the issues were found, though others&#xA;independently discovered issues as well. Sample DoS exploit code&#xA;available at https://github.com/petertodd/bloom-io-attack.&#xA;&#xA;&#xA;&#xA;On 08/21/15 05:42, Peter Todd wrote:&#xA;&gt; On Thu, Aug 20, 2015 at 10:38:19PM -0700, Peter Todd via bitcoin-dev wrote:&#xA;&gt;&gt;&gt; Motivation&#xA;&gt;&gt;&gt; ==========&#xA;&gt;&gt;&gt;&#xA;&gt;&gt;&gt; BIP 37 did not specify a service bit for the bloom filter service, thus&#xA;&gt;&gt;&gt; implicitly assuming that all nodes that serve peers data support it.&#xA;&gt;&gt;&gt; However, the connection filtering algorithm proposed in BIP 37, and&#xA;&gt;&gt;&gt; implemented in several clients today, has been shown to provide little&#xA;&gt;&gt;&gt; to no privacy, as well as being a large DoS risk on some nodes. Thus,&#xA;&gt;&gt;&gt; allowing node operators to disable connection bloom filtering is a&#xA;&gt;&gt;&gt; much-needed feature.&#xA;&gt;&gt;&#xA;&gt;&gt; I&#39;d reference that paper on bloom filters re: the &#34;little to no privacy&#34;&#xA;&gt;&gt; issue. There&#39;s also a post in the bitcoinj mailing list somewhere IIRC&#xA;&gt;&gt; talking about the default settings, and how they don&#39;t provide any&#xA;&gt;&gt; privacy.&#xA;&gt; &#xA;&gt; Oh, and we should also point out that Bloom filters have scaling issues,&#xA;&gt; as each application of the filter has to scan the whole blockchain -&#xA;&gt; with future blocksize increases these issues increase, in some proposals&#xA;&gt; quite dramatically. The underlying idea also conflicts with some&#xA;&gt; proposals to &#34;shard&#34; the blockchain, again suggesting that we need a bit&#xA;&gt; to handle future upgrades to more scalable designs.&#xA;&gt;</html></oembed>