Pages:
Author

Topic: Sites accepting 0-confirmation txns (Read 4052 times)

legendary
Activity: 1204
Merit: 1015
May 16, 2012, 03:48:48 PM
#45
It shouldn't be seen as a silver bullet or magic weapon.  It would require a smart merchant who deals in low price, high margin transactions and is willing and able to do some risk analysis.  Remember credit cards are 0% risk either.  The goal for a merchant who needs to deal w/ real time tx shouldn't be 0% fraud but to minimize and manage that fraud.
And that is why the download services that take 0-confirmation transactions are totally safe: bandwidth is cheap, and if a file is stolen like this, they can just simply tell whoever would have been paid that the file was stolen and that they won't be paid for that download. The person who would have been paid wouldn't care either, since to them, the person who stole the file might as well have just pirated it instead of stealing it directly.

Hell, if you've ever downloaded a song at Amazon MP3 or itunes, they don't even bother authorizing the credit card for a few hours. Defeating that doesn't even require you to do something as technically difficult as a normal Bitcoin double-spend!

Double-spends matter to so few people that it's sort of ridiculous. As I've mentioned in the past, double spends only matter if all of the following are true:

1) Purchaser is anonymous.
Real life isn't anonymous, since it can be recorded with a video camera.
2) Item is irrevocable/irretrievable.
You could buy a video game license instantly, without risk to the publisher, because it is revocable.
3) Transaction is instant.

Finney attacks add even more restrictions:

4) Item is easy to resell/you can easily get a refund.
Finney attacks don't always work, and unlike normal double-spends where you can try it only when you want the item anyway, you will most likely need to be able to resell the items to make up for your loses when the Finney attack fails. This restriction isn't always true, but it certainly reduces the motivation to steal the item.
5) Attacker is able to pick the time that they pay at, within a few seconds.
Imagine waiting to do a Finney Attack at the grocery store. You get a notification to checkout immediately, then some couponer gets in the checkout line right before you do. Or, more likely, as your stuff is being scanned at the checkout, you lose the Finney Attack because another block was found as you were checking out.

As you can see, real life zero-confirmation transactions are already at least as safe as credit cards are to the merchants, and more likely they are several orders of magnitude safer. This is even true of most internet transactions: if credit cards are already good enough for a business, zero-confirmation bitcoin transactions likely are too. This could even eventually include selling gift cards if you are able to convince a retailer to let you revoke the remaining balance of a gift card if the transaction fails (currently, this is a big if, but it can happen if retailers start selling their own giftcards for bitcoins).

Off the top of my head, the only things that I can think of that would need to worry about the Finney Attack are places that sell cash or cash-like items. Mostly, that would be exchanges, but that definition can also include any e-wallet that allows you to withdraw without tying the withdrawal transaction to the deposit transaction (which would be a good idea for e-wallets to start doing; thank you satoshidice for the idea) or without waiting 6 confirmations.
donator
Activity: 1218
Merit: 1079
Gerald Davis
May 16, 2012, 12:03:49 AM
#44
5 BTC / 0.083 = 60 seconds.  At 60 seconds the "double spend game" is fair.  In the long run neither the attacker or merchant will neither gain or lose anything.

I'm asserting that the merchant will indeed lose something.  He'll lose his product and not get his 5 BTC in the majority of cases with nothing balancing that loss.

Sorry yeah that was a bad reference.  I updated it in the quote.

The point is that one can increase the economic cost of the attack to the point where a profitable attack is no longer viable.  The merchant still loses but so does the attacker.  The example above was showing the break even point but a smart merchant would push it solidly negative for the attacker.  

Much like the blockchain can't prevent NON-ECONOMIC 51% attacks the merchant can't prevent NON-ECONOMIC finney attacks.  If someone has BTC to burn they can force the merchant to take a loss (or stop accepting 0-confirm txs).   Still the more likely attack is one where the attacker is actively trying to profit from the merchant.  By forcing the attacker to hold a rapidly depreciating asset (the block reward) for a random period of time the merchant can make the attack riskier, and more complicated for the attacker.

It shouldn't be seen as a silver bullet or magic weapon.  It would require a smart merchant who deals in low price, high margin transactions and is willing and able to do some risk analysis.  Remember credit cards are 0% risk either.  The goal for a merchant who needs to deal w/ real time tx shouldn't be 0% fraud but to minimize and manage that fraud.
legendary
Activity: 2940
Merit: 1333
May 15, 2012, 11:59:21 PM
#43
If merchant waited 5 minutes then an attacker would not risk his block unless he expected to gain more than 25BTC from the merchant.

