[Bitcoin-development] Trusted identities

2012-04-26 Thread Peter Todd
It recently occured to me that we can use the public nature of the block
chain to create trusted identities, for a specific form of trust.

Lets suppose Alice has some bitcoins held at bitcoin address A. She
wants to establish trust in the identity associated with the ECC
keypair associated with A, for instance for the purpose of having other
users trust her not to attempt to double spend. Since the trust she
seeks is financial in nature, she can do this by valuing the identity
associated with A, by delibrately throwing away resources. A simple way
to do this would of course be to transfer coins to a null address,
provably incurring a cost to her.

A more socially responsible way would be for her to create a series of
transactions that happen to have large, and equal, transaction fees.
Bitcoin makes the assumption that no one entity controls more than 50%
of the network, so if she makes n of these transactions consecutively,
each spending m BTC to transaction fees, there is a high probability
that she has given up at least n/2 * m BTC of value. This of course is
all public knowledge, recorded in the block chain. It also increases the
transaction fees for miners, which will be very important for the
network in the future.

Now Bob can easily examine the block chain, and upon verifying Alice's
trust purchase, can decide to accept a zero-confirmation transaction at
face value. If Alice breaks that promise, he simply publishes her signed
transaction proving that Alice is a fraudster, and future Bob's will
distrust Alice's trusted identity, thus destroying the value needed to
create it.

In effect, we now have a distributed green address system.

Now Alice could try to mount a double-spend attack on a whole bunch of
people at once, hoping to have them all accept the transaction. However
as it is the just trust them model works pretty well already.


A good usecase for this idea, beyond the obvious fast payments
application, is a distributed anonymizer. Alice can now publish her
request to anonymize coins, and other trusted identities can make their
bids. If Alice accepts a bid from Bob, she will want Bob to send her the
anonymized coins *prior* to her transaction going through, thus breaking
the temporal connection between the transactions. Now Alice can give Bob
the signed payment transaction, and Bob can submit his payment
transaction to the network first, knowing that Alice isn't going to try
to rip him off. Bob can also have a trusted identity which signed the
contract for the anonymizer transaction, and similarly if he rips Alice
off, she can publish it for the world to see.

A more subtle effect, is this makes sybil attacks more difficult. To
pretend to be a thousand identities is going to now require 1,000 * n
coins, and attempting to pull this attack off inherently strengthens the
bitcoin network. Obviously we can apply this principle to other things
like tor nodes as well.

-- 
http://petertodd.org 'peter'[:-1]@petertodd.org


signature.asc
Description: Digital signature
--
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] Trusted identities

2012-04-26 Thread Peter Vessenes
These are interesting thoughts, karma for bitcoins essentially.

I would like CoinLab to publish a 'cost of subverting 1-n transactions with
90% probability' metric soon, and I think it would help everyone to
understand what that number is.

When we started out, you probably needed to wait 5 blocks for $10 or $20 of
bitcoin value transfer.

Now, I'd happily accept a $1k transaction with 1 confirmation.

More difficulty shortens the safe time we can transact large volumes in,
which is good for the network.

I'm not sure of the current implementation of replacement transactions, can
anyone on the core team speak to this? Can I replace transactions, or is
that part of the spec unimplemented or deprecated right now?

Peter


