Re: [Bitcoin-development] Address Expiration to Prevent Reuse

2015-03-26 Thread Thy Shizzle
Indeed, and with things like BIP32 it would be pointless to use one address, 
and I agree it is silly to reuse addresses, some for the privacy aspect, some 
for the revealing the pubkey on a spend aspect. But just because it is silly, 
doesn't mean it's necessarily required for devs to disallow it. I mean if a 
business doesn't care who can see their  bitcoin takings and they are willing 
to keep shifting the bitcoin and live woth the exposed pubkey let them yea?

http://www.forexminute.com/bitcoin/australian-association-asks-voluntary-bitcoin-register-individuals-companies-51183

From: Gregory Maxwellmailto:gmaxw...@gmail.com
Sent: ‎27/‎03/‎2015 2:13 PM
To: Thy Shizzlemailto:thyshiz...@outlook.com
Cc: s...@sky-ip.orgmailto:s...@sky-ip.org; Tom 
Hardingmailto:t...@thinlink.com; Bitcoin 
Developmentmailto:bitcoin-development@lists.sourceforge.net
Subject: Re: [Bitcoin-development] Address Expiration to Prevent Reuse

On Fri, Mar 27, 2015 at 1:51 AM, Thy Shizzle thyshiz...@outlook.com wrote:
 Yes I agree, also there is talks about a government body I know of warming
 to bitcoin by issuing addresses for use by a business and then all
 transactions can be tracked for that business entity. This is one proposal I
 saw put forward by a country specific bitcoin group to their government and
 so not allowing address reuse would neuter that :(

I hope you're mistaken, because that would be a serious attack on the
design of bitcoin, which obtains privacy and fungibility, both
essential properties of any money like good, almost exclusively
through avoiding reuse.

[What business would use a money where all their competition can see
their sales and identify their customers, where their customers can
track their margins and suppliers? What individuals would use a system
where their inlaws could criticize their spending? Where their
landlord knows they got a raise, or where thieves know their net
worth?]

Though no one here is currently suggesting blocking reuse as a network
rule, the reasonable and expected response to what you're suggesting
would be to do so.

If some community wishes to choose not to use Bitcoin, great, but they
don't get to simply choose to screw up its utility for all the other
users.

You should advise this country specific bitcoin group that they
shouldn't speak for the users of a system which they clearly do not
understand.
--
Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the 
conversation now. http://goparallel.sourceforge.net/___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] Address Expiration to Prevent Reuse

2015-03-26 Thread Gregory Maxwell
On Fri, Mar 27, 2015 at 1:51 AM, Thy Shizzle thyshiz...@outlook.com wrote:
 Yes I agree, also there is talks about a government body I know of warming
 to bitcoin by issuing addresses for use by a business and then all
 transactions can be tracked for that business entity. This is one proposal I
 saw put forward by a country specific bitcoin group to their government and
 so not allowing address reuse would neuter that :(

I hope you're mistaken, because that would be a serious attack on the
design of bitcoin, which obtains privacy and fungibility, both
essential properties of any money like good, almost exclusively
through avoiding reuse.

[What business would use a money where all their competition can see
their sales and identify their customers, where their customers can
track their margins and suppliers? What individuals would use a system
where their inlaws could criticize their spending? Where their
landlord knows they got a raise, or where thieves know their net
worth?]

Though no one here is currently suggesting blocking reuse as a network
rule, the reasonable and expected response to what you're suggesting
would be to do so.

If some community wishes to choose not to use Bitcoin, great, but they
don't get to simply choose to screw up its utility for all the other
users.

You should advise this country specific bitcoin group that they
shouldn't speak for the users of a system which they clearly do not
understand.

--
Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the 
conversation now. http://goparallel.sourceforge.net/
___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] Address Expiration to Prevent Reuse

2015-03-26 Thread Gregory Maxwell
On Thu, Mar 26, 2015 at 8:38 PM, Tom Harding t...@thinlink.com wrote:
 I addressed that by limiting the duplicate check to an X-block segment.  X
 is hard-coded in this simple scheme (X=144  = 1-day addresses).  You
 could picture a selectable expiration duration too.

If its to be heuristic in any case why not make it a client feature
instead of a consensus rule?

If someone wants to bypass anything they always can, thats what I mean
by hide their payment under a rock

E.g. I can take your pubkey, add G to it (adding 1 to the private
key), strip off the time limits, and send the funds.

What do you mean I didn't pay you? I wrote a check. locked it in a
safe, and burred it in your back garden.

The answer to this can only be that payment is only tendered when its
made _exactly_ to the payee's specifications.

If someone violates the specifications all they're doing is destroying
coins. Nothing can stop people from destroying coins...

Which is why a simpler, safer, client enforced behavior is probably
preferable. Someone who wants to go hack their client to make a
payment that isn't according to the payee will have to live with the
results, esp. as we can't prevent that in a strong sense.

--
Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the 
conversation now. http://goparallel.sourceforge.net/
___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] Address Expiration to Prevent Reuse