This is true.  The attacker wouldn't attack because he doesn't expect to gain anything.  What I'm disputing is this:

5 BTC / 0.083 = 60 seconds.  At 60 seconds the "double spend game" is fair.  In the long run neither the attacker or merchant will gain or lose anything.

I'm asserting that the merchant will indeed lose something.  He'll lose his product and not get his 5 BTC in the majority of cases with nothing balancing that loss.
donator
Activity: 1218
Merit: 1079
Gerald Davis
May 15, 2012, 10:32:39 PM
#42
I think we're miscommunitating somewhere, but I'm not sure where.   There is no publicly available Bitcoin software which is able to "see" the double spend and alert the site and the network itself won't propagate the conflicting transaction, so even if such software was widely available it would not be very effective.  

Of course there is.  It is called a well connected bitcoind.

Lets call the two tx
A: the valid spend
B: the double spend

Attacker tries to send both of them to the network.  Remember attacker can't send the tx directly to me he can only broadcast them to some or all of the peers he happens to be connected to.  BTW what are the IP address of my bitcoind nodes? Smiley

So what are the possible outcomes:
B wins the race to the pools AND my bitcoind (and all my direct peers).  I never see A.  While I may not be aware of the double spend I haven't got paid = no loss
A wins the race to the pools AND my bitcoind (and all my direct peers).  Double spend failed.  I may not be aware of the double spend but I got paid = no loss.
B wins the race to the pools AND A wins the race to my bitcoind. This is the interesting one.

First I would argue the third case is already difficult but we can make it more difficult by simply waiting 10 seconds.  If anyone ONE of my direct peers gets B first then it will relay it to me and I will be aware of A & B.

Often (incorrectly) it is assumed the attacker just needs to get A to "me" and B to the "pool" however that isn't accurate.  The attacker needs to get A to "me" AND all of my peers (which for one of my nodes is 827) AND there may/should be MULTIPLE "me's" while simultaneously getting B to "the pools".

A nearly impossible task when the attacker doesn't know which node is me, how many me's there are, nor does he know which nodes are my direct peers, nor can he control the relaying of the peers.
hero member
Activity: 504
Merit: 500
May 15, 2012, 10:30:36 PM
#41
My family of sites all accept payments at zero confirmations:

Paysius.com
FeedZeBirds.com
SatoshiDice.com
Coinapult.com


If you try a double-spending attack, please get in contact with myself and bearbones (ira miller) so we can proceed together.



hmm, i wonder if you could get paid from feedzebirds by finney paying for an ad and on other accounts retweet it
rjk
sr. member
Activity: 448
Merit: 250
1ngldh
May 15, 2012, 10:22:01 PM
#40
There are things that could be done in the protocol to help this, e.g. flooding information about the existence of double spends.  Or merchants with hacked up software which abusively tries to connect to the whole network may have a fighting chance ...  but in the direct and obvious implementation with current software, what you're suggesting is not safe.  Suggestions like having the node remote might be a good idea— though they're bad for reliability... but that isn't even something our community advises as a best practice.   Security isn't about being secure iff you get lucky and a bunch of random characteristics about your setup happen to be the right ones that make an attack hard.
I believe that having multiple remote nodes with many connections is indeed what some merchant providers (Bit-pay?) do to ensure double spend detection.