On Thu, Apr 26, 2012 at 8:49 AM, Peter Todd p...@petertodd.org wrote:

 It recently occured to me that we can use the public nature of the block
 chain to create trusted identities, for a specific form of trust.

 Lets suppose Alice has some bitcoins held at bitcoin address A. She
 wants to establish trust in the identity associated with the ECC
 keypair associated with A, for instance for the purpose of having other
 users trust her not to attempt to double spend. Since the trust she
 seeks is financial in nature, she can do this by valuing the identity
 associated with A, by delibrately throwing away resources. A simple way
 to do this would of course be to transfer coins to a null address,
 provably incurring a cost to her.

 A more socially responsible way would be for her to create a series of
 transactions that happen to have large, and equal, transaction fees.
 Bitcoin makes the assumption that no one entity controls more than 50%
 of the network, so if she makes n of these transactions consecutively,
 each spending m BTC to transaction fees, there is a high probability
 that she has given up at least n/2 * m BTC of value. This of course is
 all public knowledge, recorded in the block chain. It also increases the
 transaction fees for miners, which will be very important for the
 network in the future.

 Now Bob can easily examine the block chain, and upon verifying Alice's
 trust purchase, can decide to accept a zero-confirmation transaction at
 face value. If Alice breaks that promise, he simply publishes her signed
 transaction proving that Alice is a fraudster, and future Bob's will
 distrust Alice's trusted identity, thus destroying the value needed to
 create it.

 In effect, we now have a distributed green address system.

 Now Alice could try to mount a double-spend attack on a whole bunch of
 people at once, hoping to have them all accept the transaction. However
 as it is the just trust them model works pretty well already.


 A good usecase for this idea, beyond the obvious fast payments
 application, is a distributed anonymizer. Alice can now publish her
 request to anonymize coins, and other trusted identities can make their
 bids. If Alice accepts a bid from Bob, she will want Bob to send her the
 anonymized coins *prior* to her transaction going through, thus breaking
 the temporal connection between the transactions. Now Alice can give Bob
 the signed payment transaction, and Bob can submit his payment
 transaction to the network first, knowing that Alice isn't going to try
 to rip him off. Bob can also have a trusted identity which signed the
 contract for the anonymizer transaction, and similarly if he rips Alice
 off, she can publish it for the world to see.

 A more subtle effect, is this makes sybil attacks more difficult. To
 pretend to be a thousand identities is going to now require 1,000 * n
 coins, and attempting to pull this attack off inherently strengthens the
 bitcoin network. Obviously we can apply this principle to other things
 like tor nodes as well.

 --
 http://petertodd.org 'peter'[:-1]@petertodd.org

 -BEGIN PGP SIGNATURE-
 Version: GnuPG v1.4.10 (GNU/Linux)

 iQEcBAEBAgAGBQJPmW6EAAoJEH+rEUJn5PoEZfEH/ixptlMX9MzP71bCHMkj7YN1
 y6GEkc1vNhyHu01NX77vzSqR4trbVnWJeJ5hH8EB5tgYRwmI17XoQW6Iz8yEXXgO
 JqUKCTBBexGE+F5RfBkizJ9ap5wXwVrAOIMy/KurSdST+PWMXIPQFaGark01uKcG
 M4VXg3U9fc/0Zz1QyKpRTI5O7ZSBqPzEh/Xf4TujR39nUtaI5mkT/bmA3+Te7oRT
 34QO7ryF7U001Xz2VJCfm9AE8mPPZjMavLTs/XvPSqTdliVCZpjGGHzcJ2BPrni5
 LEPBsBBxNsuwFGjnRobQwrkPtmYGFntseMLzCJ3iGXWYwedssBg2LLOx9QaXG04=
 =PftQ
 -END PGP SIGNATURE-


 --
 Live Security Virtual Conference
 Exclusive live event will cover all the ways today's security and
 threat landscape has changed and how IT managers can respond. Discussions
 will include endpoint security, mobile security and the latest in malware
 threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
 ___
 Bitcoin-development mailing list
 Bitcoin-development@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/bitcoin-development




-- 
Peter J. Vessenes
CEO, CoinLab
M: 206.595.9839
Skype: vessenes

Re: [Bitcoin-development] Trusted identities

2012-04-26 Thread Peter Todd
On Thu, Apr 26, 2012 at 10:11:51AM -0700, Peter Vessenes wrote:
 These are interesting thoughts, karma for bitcoins essentially.
 
 I would like CoinLab to publish a 'cost of subverting 1-n transactions with
 90% probability' metric soon, and I think it would help everyone to
 understand what that number is.

There's gotta be a lot of subtlies there. For instance, if I just want
to double-spend, the easiest approach would be to first buy a whole
bunch of VPS's, each with different /16's for their IP address to defeat
that anti-sybil measure. Then figure out what is the set of nodes
closest to my target - easier for an active target that makes a lot of
transactions.

Then it's just a matter of giving them my transaction, and immediately
flooding the network faster with my nodes than their single node. It's
not block-replacement, but it would be effective against people who
accept 0-confirmations. (although as Gavin has pointed out elsewhere, in
the future miners may be very happy to replace transactions for more
fees in that kind of circumstance)

Of course, this whole trusted identities business could be equally used
for the bitcoin flood network as a whole to prevent sybil's, and perhaps
even get guarantees of behavior like My node respects nLockTime and
won't ignore it for a higher-fee transaction replacement

 When we started out, you probably needed to wait 5 blocks for $10 or $20 of
 bitcoin value transfer.
 
 Now, I'd happily accept a $1k transaction with 1 confirmation.

Yup, especially when a human is in the loop.

 More difficulty shortens the safe time we can transact large volumes in,
 which is good for the network.
 
 I'm not sure of the current implementation of replacement transactions, can
 anyone on the core team speak to this? Can I replace transactions, or is
 that part of the spec unimplemented or deprecated right now?

My understanding is it's completely disabled.

-- 
http://petertodd.org 'peter'[:-1]@petertodd.org


signature.asc
Description: Digital signature
--
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] Trusted identities

2012-04-26 Thread Amir Taaki
look at the first line of the if statement


// Check for conflicts with in-memory transactions
CTransaction* ptxOld = NULL;
for (unsigned int i = 0; i  tx.vin.size(); i++)
{
COutPoint outpoint = tx.vin[i].prevout;
if (mapNextTx.count(outpoint))
{
// Disable replacement feature for now
return false;

// Allow replacing with a newer version of the same transaction
if (i != 0)
return false;
ptxOld = mapNextTx[outpoint].ptx;
if (ptxOld-IsFinal())
return false;
if (!tx.IsNewerThan(*ptxOld))
return false;
for (unsigned int i = 0; i  tx.vin.size(); i++)
{
COutPoint outpoint = tx.vin[i].prevout;
if (!mapNextTx.count(outpoint) || mapNextTx[outpoint].ptx != 
ptxOld)
return false;
}
break;
}
}