2015-03-26 Thread Gregory Maxwell
On Thu, Mar 26, 2015 at 9:26 PM, Tom Harding t...@thinlink.com wrote:
 I should have been clearer that the motivation for address expiration is to
 reduce the rate of increase of the massive pile of bitcoin addresses out
 there which have to be monitored forever for future payments.  It could make
 a significant dent if something like this worked, and were used by default
 someday.

Great, that can be accomplished by simply encoding an expiration into
the address people are using and specifying that clients enforce it.

--
Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the 
conversation now. http://goparallel.sourceforge.net/
___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] network disruption as a service and proof of local storage

2015-03-26 Thread Sergio Lerner

 If I understand correctly, transforming raw blocks to keyed blocks
 takes 512x longer than transforming keyed blocks back to raw. The key
 is public, like the IP, or some other value which perhaps changes less
 frequently.

Yes. I was thinking that the IP could be part of a first layer of
encryption done to the blockchain data prior to the asymetric operation.
That way the asymmetric operation can be the same for all users (no
different primers for different IPs, and then the verifiers does not
have to verify that a particular p is actually a pseudo-prime suitable
for P.H. ) and the public exponent can be just 3.


 Two protocols can be performed to prove local possession:
 1. (prover and verifier pay a small cost) The verifier sends a seed to
 derive some n random indexes, and the prover must respond with the hash
 of the decrypted blocks within a certain time bound. Suppose that
 decryption of n blocks take 100 msec (+-100 msec of network jitter).
 Then an attacker must have a computer 50 faster to be able to
 consistently cheat. The last 50 blocks should not be part of the list to
 allow nodes to catch-up and encrypt the blocks in background.


 Can you clarify, the prover is hashing random blocks of *decrypted*,
 as-in raw, blockchain data? What does this prove other than, perhaps,
 fast random IO of the blockchain? (which is useful in its own right,
 e.g. as a way to ensure only full-node IO-bound mining if baked into
 the PoW)

 How is the verifier validating the response without possession of the
 full blockchain?

You're right, It is incorrect. Not the decrypted blocks must be sent,
but the encrypted blocks. There correct protocol is this:

1. (prover and verifier pay a small cost) The verifier sends a seed to
derive some n random indexes, and the prover must respond with the the
encrypted blocks within a certain time bound. The verifier decrypts
those blocks to check if they are part of the block-chain.

But then there is this improvement which allows the verifier do detect
non full-nodes with much less computation:

3. (prover pays a small cost, verifier smaller cost) The verifier asks
the prover to send a Merkle tree root of hashes of encrypted blocks with
N indexes selected by a psudo-random function seeded by a challenge
value, where each encrypted-block is previously prefixed with the seed
before being hashed (e.g. N=100). The verifier receives the Markle Root
and performs a statistical test on the received information. From the N
hashes blocks, it chooses M  N (e.g. M = 20), and asks the proved for
the blocks at these indexes. The prover sends the blocks, the verifier
validates the blocks by decrypting them and also verifies that the
Merkle tree was well constructed for those block nodes. This proves with
high probability that the Merkle tree was built on-the-fly and
specifically for this challenge-response protocol.

 I also wonder about the effect of spinning disk versus SSD. Seek time
 for 1,000 random reads is either nearly zero or dominating depending
 on the two modes. I wonder if a sequential read from a random index is
 a possible trade-off,; it doesn't prove possession of the whole chain
 nearly as well, but at least iowait converges significantly. Then
 again, that presupposes a specific ordering on disk which might not
 exist. In X years it will all be solid-state, so eventually it's moot.

Good idea.

Also we don't need that every node implements the protocol, but only
nodes that want to prove full-node-ness, such as the ones which want to
receive bitnodes subsidy.



--
Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the 
conversation now. http://goparallel.sourceforge.net/
___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] Address Expiration to Prevent Reuse

2015-03-26 Thread s7r
This should not be enforced by default. There are some use cases where
address re-use is justified (a donation address spread on multiple
static pages or even printed on papers/books?). For example, I offer
some services on the internet for free, and I only have a bitcoin
address for donations which is posted everywhere. Obviously this could
possibly harm privacy, but not everyone who uses bitcoin wants to keep
all transactions private. To the contrary, there are accounting cases
when you need to archive all keys, hashes of transactions and
everything (for example when using btc inside a company which is
required by law to keep accounting registries).

I know it's not recommended to use the same pubkey more than once, but
the protocol was not designed this way. Enforcing something as
described in this topic will undermine an user's rights to re-use his
addresses, if a certain situation requires it.

On 3/26/2015 11:44 PM, Gregory Maxwell wrote:
 On Thu, Mar 26, 2015 at 9:26 PM, Tom Harding t...@thinlink.com 
 wrote:
 I should have been clearer that the motivation for address 
 expiration is to reduce the rate of increase of the massive pile 
 of bitcoin addresses out there which have to be monitored
 forever for future payments.  It could make a significant dent
 if something like this worked, and were used by default someday.
 
 Great, that can be accomplished by simply encoding an expiration 
 into the address people are using and specifying that clients 
 enforce it.
 
 --



 
Dive into the World of Parallel Programming The Go Parallel Website,
sponsored
 by Intel and developed in partnership with Slashdot Media, is your 
 hub for all things parallel software development, from weekly 
 thought leadership blogs to news, videos, case studies, tutorials 
 and more. Take a look and join the conversation now. 
 http://goparallel.sourceforge.net/ 
 ___
 Bitcoin-development mailing list
 Bitcoin-development@lists.sourceforge.net 
 https://lists.sourceforge.net/lists/listinfo/bitcoin-development
 

--
Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the 
conversation now. http://goparallel.sourceforge.net/
___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development



Re: [Bitcoin-development] Address Expiration to Prevent Reuse

2015-03-26 Thread Gregory Maxwell
On Thu, Mar 26, 2015 at 10:28 PM, s7r s...@sky-ip.org wrote:
 This should not be enforced by default.

No one suggested _anything_ like that. Please save the concern for
someplace its actually applicable.

 I know it's not recommended to use the same pubkey more than once, but
 the protocol was not designed this way.

For a point of pedantry, the protocol actually was designed that way
and in the initial versions of the software there was actually no user
exposed mechanism to reuse a scriptPubkey no matter how hard you
tried.

--
Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the 
conversation now. http://goparallel.sourceforge.net/
___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] network disruption as a service and proof of local storage

2015-03-26 Thread Matt Whitlock
Maybe I'm overlooking something, but I've been watching this thread with 
increasing skepticism at the complexity of the offered solution. I don't 
understand why it needs to be so complex. I'd like to offer an alternative for 
your consideration...

Challenge:
Send me: SHA256(SHA256(concatenation of N pseudo-randomly selected bytes from 
the block chain)).

Choose N such that it would be infeasible for the responding node to fetch all 
of the needed blocks in a short amount of time. In other words, assume that a 
node can seek to a given byte in a block stored on local disk much faster than 
it can download the entire block from a remote peer. This is almost certainly a 
safe assumption.

For example, choose N = 1024. Then the proving node needs to perform 1024 
random reads from local disk. On spinning media, this is likely to take 
somewhere on the order of 15 seconds. Assuming blocks are averaging 500 KiB 
each, then 1024 blocks would comprise 500 MiB of data. Can 500 MiB be 
downloaded in 15 seconds? This data transfer rate is 280 Mbps. Almost certainly 
not possible. And if it is, just increase N. The challenge also becomes more 
difficult as average block size increases.

This challenge-response protocol relies on the lack of a partial getdata 
command in the Bitcoin protocol: a node cannot ask for only part of a block; it 
must ask for an entire block. Furthermore, nodes could ban other nodes for 
making too many random requests for blocks.


On Thursday, 26 March 2015, at 7:09 pm, Sergio Lerner wrote:
 
  If I understand correctly, transforming raw blocks to keyed blocks
  takes 512x longer than transforming keyed blocks back to raw. The key
  is public, like the IP, or some other value which perhaps changes less
  frequently.
 
 Yes. I was thinking that the IP could be part of a first layer of
 encryption done to the blockchain data prior to the asymetric operation.
 That way the asymmetric operation can be the same for all users (no
 different primers for different IPs, and then the verifiers does not
 have to verify that a particular p is actually a pseudo-prime suitable
 for P.H. ) and the public exponent can be just 3.
 
 
  Two protocols can be performed to prove local possession:
  1. (prover and verifier pay a small cost) The verifier sends a seed to
  derive some n random indexes, and the prover must respond with the hash
  of the decrypted blocks within a certain time bound. Suppose that
  decryption of n blocks take 100 msec (+-100 msec of network jitter).
  Then an attacker must have a computer 50 faster to be able to
  consistently cheat. The last 50 blocks should not be part of the list to
  allow nodes to catch-up and encrypt the blocks in background.
 
 
  Can you clarify, the prover is hashing random blocks of *decrypted*,
  as-in raw, blockchain data? What does this prove other than, perhaps,
  fast random IO of the blockchain? (which is useful in its own right,
  e.g. as a way to ensure only full-node IO-bound mining if baked into
  the PoW)
 
  How is the verifier validating the response without possession of the
  full blockchain?
 
 You're right, It is incorrect. Not the decrypted blocks must be sent,
 but the encrypted blocks. There correct protocol is this:
 
 1. (prover and verifier pay a small cost) The verifier sends a seed to
 derive some n random indexes, and the prover must respond with the the
 encrypted blocks within a certain time bound. The verifier decrypts
 those blocks to check if they are part of the block-chain.
 
 But then there is this improvement which allows the verifier do detect
 non full-nodes with much less computation:
 
 3. (prover pays a small cost, verifier smaller cost) The verifier asks
 the prover to send a Merkle tree root of hashes of encrypted blocks with
 N indexes selected by a psudo-random function seeded by a challenge
 value, where each encrypted-block is previously prefixed with the seed
 before being hashed (e.g. N=100). The verifier receives the Markle Root
 and performs a statistical test on the received information. From the N
 hashes blocks, it chooses M  N (e.g. M = 20), and asks the proved for
 the blocks at these indexes. The prover sends the blocks, the verifier
 validates the blocks by decrypting them and also verifies that the
 Merkle tree was well constructed for those block nodes. This proves with
 high probability that the Merkle tree was built on-the-fly and
 specifically for this challenge-response protocol.
 
  I also wonder about the effect of spinning disk versus SSD. Seek time
  for 1,000 random reads is either nearly zero or dominating depending
  on the two modes. I wonder if a sequential read from a random index is
  a possible trade-off,; it doesn't prove possession of the whole chain
  nearly as well, but at least iowait converges significantly. Then
  again, that presupposes a specific ordering on disk which might not
  exist. In X years it will all be solid-state, so eventually it's moot.
 
 Good idea.