And why is connecting to a majority of the network considered abusive, if I may ask? Reference for example piuk's blockchain.info site - as of this writing it is connected to about 300 nodes, but I believe this number has been in the 2000-3000 range before.
staff
Activity: 4284
Merit: 8808
May 15, 2012, 10:09:38 PM
#39
There is no double spend propagation, notification (even when it propagates to the victim), or repercussions (at least so far I'm not aware of anyone successfully being prosecuted for bitcoin based fraud, though I expect it will happen someday) ... this means that I can give my victim a transaction but 1ms later simultaneously give the same transaction to all the big pools.    The whole network will be my attacker then.

Well there is "instant" and there is "instant".   Waiting even 10 seconds would make such weak attack worthless.  A good merchant's bitcoin node should be unknown.  It doesn't need to be on the same server as the storefront.  The merchant would see the double spend and halt the transaction.

I think we're miscommunitating somewhere, but I'm not sure where.   There is no publicly available Bitcoin software which is able to "see" the double spend and alert the site and the network itself won't propagate the conflicting transaction, so even if such software was widely available it would not be very effective.  

There is no amount of waiting, short of the first including block which is sufficient to show evidence that most of the hash power isn't attempting to mine some conflicting transaction, at least not currently.

There are things that could be done in the protocol to help this, e.g. flooding information about the existence of double spends.  Or merchants with hacked up software which abusively tries to connect to the whole network may have a fighting chance ...  but in the direct and obvious implementation with current software, what you're suggesting is not safe.  Suggestions like having the node remote might be a good idea— though they're bad for reliability... but that isn't even something our community advises as a best practice.   Security isn't about being secure iff you get lucky and a bunch of random characteristics about your setup happen to be the right ones that make an attack hard.
legendary
Activity: 1246
Merit: 1016
Strength in numbers
May 15, 2012, 07:36:53 PM
#38
5 BTC / 0.083 = 60 seconds.  At 60 seconds the "double spend game" is fair.  In the long run neither the attacker or merchant will gain or lose anything.

Is that right?

If the merchant waits 60 seconds before sending goods priced at 5 BTC to the attacker, then he has a 1 in 11 chance that someone else will solve a block, making the attacker lose his 50 BTC block reward.  In this case the merchant makes a regular 5 BTC sale and profits by his regular markup.

He also has a 10 in 11 chance that nobody else solves the block.  In this case the attacker gets the goods worth 5 BTC as well as the 50 BTC block reward.  The merchant is out 5 BTC.

That's not fair.  It's break-even for the attacker - he loses 50 BTC 1/11th of the time and gains 5 BTC 10/11 of the time, and 50*1/11 = 5*10/11 - but it's a net loss for the merchant.  Most of the time he gets ripped off for 5 BTC, and 1/11th of the time he makes a small percentage of 5 BTC.

No matter how long the merchant waits, there's never any chance of him gaining the block reward since the merchant isn't mining, and so there's nothing to balance the risk of losing his goods to the Finney attack.

If merchant waited 5 minutes then an attacker would not risk his block unless he expected to gain more than 25BTC from the merchant. You could just wait based on size of the deposit, but as mentioned the ability to do many of these in one block ruins that calculation. Waiting 2 blocks is starting to seem to be best in a lot of situations imo.
legendary
Activity: 2940
Merit: 1333
May 15, 2012, 07:19:31 PM
#37
5 BTC / 0.083 = 60 seconds.  At 60 seconds the "double spend game" is fair.  In the long run neither the attacker or merchant will gain or lose anything.

Is that right?

If the merchant waits 60 seconds before sending goods priced at 5 BTC to the attacker, then he has a 1 in 11 chance that someone else will solve a block, making the attacker lose his 50 BTC block reward.  In this case the merchant makes a regular 5 BTC sale and profits by his regular markup.

He also has a 10 in 11 chance that nobody else solves the block.  In this case the attacker gets the goods worth 5 BTC as well as the 50 BTC block reward.  The merchant is out 5 BTC.

That's not fair.  It's break-even for the attacker - he loses 50 BTC 1/11th of the time and gains 5 BTC 10/11 of the time, and 50*1/11 = 5*10/11 - but it's a net loss for the merchant.  Most of the time he gets ripped off for 5 BTC, and 1/11th of the time he makes a small percentage of 5 BTC.

No matter how long the merchant waits, there's never any chance of him gaining the block reward since the merchant isn't mining, and so there's nothing to balance the risk of losing his goods to the Finney attack.
R-
full member
Activity: 238
Merit: 100
Pasta
May 15, 2012, 04:08:54 PM
#36
Thanks for the thorough reply gmaxwell.
donator
Activity: 1218
Merit: 1079
Gerald Davis
May 15, 2012, 04:03:34 PM
#35
What if the attacker has a whole bunch of purchases ready to be executed automatically as soon as he finds his double spending block?  Wouldn't all the merchants then be collectively underestimating the time they should wait?  The attacker could even offer a subscription service for a fee to increase his reward.

He certainly could however targeting multiple merchants simultaneously would be difficult.  Each merchant may (likely should) have different hold period which complicates when to broadcast the block.  Remember we are generally speaking talking about small value transactions.   The goal is simply to increase the cost/complication/risk to the point it isn't worth it.  Even if finney attack works as long as the merchant doesn't include more value than it can afford to lose in the next block the loss can be mitigated.  Merchant either extends the hold period or goes to 1 confirmation.  The repeat value of the attack because negigible.  So huge upfront cost, complexity, risk of losing block for a one time attack on low value transactions?

It could happen.  Could you defraud a soda machine?  Probably however they are hardened "enough" to make such attack a futile exercise (especially as more become digital).  The small benefit is unlikely to outweigh the cost and complexity of pulling off the attack.

There is no double spend propagation, notification (even when it propagates to the victim), or repercussions (at least so far I'm not aware of anyone successfully being prosecuted for bitcoin based fraud, though I expect it will happen someday) ... this means that I can give my victim a transaction but 1ms later simultaneously give the same transaction to all the big pools.    The whole network will be my attacker then.

Well there is "instant" and there is "instant".   Waiting even 10 seconds would make such weak attack worthless.  A good merchant's bitcoin node should be unknown.  It doesn't need to be on the same server as the storefront.  The merchant would see the double spend and halt the transaction.
staff
Activity: 4284
Merit: 8808
May 15, 2012, 03:50:48 PM
#34
~144 Blocks per day... 99% found by good guys. This means there can only be a handful of finney attacks every day. Compared to credit card fraud this is completely neglectable. Especially for low value transactions.

Others have pointed out that you can do more than one attack per block—  but not only that, but:

There is no double spend propagation, notification (even when it propagates to the victim), or repercussions (at least so far I'm not aware of anyone successfully being prosecuted for bitcoin based fraud, though I expect it will happen someday) ... this means that I can give my victim a transaction but 1ms later simultaneously give the same transaction to all the big pools.    The whole network will be my attacker then.   

The point of the Finny attack is that even fancy listening and alert stuff can't protect you against an attacker than can mine.  But even without the finny attack the lack of detection and notification means that zero confirmation transactions are trivially reversed without significant technical sophistication or expense.   They simply aren't safe for non-reversable/non-recourse transactions  (of course things like Spamoshidice are somewhat safe because reversals there also undo the payout),  and the finny attack means they can't easily be made safe.   

Of course, safety isn't always required but people should be aware of the risks.
donator
Activity: 308
Merit: 250
May 15, 2012, 03:38:43 PM
#33
Some people don't realize how easy and cheap things like GPUMAX make it.  

Question: in what way does the Finny attack directly related to GPUMAX?

It allows me to get instant on demand access to large amounts of hash power at low cost and direct it how I like it.

One of the barriers to a Finney attack is that you have to cause a block to be mined with a valid but not publicly announced transaction— without tens of thousands of dollars of fixed equipment costs you can't do this without having to wait with your finger on the attack trigger for years.   GPUMAX lets you purchase hash power with Bitcoins, (which will, more or less be returned to you from successful mining,  the only cost to you is the GPUMAX marketplace premium on hash rate and the slight chance of increased orphaning).
GPUMAX only allows you to direct the power at preapproved pools, right?
staff
Activity: 4284
Merit: 8808
May 15, 2012, 03:37:12 PM
#32
Some people don't realize how easy and cheap things like GPUMAX make it.  

Question: in what way does the Finny attack directly related to GPUMAX?

It allows me to get instant on demand access to large amounts of hash power at low cost and direct it how I like it.

One of the barriers to a Finney attack is that you have to cause a block to be mined with a valid but not publicly announced transaction— without tens of thousands of dollars of fixed equipment costs you can't do this without having to wait with your finger on the attack trigger for years.   GPUMAX lets you purchase hash power with Bitcoins, (which will, more or less be returned to you from successful mining,  the only cost to you is the GPUMAX marketplace premium on hash rate and the slight chance of increased orphaning).  

Effectively GPUMAX somewhat violates the security assumption of Bitcoin:  We assume that hash power is well distributed and at worst consolidated in a manner proportional to parties long term interest in the Bitcoin system.   By allowing the highest bidder to redirect hash power at will, a party can get enormous amounts by paying a small premium for just the time they need it.   I understand that the GPUMAX system has some protection against attack usage (though I've not heard details and don't know how complete they are), but the finny attack case is basically not possible for a middleman system to protect against because it looks so much like normal mining.  (In fact you can finny attack using an existing pools, if you can find one that either won't relay your double spend or you simultaneously put conflicting txn on their peers to prevent relaying of it.— GPUMAX lets you move hashpower where you need it for the attack)
R-
full member
Activity: 238
Merit: 100
Pasta
May 15, 2012, 03:25:22 PM
#31
Some people don't realize how easy and cheap things like GPUMAX make it.  

Question: in what way does the Finny attack directly related to GPUMAX?
sr. member
Activity: 461
Merit: 251
May 15, 2012, 03:11:53 PM
#30
When considering a defense against a Finney attack we must first recognize that the attack is undetectable until after the fact.  So unlike with non-Finney double spend the goal should be to increase the cost of such an attacker.

One way to do this is look at the "time value" of a pending (but not yet broadcast) block.  A solved block is worth ~50 BTC.  The odd that another peer will find and broadcast (and thus invalidate the attackers pending block) is ~0.17% per second.  We can estimate that any delay to execute a Finney attack costs the attacker ~0.083 BTC per second.

Finney Attack Cost (in BTC) = (50 BTC) *(1-(1 - 1/600)^(tx time in seconds))

Example:
Say I have a service which will instantly deliver a xbox timecode worth 5 BTC.  Now lets assume I have a comprehensive double spend detection system in place so I can detect non-Finney doublespends BUT I am still vulnerable to Finney attacks right?  I can't detect or prevent a Finney attack BUT I can make them prohibitively expensive for the attacker.

5 BTC / 0.083 = 60 seconds.  At 60 seconds the "double spend game" is fair.  In the long run neither the attacker or merchant will gain or lose anything.   Still we want to make it prohibitively expensive.  So say I delay delivery 120 seconds instead.  We will call this delay the "hold period".  During the hold period I monitor the network for new blocks looking for new blocks which contain the double spend.  If I detect a double spend (either in a block or as a relayed tx) I halt delivery.

Expected Value to Attacker:
If attacker doesn't delay block until delivery is complete it will cost him nothing but his attack will always be detected and failed.
The hold period forces the attacker to delay broadcasting the block until delivery is complete which in this example is 120 seconds.

The chance a peer will find a duplicate block and invalidate the attackers block (at a loss of 50 BTC to the attacker ) is ~= 1 - (1-0.0017)^120 = 18.2%

81.8% of the time the attacker will gain 5 BTC (game code stolen).
18.2% of the time the attacker will not gain 5 BTC (tx where attacker paid legit remains valid)  AND will additionally lose the 50 BTC block.

5.0 *0.818 - 50*0.182 = -4.973.  In the long run the attacker can expect to have a net loss of 5 BTC for each attempt.  While the attacker will get away with it some of the time the attack has a long term negative expectation.  The attacker is essentially gambling with the merchant being the house and having in this example a 8% house advantage.  A merchant could adjust the hold period to strike a balance between speed and safety.  For example even w/ a delay of 60 seconds the expected loss is 0.  By not making the delay unknown and/or pseudo random it increases the chance the attacker will release block too soon providing advance warning to the merchant.  When a failed attack is detected merchant could increase the holding period or switch to 1 block confirms.

If anyone wants to play that game (and is willing to wager a total of 100 BTC spread out among 20 or more tx) I would be willing to make a demonstration site.  


Simple version:
Low value tx can be safely protected by delaying delivery by more than 1 second for each 0.083 BTC in value (or ~5 BTC per minute).

What if the attacker has a whole bunch of purchases ready to be executed automatically as soon as he finds his double spending block?  Wouldn't all the merchants then be collectively underestimating the time they should wait?  The attacker could even offer a subscription service for a fee to increase his reward.
legendary
Activity: 1008
Merit: 1023
Democracy is the original 51% attack
May 15, 2012, 02:33:48 PM
#29
My family of sites all accept payments at zero confirmations:

Paysius.com
FeedZeBirds.com
SatoshiDice.com
Coinapult.com


If you try a double-spending attack, please get in contact with myself and bearbones (ira miller) so we can proceed together.

legendary
Activity: 1708
Merit: 1020
May 15, 2012, 02:14:59 PM
#28
~144 Blocks per day... 99% found by good guys. This means there can only be a handful of finney attacks every day. Compared to credit card fraud this is completely neglectable. Especially for low value transactions.
A single Finney attack can contain several transactions, affecting several merchants at once.
oops.  Roll Eyes    still this seems like a lot of work for some low value digital goods for me.

try the attack here: http://bitcoinx.com/clocktweak. it will not get any easier than that. should also work with a normal double spend.

if you succeed I would not give a damn and probably would not even notice.
donator
Activity: 308
Merit: 250
May 15, 2012, 02:04:15 PM
#27
~144 Blocks per day... 99% found by good guys. This means there can only be a handful of finney attacks every day. Compared to credit card fraud this is completely neglectable. Especially for low value transactions.
A single Finney attack can contain several transactions, affecting several merchants at once.
legendary
Activity: 1708
Merit: 1020
May 15, 2012, 01:57:40 PM
#26
~144 Blocks per day... 99% found by good guys. This means there can only be a handful of finney attacks every day. Compared to credit card fraud this is completely neglectable. Especially for low value transactions.
Pages:
Jump to: