From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from sog-mx-1.v43.ch3.sourceforge.com ([172.29.43.191] helo=mx.sourceforge.net) by sfs-ml-2.v29.ch3.sourceforge.com with esmtp (Exim 4.76) (envelope-from ) id 1Vdlp9-0000F6-0m for bitcoin-development@lists.sourceforge.net; Tue, 05 Nov 2013 18:57:59 +0000 Received-SPF: pass (sog-mx-1.v43.ch3.sourceforge.com: domain of taplink.co designates 50.117.27.232 as permitted sender) client-ip=50.117.27.232; envelope-from=jeremy@taplink.co; helo=mail.taplink.co; Received: from mail.taplink.co ([50.117.27.232]) by sog-mx-1.v43.ch3.sourceforge.com with smtp (Exim 4.76) id 1Vdlp7-0002Ah-Sw for bitcoin-development@lists.sourceforge.net; Tue, 05 Nov 2013 18:57:58 +0000 Received: from laptop-air ([192.168.168.135]) by mail.taplink.co ; Tue, 5 Nov 2013 10:58:04 -0800 Content-Type: multipart/alternative; boundary=----------fjmie4P42zYKJW9i6gxToi To: "Peter Todd" , Ittay References: <20131105170541.GA13660@petertodd.org> Date: Tue, 05 Nov 2013 10:57:34 -0800 MIME-Version: 1.0 From: "Jeremy Spilman" Organization: TapLink Message-ID: In-Reply-To: User-Agent: Opera Mail/1.0 (Win32) oclient: 192.168.168.135#jeremy@taplink.co#465 X-Spam-Score: -0.6 (/) X-Spam-Report: Spam Filtering performed by mx.sourceforge.net. See http://spamassassin.org/tag/ for more details. -1.5 SPF_CHECK_PASS SPF reports sender host as permitted sender for sender-domain -0.0 SPF_PASS SPF: sender matches SPF record -0.0 RP_MATCHES_RCVD Envelope sender domain matches handover relay domain 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: taplink.co] 1.0 HTML_MESSAGE BODY: HTML included in message -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature X-Headers-End: 1Vdlp7-0002Ah-Sw Cc: Bitcoin Dev , Gavin Andresen , =?iso-8859-15?Q?Emin_G=FCn_Sirer?= Subject: Re: [Bitcoin-development] BIP proposal - patch to raise selfish mining threshold. X-BeenThere: bitcoin-development@lists.sourceforge.net X-Mailman-Version: 2.1.9 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Nov 2013 18:57:59 -0000 ------------fjmie4P42zYKJW9i6gxToi Content-Type: text/plain; charset=utf-8; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Great paper Ittay, thanks for all your work on this. > Today the threshold is 0% with good connectivity. Fig. 2 captures this well, the threshold is only zero if 'y' is 1. In Section 6 and 6.1 you argue y -> 1 but the sybil attack you describe, isn't that more like how *all* sophisticated miners would want to ensure their blocks are widely propagated? I think you can't assume only the selfish miner is doing it. Based on the current 'first seen' algorithm, as you say, competing longest chains happen about every 60 blocks. The rest of the time, a single block propagates through the vast majority of the network 'uncontested'. If there are multiple valid longest blocks being simultaneously propagated, then propagation pattern of the competing blocks will determine hash rate on each. Selfish mining requires exploiting the race condition between learning about a competing block, and publishing your own. Usually we talk about minimizing publishing latency so that your block ends up uncontested 59/60 times, and in the 1/60 times, even then your block has the best chance of winning. Selfish mining forgoes the 59/60 chance of your block being uncontested, and instead chooses to 'race the network' every time. You start 'one step behind' the competing block (since of course you only learn about it after it starts propagating), so you must rely on being able to outrace propagation of the competing block through a private low-latency side-network which can inject your block at multiple points throughout the bitcoin p2p network to outrace the competitor. I think it's a stretch to say 'y' is 0 with good connectivity. Even the best connected mining pools today are concerned with this 'y' factor. Here's a probably very dumb idea... to throw out one possible "solution"... You want a way to fake-out the 'selfish miner' into disclosing their blocks -- how can your force their hand to prevent them from accumulating longer private chains? What if you propagate (and relay) an encrypted block header which honest miners will timestamp when they receive it, then 10 seconds later propagate the decryption key to unblind it. But here's the catch - maybe the decryption results in junk, maybe it results a new longer block. If it's a real block then it gets priority based on when the ciphertext was received instead of when the decryption key was received. Now 'selfish miner' can't race the network anymore, because they are always in state 0' and can't tell if they are up against a ghost, or a real competing block. If they wait for the decryption key to check, it's too late, and they are guaranteed to lose unless they can out-race the network, e.g. back at t=50%. Of course there would need to be some way to anti-DDoS this which allows for some amount of these fake-outs without letting them get out of hand. Thanks, Jeremy ------------fjmie4P42zYKJW9i6gxToi Content-Type: multipart/related; boundary=----------fjmie4P42zYKJW2CmQkai6 ------------fjmie4P42zYKJW2CmQkai6 Content-Type: text/html; charset=utf-8 Content-ID: Content-Transfer-Encoding: Quoted-Printable
Great paper Ittay, thanks for all your work on this. 