From: Peter Vessenes pe...@coinlab.com
To: Peter Todd p...@petertodd.org 
Cc: bitcoin-development@lists.sourceforge.net 
Sent: Thursday, April 26, 2012 6:11 PM
Subject: Re: [Bitcoin-development] Trusted identities


These are interesting thoughts, karma for bitcoins essentially.

I would like CoinLab to publish a 'cost of subverting 1-n transactions with 90% 
probability' metric soon, and I think it would help everyone to understand what 
that number is.

When we started out, you probably needed to wait 5 blocks for $10 or $20 of 
bitcoin value transfer.

Now, I'd happily accept a $1k transaction with 1 confirmation. 

More difficulty shortens the safe time we can transact large volumes in, which 
is good for the network.

I'm not sure of the current implementation of replacement transactions, can 
anyone on the core team speak to this? Can I replace transactions, or is that 
part of the spec unimplemented or deprecated right now?

Peter



On Thu, Apr 26, 2012 at 8:49 AM, Peter Todd p...@petertodd.org wrote:

It recently occured to me that we can use the public nature of the block
chain to create trusted identities, for a specific form of trust.

Lets suppose Alice has some bitcoins held at bitcoin address A. She
wants to establish trust in the identity associated with the ECC
keypair associated with A, for instance for the purpose of having other
users trust her not to attempt to double spend. Since the trust she
seeks is financial in nature, she can do this by valuing the identity
associated with A, by delibrately throwing away resources. A simple way
to do this would of course be to transfer coins to a null address,
provably incurring a cost to her.

A more socially responsible way would be for her to create a series of
transactions that happen to have large, and equal, transaction fees.
Bitcoin makes the assumption that no one entity controls more than 50%
of the network, so if she makes n of these transactions consecutively,
each spending m BTC to transaction fees, there is a high probability
that she has given up at least n/2 * m BTC of value. This of course is
all public knowledge, recorded in the block chain. It also increases the
transaction fees for miners, which will be very important for the
network in the future.

Now Bob can easily examine the block chain, and upon verifying Alice's
trust purchase, can decide to accept a zero-confirmation transaction at
face value. If Alice breaks that promise, he simply publishes her signed
transaction proving that Alice is a fraudster, and future Bob's will
distrust Alice's trusted identity, thus destroying the value needed to
create it.

In effect, we now have a distributed green address system.

Now Alice could try to mount a double-spend attack on a whole bunch of
people at once, hoping to have them all accept the transaction. However
as it is the just trust them model works pretty well already.


A good usecase for this idea, beyond the obvious fast payments
application, is a distributed anonymizer. Alice can now publish her
request to anonymize coins, and other trusted identities can make their
bids. If Alice accepts a bid from Bob, she will want Bob to send her the
anonymized coins *prior* to her transaction going through, thus breaking
the temporal connection between the transactions. Now Alice can give Bob
the signed payment transaction, and Bob can submit his payment
transaction to the network first, knowing that Alice isn't going to try
to rip him off. Bob can also have a trusted identity which signed the
contract for the anonymizer transaction, and similarly if he rips Alice
off, she can publish it for the world to see.

A more subtle effect, is this makes sybil attacks more difficult. To
pretend to be a thousand identities is going to now require 1,000 * n
coins, and attempting to pull this attack off inherently strengthens the
bitcoin network. Obviously we can apply this principle to other things
like tor nodes as well.

--
http://petertodd.org

Re: [Bitcoin-development] Trusted identities

2012-04-26 Thread Alan Reiner

On 04/26/2012 01:30 PM, Peter Todd wrote:



More difficulty shortens the safe time we can transact large volumes in,
which is good for the network.

I'm not sure of the current implementation of replacement transactions, can
anyone on the core team speak to this? Can I replace transactions, or is
that part of the spec unimplemented or deprecated right now?

My understanding is it's completely disabled.


Went on a scavenger hunt with Gavin a couple weeks concerning tx 
replacement.  The conclusion was that if,

(1) Transaction has lock-time in the future  AND
(2) Transaction has non-maximum sequence number

Then the transaction will both propagate and be accepted into nodes' 
memory pools, but will not go into any block until locktime expires.  If 
the lock-time is in the past OR sequence number on all TxIns is 
0x, then it will be immediately valid and included in the 
blockchain.


But the actual replacement mechanism is disabled.  Therefore, the 
nodes accept the tx as if it's replaceable, but don't allow it to be 
replaced.  This means that it is effectively replaceable *once*, but 
only if you inject a final transaction into the blockchain.   You can't 
broadcast a final version of the same tx, because it will conflict with 
the non-final one sitting in all the other nodes' memory pools.  You 
need a miner to agree to remove the non-final tx from their memory pool 
and specifically include your replacement.


-Alan


--
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development