Today the threshold is 0% = with good connectivity. 
Fig. 2 captures this well, the threshold is only zero if 'y'= is 1. In Section 6 and 6.1 you argue y -> 1 but the sybil attack you= describe, isn't that more like how *all* sophisticated miners would wan= t to ensure their blocks are widely propagated? I think you can't assume= only the selfish miner is doing it.

Based on t= he current  'first seen' algorithm, as you say, competing longest chains happen about every 60 bl= ocks.  The rest of the time, a single block propagates through the = vast majority of the network 'uncontested'.  If there are multiple = valid longest blocks being simultaneously propagated, then  propaga= tion pattern of the competing blocks will determine hash rate on each.

Selfish mining requires exploiting the race cond= ition between learning about a competing block, and publishing your own.= Usually we talk about minimizing publishing latency so that your block = ends up uncontested 59/60 times, and in the 1/60 times, even then your b= lock has the best chance of winning.

Selfish mi= ning forgoes the 59/60 chance of your block being uncontested, and inste= ad chooses to 'race the network' every time. You start 'one step behind'= the competing block (since of course you only learn about it after it s= tarts propagating), so you must rely on being able to outrace propagatio= n of the competing block through a private low-latency side-network whic= h can inject your block at multiple points throughout the bitcoin p2p ne= twork to outrace the competitor.

I think it's a= stretch to say 'y' is 0 with good connectivity. Even the best connected= mining pools today are concerned with this 'y' factor. 
=
Here's a probably very dumb idea... to throw out one poss= ible "solution"...

You want a way to fake-out t= he 'selfish miner' into disclosing their blocks -- how can your force th= eir hand to prevent them from accumulating longer private chains?
<= div>
What if you propagate (and relay) an encrypted block = header which honest miners will timestamp when they receive it, then 10 = seconds later propagate the decryption key to unblind it. But here's the= catch - maybe the decryption results in junk, maybe it results a new lo= nger block. If it's a real block then it gets priority based on when the= ciphertext was received instead of when the decryption key was received= . Now 'selfish miner' can't race the network anymore, because they are a= lways in state 0' and can't tell if they are up against a ghost, or a re= al competing block. If they wait for the decryption key to check, it's t= oo late, and they are guaranteed to lose unless they can out-race the ne= twork, e.g. back at t=3D50%. Of course there would need to be some way t= o anti-DDoS this which allows for some amount of these fake-outs without= letting them get out of hand.

Thanks,
Jeremy
------------fjmie4P42zYKJW2CmQkai6-- ------------fjmie4P42zYKJW9i6gxToi--