Bitcoin Forum
May 23, 2024, 05:21:31 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
  Home Help Search Login Register More  
  Show Posts
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 [13] 14 15 16 17 18 »
241  Alternate cryptocurrencies / Altcoin Discussion / Re: Memcoin Protocol (A CPU/GPU-oriented, very memory hard chain) on: November 04, 2012, 04:06:00 PM
It looks like the scaling is non-linear with memory size

What makes you say that?

Quote
[test]$ time ./scrypt-nosse 1024 8192 1
16.022u 0.525s 0:16.55 99.9%    0+0k 0+0io 0pf+0w
[test]$ time ./scrypt-nosse 1024 16384 1
33.335u 1.034s 0:34.42 99.8%    0+0k 0+0io 0pf+0w
242  Bitcoin / Development & Technical Discussion / Re: Proof of Activity Proposal on: November 04, 2012, 01:31:35 PM
I spend at time t in the main branch and I want to revoke this spend. I wait for 6 confirmations in the main branch. The guy I am ripping off delivers the goods. Meanwhile I build a 6 block long secret branch from t-1, eg. t* t+1* t+2* t+3* t+4* t+5* t+6*. The block at t* contains my double spend.

Now I announce my secret chain which has 6 unsigned blocks. According to your rules, every block on my secret chain is currently eligible for a signature.

No, according to simple-PoA rules, your block t* isn't eligible because the PoA for it cannot be put inside block t+7*, only your blocks t+1* t+2* t+3* t+4* t+5* t+6* are eligible. Therefore, if the merchant saw your txn at block t was signed and then saw that the next 6 blocks t+1 t+2 t+3 t+4 t+5 t+6 were all signed, he would then send you the merchandise, and now you make your secret branch public, but you can get signatures for only 6 out of the first 7 blocks that you generated, while the honest network has 7-out-of-7 signed block there. Assuming 3-fold PoA weight, it means that the honest network is effectively ahead of by 2 blocks (your t* is has weight=1, the honest t has weight=3).
If the merchant didn't see 6 consecutive signed blocks, then he waits the safety length of up to 12 blocks so that half of them are signed (assuming the incentives for stakeholders are in place so that at least half the blocks get signed on average). When you release your secret branch after 12 blocks, only the last 6 blocks in your branch are eligible for PoA signature, so the honest branch of 12 blocks where half are signed wins again.
Edit: a better way to describe it without getting into indexing troubles is simply to say that the merchant waits for 7 signed blocks (starting from the block where the relevant txn resides), so when the attacker releases his secret branch (of whichever length) only the last 6 blocks of it would be eligible for PoA signature, so the honest chain wins, unless the attacker has huge hashpower and he generated significantly more (unsigned) blocks than the honest network. And the only other thing that's left to say is that waiting for 7 signed blocks would take less than 14 block on average.
243  Bitcoin / Development & Technical Discussion / Re: Proof of Activity Proposal on: November 04, 2012, 11:35:08 AM
How would the miner include that generation txn? The stakeholder has to send this txn request to the miner, otherwise the miner wouldn't know about it? But the incentive of the miner is not to include that txn, because he then gets less reward?
The interest would be a block validity rule. The stake signature indicates the public key that is owed interest. The miner has to include generation sent to this address for the block to be valid. (i.e. the miner looks up 500 blocks back in the blockchain to see who is owed money). People checking block validity make sure this debt was paid, and reject the block if it was not paid.

This sounds like a computationally infeasible task, though maybe I misunderstand what the task is. Could you describe the algorithm that the miners use to decide which interest-payment txns should be included in the blocks?

I was looking for concrete attacks on simple-PoA, after thinking about it a bit more I'll describe now what seems to me to be the general framework of how an attack looks like, though I'll use specific parameters for simplicity:
Let's assume 3-fold PoA weight (meaning that a signed block is worth the same as 3 unsigned blocks), and let's assume that the attacker controls 20% of the total stake. This 20% is either the attacker himself, or malicious stakeholders that help the attacker, or rational stakeholders that were recruited by the attacker in secret and their actions must be hidden from the rest of the network.
Let's assume that half of the blocks get signed by the honest network, and those 20% of stakeholders who collude with the attacker still also participate in the honest network (edit: if they don't contribute to the honest network during the attack then on average 40% of the honest branch gets signed, so the merchant's client might wait longer for approval and it'd make the attack even more difficult).
For the attacker to succeed in double-spending via 6-block reorg, he repeatedly attempts to mine his secret branch from the current block. Assuming that the next 6 blocks of the honest network will have 3 signed blocks out of the 6, the attacker needs (at least) 4 consecutive signed block in order to win, so with 20% stake this happens with probability (1/5)^4, meaning that he has to wait 625 blocks (4.3 days, assuming 10min blocks) on average until this event occurs. Note that the attacker wastes some of his hashpower while waiting (whenever he starts extending his secret branch), and that he has to broadcast the double-spending txn to the honest network each time (I was wrong in post #75 about including his txn in the 2nd block of the honest network), so an example scenario would be that the attacker does many purchases of dollars with his BTC, and once every 625 purchases his double-spending could succeed. Therefore, such an attacker needs to generate 4 PoW blocks to compete with 6 PoW blocks of the honest network, i.e. he needs 40% of the total network hashpower. The merchant decrease the attacker's probability of success by waiting for more than 3-out-of-6 signed blocks, e.g. 5-out-of-10 implies that the attacker needs 7 consecutive blocks, which means one double-spending attempt once every 542 days while having 7/17=41% of the total hashpower. If we look at the current state of Bitcoin, I doubt that a single entity could have 20% of all the bitcoins under its control (about 2 million BTC). So I like these odds.

I'm still very interested to hear about other concrete attacks, maybe there are better ways to attack simple-PoA ?

I think you need to prepare for an environment where the total network has only 30 Gigahashes and contains $100 million USD. That is what the network will look like without block reward. The numbers might not be quite good enough for this situation.

I wouldn't worry about double spends coming from someone with USD$20 million of bitcoin. He will be scrambling to keep the network secure and his fortune safe. Only an idiot would try to double spend from this position.

Worry about someone who owns 300 Gigahashes double-spending. 300 gigahashes costs less than $0.5 million USD to acquire. This is far less than the $20 million necessary for stake.

Moreover, the GPUs might retain significant resale value in the event of a devastating successful attack. The bitcoin would not.


This may all be true, but it's an argument why PoA isn't good enough, rather than an argument why PoA is worse than pure-PoW Bitcoin. The PoW attacker will need (say) 66% of the total hashpower with PoA, instead of 50% with pure-PoW. I agree that it'd be much better if PoA could be improved upon, for example combining PoA with ABAB seems to be a straightforward way to get protection from both double-spending attackers and denial-of-service attackers, I've been thinking about these kinds of ideas. However, I'm still trying to figure out whether there are certain kinds of attacks where PoA is more vulnerable than pure-PoW.


I'm attempting to convince you (see next post) that simple-PoA is a Nash equilibrium for the PoW miners, meaning that it's better for miners to generate blocks in the honest network than it is to generate a competing branch. I agree that it's better for stakeholders to sign all the branches that they see, but if the PoW attacker wouldn't generate his branch in the first place then we're good.
I understand what you are saying. The PoW guys will sign one chain only. I agree with that, but the problems don't end there. If the PoA guys are truly willing to sign everything, then the resulting scheme becomes less secure than pure PoW. The PoA guys can now influence chain selection through corrupt signature behavior. An attacker can send the PoA guys small bribes to influence their signing behavior (i.e. to deny signatures to the main chain). The attacker can then use his own work to attack the main chain. He requires much less work than before because the PoA guys are helping him.

With simple-PoA (post #75), the PoW miners don't sign any blocks. Basically what I'm claiming is that if the competing branches are public then that's fine (everyone should contribute his PoW effort and/or his PoA signature to whichever branch he wishes, and may the best branch win), and if one competing branch is secret then it's useless for double-spending attacks because it couldn't get anywhere near enough PoA signatures while it was secret, and by the time it goes public the needed PoA signatures would be invalid in this branch. Therefore, PoA is gives better security against double-spending by an attacker with large hashpower, because the nature of double-spending attacks is that they need to stay secret at the first stage, and they couldn't get enough PoA signatures at the first stage.

I'd still like to solicit concrete attacks on simple-PoA (attacks that couldn't be carried out just as easily with pure-PoW, I didn't look into your "double double spend" thread closely enough yet).
244  Alternate cryptocurrencies / Altcoin Discussion / Re: Memcoin Protocol (A CPU-oriented, very memory hard chain) on: November 04, 2012, 09:05:14 AM
Really someone just needs to implement it with high r values and see what kind of hash rates they get.  I don't think an r leading to 512 MB of RAM required will be that catastrophic.

Here you go:

Quote
[test]$ time ./scrypt-ref 1024 1 1
0.007u 0.000s 0:00.00 0.0%      0+0k 0+0io 0pf+0w
[test]$ time ./scrypt-ref 1024 4096 1
31.282u 0.235s 0:31.55 99.8%    0+0k 0+0io 0pf+0w
[test]$ time ./scrypt-sse 1024 4096 1
9.725u 0.225s 0:09.95 99.8%     0+0k 0+0io 0pf+0w
[test]$ time ./scrypt-nosse 1024 4096 1
7.535u 0.210s 0:07.75 99.8%     0+0k 0+0io 0pf+0w
[test]$ cat /proc/cpuinfo | grep name
model name      : Intel(R) Xeon(R) CPU           E5540  @ 2.53GHz
model name      : Intel(R) Xeon(R) CPU           E5540  @ 2.53GHz
model name      : Intel(R) Xeon(R) CPU           E5540  @ 2.53GHz
model name      : Intel(R) Xeon(R) CPU           E5540  @ 2.53GHz
[test]$ uname -a
Linux cs 2.6.18-308.16.1.el5 #1 SMP Tue Sep 18 07:21:07 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux

About 8 seconds per hash attempt with 512 megabytes, so it'd take 18 days to verify the initial download of a blockchain with 200,000 blocks.
245  Alternate cryptocurrencies / Altcoin Discussion / Re: Memcoin Protocol (A CPU-oriented, very memory hard chain) on: November 03, 2012, 09:46:06 PM
3.1) The scrypt parameter r is initialized as 4096, so the initial memory required per scrypt process is 512 MB.  The value of r will be multiplied by 3.5 every 1050 days (604800), e.g., a little less than 3 years after chain creation r will be 14336 and the required memory will be 1792 MB.

https://bitcointalk.org/index.php?topic=103085.msg1137364#msg1137364
246  Bitcoin / Development & Technical Discussion / Re: Proof of Activity Proposal on: November 03, 2012, 03:16:05 PM
1) A modest Proof-of-work advantage (2-fold or 5-fold with 100% participation; less with partial participation) still allows you to double-spend or deny service. This is not adequate for a world with just pure fees and no block subsidy. If someone could perform a 51% attack, I can't see why they couldn't also perform a 76% attack. Get into the 99%+ range and I'll be satisfied.

I'm gonna use 3-fold in my example (see next), which means that pure-PoW attacker would need 75% of the total hashpower if all the blocks get signed (edit: 66% of the total hashpower assuming that on average half of the blocks get signed). That ain't 99%, but if we use a higher multiplier than 3x (say 100x) then the attacker would always need just one more block than half of the double-spending safety length (see next).

2) There is no clear plan for rewarding signatories in the long-term. If you use simple txn fees to reward stakeholders, then txn fees become a bribery vector. Simply including a txn with large fees on an attack chain induces rational stakeholders to join the attack.

I don't see how a large txn fees bribe is a problem with simple-PoA: if the attacker's branch is public then stakeholders would just grab the extra coins that he offers them and make his branch the winning branch (double-spending wouldn't occur, so the attacker loses his coins), and if the attacker's branch is secret then neither the stakeholders nor the attacker can benefit from the large txn fees bribe that he attempted to offer them, because when he reveals his secret branch after 6 blocks the stakeholders can no longer participate because their signatures would already be invalid.

b) Use a long-run average of historical txn fees to reward stakeholders. Whenever a block is mined, give 10% of txn fees directly to the miner. Send the other 90% of txn fees to a fund that rewards signatories. Distribute 0.001% of this fund to stakeholders in each block. With this, system current miners could not influence signature payouts to any meaningful degree (i.e. including 100,000 times the regular fee in a block increases stakeholder rewards by just 1%). [This is conceptually similar to PPCoin; a txn tax rewards stakeholders; the miner has no influence over the tax; here, the txn tax does not operate through inflation] An added bonus is that this method incentivizes the transmission of txn data.

Interesting idea, I'll keep that in mind.


I was looking for concrete attacks on simple-PoA, after thinking about it a bit more I'll describe now what seems to me to be the general framework of how an attack looks like, though I'll use specific parameters for simplicity:
Let's assume 3-fold PoA weight (meaning that a signed block is worth the same as 3 unsigned blocks), and let's assume that the attacker controls 20% of the total stake. This 20% is either the attacker himself, or malicious stakeholders that help the attacker, or rational stakeholders that were recruited by the attacker in secret and their actions must be hidden from the rest of the network.
Let's assume that half of the blocks get signed by the honest network, and those 20% of stakeholders who collude with the attacker still also participate in the honest network (edit: if they don't contribute to the honest network during the attack then on average 40% of the honest branch gets signed, so the merchant's client might wait longer for approval and it'd make the attack even more difficult).
For the attacker to succeed in double-spending via 6-block reorg, he repeatedly attempts to mine his secret branch from the current block. Assuming that the next 6 blocks of the honest network will have 3 signed blocks out of the 6, the attacker needs (at least) 4 consecutive signed block in order to win, so with 20% stake this happens with probability (1/5)^4, meaning that he has to wait 625 blocks (4.3 days, assuming 10min blocks) on average until this event occurs. Note that the attacker wastes some of his hashpower while waiting (whenever he starts extending his secret branch), and that he has to broadcast the double-spending txn to the honest network each time (I was wrong in post #75 about including his txn in the 2nd block of the honest network), so an example scenario would be that the attacker does many purchases of dollars with his BTC, and once every 625 purchases his double-spending could succeed. Therefore, such an attacker needs to generate 4 PoW blocks to compete with 6 PoW blocks of the honest network, i.e. he needs 40% of the total network hashpower. The merchant can decrease the attacker's probability of success by waiting for more than 3-out-of-6 signed blocks, e.g. 5-out-of-10 implies that the attacker needs 7 consecutive signed blocks, which means one double-spending attempt once every 542 days while having 7/17=41% of the total hashpower. If we look at the current state of Bitcoin, I doubt that a single entity could have 20% of all the bitcoins under its control (about 2 million BTC). So I like these odds.

I'm still very interested to hear about other concrete attacks, maybe there are better ways to attack simple-PoA ?
247  Bitcoin / Development & Technical Discussion / Re: Proof of Activity Proposal on: November 03, 2012, 03:11:18 PM
As far as trading coin-age for interest. It should be really simple. The public key you sign with has a balance and the coins associated with this key have not been spent or won the lottery for a known time period (call this age). Age is measured in years (units of 52560 blocks). Call age a, the balance b, and the interest rate r, 0<r<0.015. 500 blocks after you sign, the miner includes a generation txn which sends b*(exp(a*r)-1) to this public key.  

How would the miner include that generation txn? The stakeholder has to send this txn request to the miner, otherwise the miner wouldn't know about it? But the incentive of the miner is not to include that txn, because he then gets less reward?

Could you please explain what is the reasoning behind trading coin-age for interest? I mean, what are the particular benefits of using this reward scheme over other reward schemes.

The idea is that people begin in default behavior, signing one chain only. If you deviate from default behavior, but some strictly positive fraction of people remain in default mode, then you will get penalized for the deviation. Thus default behavior is a nash equilibrium. This differs from PoA where default behavior is not a nash equilibrium.

I'm attempting to convince you (see next post) that simple-PoA is a Nash equilibrium for the PoW miners, meaning that it's better for miners to generate blocks in the honest network than it is to generate a competing branch. I agree that it's better for stakeholders to sign all the branches that they see, but if the PoW attacker wouldn't generate his branch in the first place then we're good.

I wonder if adjusting for 10 minutes block time is possible with this scheme, because of the dependency on the currently active stakeholders. There might also be new kinds of attacks by stakeholders, for examples stakeholders who collude by withholding the 5th signature, then releasing it at the same time in order to split the chain and create chaos?
Yes, you can withhold the fifth signature, but then some other block will be found and built upon. You will need to add the fifth signature and then secretly find a new block. Secretly finding a new block is nearly impossible.

I'm still not so sure. Maybe some small fraction of the stakeholders could increase the number of splits, say by synchronizing to provide their 5th signature only at round minutes (if they see that they're the lottery winner of 5th signature at 11:00:05 PM then they'll broadcast their signature at 11:01:00 PM). BTW my concerns here would be the same if it was the simplified core idea with a single signature instead of 5-10 signatures.

I think that the core idea of requiring PoW+lottery_PoA_signature before the block becomes valid raises interesting issues.
As a miner, if you solved the block and you're waiting for the stakeholder to broadcast his signature (and so far he doesn't), do you sit idle, or do you attempt to re-solve the block while waiting? Since if you manage to re-solve then maybe the 2nd stakeholder will provide his signature, while the 1st stakeholder wouldn't.

BTW there are also interesting issues with protocols like your ABAB where the miner must use his privkey to generate the block. Specifically, you couldn't use mining pools, so maybe a variation of p2pool has to be an integral part of the protocol. This is actually a great feature rather than a drawback, because centralized mining pools are a security risk (can be DoS attacked, unlike p2pool, etc.) I don't remember whether I discussed it with you before, but I did raise this issue at #bitcoin-dev about one year ago (link).

From an economic perspective, I hope that objectives (1)+(2)+(3) can be achieved without a protocol that requires infinite monetary inflation. Maybe we could attempt to design two different protocols, one with infinite inflation, and one without, so that later the better protocol could be decided by also taking economic considerations into account. What do you think?
This is not really inflation at all. A small amount of new money is printed, but it is distributed proportionally evenly among people who already have money. Say productivity grows by 1% a year.
In this case, prices will remain close to constant in the long-run, but your $1.00 will slowly turn into $1.01 each year. [productivity growth shows up as an increase in your balance instead of falling prices]
With bitcoin, prices fall by 1% each year, and your $1.00 balance remains as $1.00. [productivity growth shows up as falling prices]
The two situations are almost equivalent.

The difference is that there is an implicit tax on txns. You are penalized via loss of interest if you move your coins. The penalty is very small. Think of buying a television for US$400.
You have a choice. Do I buy it now, or do I wait 6 months to earn interest and then buy it? At most, 6 months of waiting could decrease the price by US$6. In practice, however effects will be much smaller than this. You could hold your money in an online wallet. They would store 90% of their holdings to earn interest and handle liquidity needs with the remaining 10% (just like a normal bank, except with a 100% reserve).
The loss of interest would then be reduced to $0.60. I don't think you will delay your television purchase for 6 months to save 0.15% off the purchase price. The implict txn tax will be really really tiny.

I don't dispute (nor approve) any of that, I always use the phrase "monetary inflation" to be clear. Not sure how the 90%,10% online wallet example works, you don't really need to allocate 10% that sits idle because you can always transfer coins and forfeit some interest reward? But I guess that you would still want to tell your customers that their withdrawals cannot bypass the 10% limit unless they meet some requirements?

It sounds really difficult and taxing on the network, but I think that it could actually be much easier than it sounds. The miners don't actually need to transmit a large number of tentative blocks. They just need to search for blocks that match keys that have recently signed the blockchain. i.e. they search for historically active keys. They discard potentially valid blocks with keys that are rarely seen in signatures. They then transmit blocks that historically active keys can sign. These tentative blocks are likely to become valid. The final signatures in the sequence allow the blockchain to constantly update the record of historical activity. [These final signatures are increasingly random rather than miner selected, particularly sigs 6-10.] Thus, by referring to the blockchain, the miners always know approximately what type of sequence they are looking for.

This search might sound hard, but really it isn't. You are most likely searching for the public keys of Mt. Gox, Bitinstant, Bill Gates, blockchain.info, etc. A small number of people will hold a huge amount of stake. Searching for a small number of keys is not that difficult. Searching for the key to an average person's wallet is probably not worth the time.

At first glance this doesn't sound good at all to me. Why would we want to encourage wealth concentration by having the miners behave in the way that you describe? Don't you agree that having only a few stakeholders is a major security risk? I suppose that we agree that the network is more secure when the PoW hashpower is more distributed, so why wouldn't you agree that the same is true for distributed stake?
248  Bitcoin / Development & Technical Discussion / Re: Proof of Activity Proposal on: November 02, 2012, 03:49:54 PM
I haven't read carefully the last post yet (I will a bit later), but I would like to ask again regarding PoA:

Let's consider this simple PoA protocol:
*) stakeholder who won the follow-the-satoshi lottery is allowed to provide his signature txn only in the next 6 blocks to win his reward (the rule is that his signature txn is invalid from the 7th block onwards, so it wouldn't be included in the 7th block by miners who follow the protocol).
**) the recommended safe length to protect yourself from doubles-spending attacks is between 6 signed blocks and 12 unsigned blocks.
***) the weight of each signed block is for example 2x or 5x the weight of an unsigned block, and this weight goes into effect immediately.
****) there aren't any other special rules to determine the winning branch, simply the branch with highest difficulty (adjusted by PoA weights) wins.

This protocol doesn't attempt (yet) to help with an attacker who generates empty blocks to destroy the network.

I claim that w.r.t. double-spending attacks, this protocol is more secure than pure-PoW, assuming that the majority of stakeholders isn't malicious.

Suppose merchant A receives the coins payment of the buyer B at block n, and listens on the network for double-spending attempts until reaching block n+6 (or up to n+12 if all blocked were unsigned), and only then sends the merchandise to B. The double-spending attacker cannot prepare a secret fork of 6 blocks and then announce it to stakeholders to get their signatures, because their signatures will be invalid after 6 blocks. If the attacker makes his fork public from the start, then the merchant's client will detect the double-spending attempt. So waiting for 6 signed blocks is enough, and e.g. if 2nd block wasn't signed by the honest network and the attacker released his secret fork after 6 blocks then this 2nd block can still be signed by the lucky stakeholder in the 7th block and thereby give more weight to the attacker's branch, so waiting up to 12 blocks (depending on how many were signed) is safe.

Let's consider the attack vector raised by coblee where the attacker waits until he's the lucky winner of a block that he mined and lets the honest network extend this block without providing his signature txn, while preparing a secret fork in which he includes his signature txn. Note that the txn that he plans to double-spend doesn't need to be in the initial block that he mined, he can put this txn in the 2nd block of the honest network that extends his initial block. So he has an advantage of one signed block in his secret fork (i.e. the block that he mined initially), and the honest network won't be able to include the signature of that block if he releases his fork after at least 6 blocks. Still, if the reward for the stakeholders is big enough so that at least half of the blocks get signed on average, then the attacker's branch will have only one signed block in the first 6 blocks, and the honest branch will have about 3 signed blocks. So I don't think that this attack vector is a problem, unless less than 1/6 of all blocks get signed on average.

The double-spending-bribes service cannot operate with this protocol, this service had to keep the fork secret for 6 blocks before soliciting signatures from stakeholders, so that the merchant won't detect it, but now those signatures would be invalid.

The reward for stakeholders should probably be big (for example 10% of the block reward), because they must provide their signature in the next 6 blocks. This is also related to signing-key delegation, i.e. whether stakeholders can use encrypted wallets.

So when comparing with pure-PoW, the only disadvantage is that the merchant might have to wait for more than 6 blocks (but less than 12), depending on how many blocks were signed? The advantage is of course that PoW-only attacker will fail against the honest network.

Assuming the the incentives for stakeholders would work (maybe by adjusting their reward with the difficulty retarget window), do you think that this protocol is good, and we could try to extend it to handle attackers who generate empty blocks? Or am I missing possible attacks on this protocol?
249  Bitcoin / Development & Technical Discussion / Re: Proof of Activity Proposal on: November 01, 2012, 04:30:06 PM
I think that there's a mixup between (a) and (b), objective 2 is achieved by (a) and objective 1 is achieved by (b) ?

I think that the core of your new idea is very intriguing. Instead of PoA where miners generate PoW blocks and stakeholders (derived deterministically from block hash with follow-the-satoshi) may or may not sign those blocks later (so signature for an earlier block appears in a later block), I think that a simplified version of your new idea can be described as follows: the miner who solved a block according to the current difficulty doesn't win yet, he has to broadcast the block that he solved to the network, and then the deterministically chosen stakeholder according to the hash of this solved block has to sign it, then announce to the network that the block is now valid, and now the blockchain can be extended from this block, by incorporating the hash of that stakeholder's signature in the next block.
This core idea might be cleaner than PoA, because now all the blocks are always signed, so we don't need to have questionable rules to decide the winning branch.

Regarding your particular suggestion of deriving 10 stakeholders deterministically via follow-the-satoshi instead of just 1 stakeholder, with the threshold of having the 5 first-derived stakeholders provide signatures before the block becomes valid (BTW it isn't so clear where these signatures should reside, they aren't inside the current block and won't be in subsequent blocks, so I guess they should be wrapped together with the current block as an extended data structure), if I understand correctly the purpose here is (supposedly) that stakeholders wouldn't want to sign the attacker's branch because we expect that the attacker's branch will get only 5 signatures or so, while we expect that the branch of the honest network will get 10 signatures, and stakeholders receive larger rewards if there are more signatures. But isn't there a problem with your suggestion because a particular stakeholder who got chosen in the attacker's branch doesn't also get chosen in the honest branch (except for with negligible probability), so it would be rational for this particular stakeholder to sign that attacker's branch in order to have a chance to get his individual reward (in the honest branch he wasn't chosen and wouldn't get any reward). Maybe the way to fix this issue is that the individual stakeholders never get any reward for the signature that they provide, and instead just have the rule that if more signatures are provided (closer to 10 instead of 5) then all the stakeholders are rewarded collectively, via lower rate of inflation or some other kind of reward?

I wonder if adjusting for 10 minutes block time is possible with this scheme, because of the dependency on the currently active stakeholders. There might also be new kinds of attacks by stakeholders, for examples stakeholders who collude by withholding the 5th signature, then releasing it at the same time in order to split the chain and create chaos?

I don't understand how trading coin-age for interest is supposed to work, could you elaborate?

From an economic perspective, I hope that objectives (1)+(2)+(3) can be achieved without a protocol that requires infinite monetary inflation. Maybe we could attempt to design two different protocols, one with infinite inflation, and one without, so that later the better protocol could be decided by also taking economic considerations into account. What do you think?

Regarding the complexity issues, indeed those might be a huge problem. Even just attaching 10 ECDSA signatures to each block is quite huge (extra 640 bytes per block). Having a good solution for delegating signing-keys might also be highly significant, and possibly add even more complexities. One major advantage of PoA is simplicity. We should try to simplify and minimize complexities wherever possible...
250  Bitcoin / Development & Technical Discussion / Re: Proof of Activity Proposal on: October 30, 2012, 09:25:07 AM

On the other hand, the PoA scheme as it is doesn't handle the attacker-who-denies-txns issue at all.

Could you elaborate on this issue? I don't understand what you mean.

I meant that with PoA (or Meni's scheme etc.) where the miners first generate the blocks and only later the stakeholders add their signatures (that correspond to blocks that were already generated), an attacker with huge hashpower and without any stake could paralyze the network by excluding all txns in the blocks that he generates. Because stakeholders would only see the attacker's winning branch, no other branches will ever be generated, so they could only sign the attacker's branch. With PoA the attacker might wish to include the signature txns in his branch (depending on the rule for competing branches with same signed/unsigned prefix, post #47), but it doesn't matter because if signature txns are the only txns that are included then the network will be destroyed anyway.

Your idea about larger rewards for later blocks sounds interesting, but it's still vague. Does it involve the blocks timestamps, or just branch length is enough?
251  Bitcoin / Development & Technical Discussion / Re: Proof of Activity Proposal on: October 29, 2012, 04:06:30 PM
Hello cunicula,

Regarding ABAB:
I'm not so sure whether ABAB gives better protection from attacker with 50% hashpower who tries to double-spend by doing 6-block reorg, compared to the Bitcoin pure-PoW protocol.
Let's assume type-A is pure-PoW and type-B is heavily weighted towards proof-of-stake (for example as you said 0.9 stake weighting and a 0.1 work weighting).
Without going into the exact calculations, let's just say that if the attacker has 1% of the active network stake which he divides equally among 3 addresses, and he waits for about one week, then with his hashpower he can generate 3 consecutive type-B blocks ahead of the distributed network. Since he has 50% of the entire network hashpower, he can also generate the 3 interleaved type-A blocks, and thereby create 6-block reorg and double-spend.
So the only difference between the pure-PoW protocol and ABAB with respect to attacker with 50% hashpower is that the attacker has to sit idle for a while (one week or some different time frame, depending on the other parameters) before launching his double-spending attack? Am I missing something here?

Interestingly, I think that the type-B blocks (or simply your original protocol) offer good protection from attacker who wishes denies txns and destroy the network, because he couldn't generate all the type-B blocks once he runs out of coin-confirms.

I mentioned in post #31 another advantage that the double-spending attacker has: if the honest participants divide their stake among e.g. 10 addresses on average, and the attacker divides his stake among 3 addresses, then it's advantageous for the attacker in order to achieve 3 consecutive type-B blocks, because his coin-confirms will be concentrated in 3 addresses instead of 10 addresses and therefore carry more weight in the difficulty calculation, compared to the average miner. An honest miner who divides his stake among 10 address (so not to put all his eggs in one basket) would do hash attempts with only one of his 10 addresses while trying to solve the current block, it's pointless for him to do 10 different attempt concurrently because that's the same as having 10x less hashpower. So for double-spend attacks the optimal number of addresses should be the same as the length of the reorg, which doesn't necessarily coincide with the number of addresses that an honest miner would choose to have.

The issue of waiting e.g. one week before launching the double-spending attack occurs because of the coin-confirms property of the difficulty calculation. The PoA scheme doesn't use coin-confirms, so this wait-one-week-to-double-spend issue doesn't occur there. On the other hand, the PoA scheme as it is doesn't handle the attacker-who-denies-txns issue at all. I'm still hoping that we could refine all the ideas and converge to some superior scheme.
252  Bitcoin / Development & Technical Discussion / Re: Proof of Activity Proposal on: October 17, 2012, 09:13:40 AM
The bribe is paid to people who could have signed the valid chain, but chose not to. The fact that potential signatories are selected at random is irrelevant. These people can either be publicly identifiable (i.e. lottery is public) or they can announce themsevles in a verifiable way to the bribery service (i.e. lottery is private). The bribery service can wait for these people to perform the attack before paying them.

So some stakeholder with say 10,000 BTC will identify himself to the attacker's bribe service by signing with the privkeys that control the 10,000 BTC and promising that he won't sign the honest chain whenever the attacker declares that a double-spending attack begins. The attacker verifies that this stakeholder doesn't sign in the honest chain whenever an attack is in progress. If the attacker tries to double-spend all the time, then this stakeholder shouldn't sign on the honest chain at all. In your scenario there are many stakeholders such as this one, who provided verifiable evidence that proves that they participate in the double-spending bribe service, so the total stake used by the bribes service is e.g. 10%. Furthermore, the honest chain will have a head start of 6-confirms or 24-confirms, because the attacker also needs signatures from all the other stakeholders to get 10% advantage over the honest chain.
What incentive does the attacker have to pay these 10% of stakeholders after the attack succeeds?
Wouldn't these 10% of stakeholders earn more coins by signing the honest chain?
Shouldn't stakeholders be worried of retaliation if there's verifiable evidence that they participate in double-spending-bribes service, e.g. the other 90% of stakeholders could decide that those 10% of stakeholders diminish the value of the cryptocurrency and therefore their stake should be blacklisted ?
Wouldn't the attacker need to sustain more than 50% hashpower for a long period of time until his chain wins? The honest miners won't help the attackers while his chain is small, even if it's public, so if it's 2x weight for a signed block and there's e.g. 12 blocks gap to close, the attacker has 10% advantage in signing and an advantageous signed block closes 2 blocks in the gap instead of 1 block, so overall we'd say that the attacker needs to close a gap of about 10 blocks as if he didn't have any advantage in signing?

Sigh, why continue discussion of this proposal when I have already
a) explained why PoA, Meni's system, killerstorm's suggestions, PPCoin, etc. are critically flawed
b) suggested a solution to the problem (which is not at all new and has always been part of my proposal. The ABAB thing is a response to killerstorm's criticisms. I don't think the issue he raises is nearly as important, but it is significant enough to merit a fix.)

You explanation of why PoA is (critically) flawed isn't convincing yet.
I think that we should also discuss your system, the ABAB idea looks promising.
Maybe we should also discuss a hybrid of your system and PoA, similar to what you suggested in post #43. We can also look at from the perspective of extending PoA, i.e. the signed block should be supplement with PoW hash of certain difficult, to make it costly for stakeholders to sign blocks. It's still unclear to me whether that'd be a good idea. I hope that as a result of these discussions we will converge to one proof-of-stake system in the end. For actually implementing some system in Litecoin, there should be bias towards simplicity, which is point (7) in your list of objectives.
253  Bitcoin / Development & Technical Discussion / Re: Proof of Activity Proposal on: October 17, 2012, 05:01:13 AM
There is no secret branch. It is a public attack. It can begin after the seller releases the goods. The problem I'm pointing out is that the 90% may participate in the attack passively by signing all branches they see. The remaining 10% are active attackers. They only sign the attacker's branch. Causing the attacker to win.

If it's a public attack that starts after the seller released the goods, then the branch that the seller sees has a 6-confirms head start, or even 24-confirms with Litecoin (see here). This means that the attacker will need much more than 50% hashpower, assuming for example 2x weight for signed blocks and 10% advantage in proof-of-stake signatures for the attacker's branch.

However, this entire scenario that we discussed in the last few posts doesn't jibe with PoA, because each individual stakeholder address gets the opportunity to sign only one of the competing branches (when it wins the follow-the-satoshi lottery, probability for an address to win in two concurrent branches is negligible). This means that the attacker cannot tell whether a stakeholder who accepts the bribe also participates in the honest network. Therefore, the rational behavior for all the greedy stakeholders is to accept the bribe and sign the attacker's branch when they win the lottery in his branch, and simultaneously also sign the honest branch when they win the lottery there. So the attacker won't have 10% advantage, all the stakeholders will simply snatch his bribe payments and sign both his branch and the honest branch, so the attack will fail and the attacker just loses money.
254  Bitcoin / Development & Technical Discussion / Re: Proof of Activity Proposal on: October 16, 2012, 08:03:03 PM
Say for example you buy a large amount of USD and the BTC price goes up. You now regret your USD purchase and want execute a double spend.

90% of miners use my unofficial client and thus play no role in branch selection. The remaining 10% participate in the txn reversal service. The attacker pays them to withhold signatures from the good chain and only add them to his branch. The good branch will have 90% of possible signatures. The bad branch will have 100% of possible signatures. Voila double spend. The double spend is made easier by proof-of-stake.

Attacker A sends coins to merchant B, so that B waits and sees the branch where he received the coins with 6-confirms, and then B sends the merchandise (e.g. USD) to A, and then A reverses the branch so that the new winning branch doesn't have the txn that transferred the coins from A to B.
If 90% of stakeholders don't participate in the attack, the we expect that 90% (or say 90/2=45%) of the blocks in the branch that B saw were signed, while at most 10% of the attacker's secret branch were signed.
If the attacker doesn't build his branch in secret, and instead tries to build it by broadcasting his competing branch to the entire network in order to collect signatures from all the greedy stakeholders, then B can scan the network and discover the double-spend attempt, and refuse to send the merchandise to A.
255  Bitcoin / Development & Technical Discussion / Re: Proof of Activity Proposal on: October 16, 2012, 10:55:28 AM
uses the unofficial client, proof-of-stake has absolutely no security functionality whatsoever.

The official client behavior is that after you've signed one branch, you'll sign a competing branch only if you discover that this competing branch is winning (excluding the signature that you'd provide is probably the better rule).
If the unofficial client signs all the branches that it sees, then using the unofficial client is either greedy or malicious (let's not differentiate for the two for the moment), and if everyone uses the unofficial client then the network is equivalent to pure-PoW. This is the objective that I'm trying to achieve, i.e. that if the stakeholders are honest then the network is more secure than pure-PoW, and if the stakeholders are greedy/malicious then the network is at least as secure as pure-PoW.

Your comments appear to refer to the scenario where greedy stakeholders sign shorter public branches, to maximize their reward probability. Note that the double-spending attack scenario is different, there the attacker prepares 6-blocks branch in secret, bribes stakeholders to sign his secret branch, and then broadcasts his branch after it's at least 6-blocks deep and is the winning branch. If stakeholders refuse the bribe then they earn their regular reward on the honest network, if they accept the bribe then the attacker supposedly offers them a higher reward, but (unlike what killerstorm described) they cannot participate in the attack and then expect to collect the regular reward on the honest network in case the attack failed, because the attacker wouldn't want to pay stakeholders who also sign the honest branch in less than 6-blocks and therefore don't contribute to his attack. In other words, this kind of double-spending-bribes service is exactly the same as what can be achieved with pure-PoW network, as described in post #47.

If we could really agree that we have a protocol that is always at least as secure as pure-PoW, and more secure if stakeholders are honest, then IMHO it'd be major progress. Edit: Of course I don't rule out the possibility that your protocol would be even better, I'm just saying that if we could establish a protocol that is at least as secure as pure-PoW, then we would have a clear milestone that we could try to improve upon.
The problem is that even if you agreed with everything I said here, technically it's still unclear whether we could have a protocol that achieves these properties. Did you also consider my comments on how the protocol could enforce 6-blocks window for signing?
256  Economy / Securities / Re: GLBSE Payment Claims (Announce your payment here) on: October 16, 2012, 08:24:13 AM
I received that 90% payment message yesterday, and approximately 5 hours after receiving the email the BTC indeed showed up on the blockchain (about 44 BTC).
257  Bitcoin / Development & Technical Discussion / Re: Proof of Activity Proposal on: October 15, 2012, 11:38:59 PM
We must find a general way to completely eliminate attacks.

This statement doesn't make sense. You can do brute-force attack on ECDSA with 2^128 iterations, to steal coins.

I made a proposal by myself, but this is another topic.

IMHO that proposal also doesn't make sense, allowing human discretion instead of using hardcoded protocol rules whenever a long re-org occurs is a terrible idea. See post #27 (and #26) here.
258  Bitcoin / Development & Technical Discussion / Re: Proof of Activity Proposal on: October 15, 2012, 11:24:43 PM
If we agree that (2) is risky then signing-key delegation is probably a bad idea (mentioned in post #14 here).

A middle-of-the-road approach is appropriate here. Signers should have some skin in the game, but not too much.

Here is what I mean:
Two keys controlling the coins: 1) Full Spend Key 2) Sign/Withdrawal Limit Key
The withdrawal limit key can only include 1/k of the private key balance in any one txn (txns with this key must send k coins to the input address(es) for every 1 coin sent to an external address). That means it would take k blocks to deplete the full balance using the limited spend key. k could be user specified, but would have to be lower than a maximum value (say 10,000). Selling your withdrawal limit key to someone else would be very risky. Exposing your withdrawal limit key to the internet would be slightly risky too, but it is a limited risk because you can always invalidate key 2 using key 1. Withdrawal limits are a useful feature anyways.

Very interesting idea, delegating withdrawal-limited keys could answer coblee's concern. The exact behavior of the withdrawal limit can be debated, but the minimal limit has to be high enough to avoid delegating to that central signing entity from post #14. I agree that withdrawal-limited keys could be useful independently of proof-of-stake.
As for the implementation, I still think that the most straightforward option is that the proof-of-stake signature will sign an extra field with the delegated pubkey (i.e. this is where the linkage is established), and when using the corresponding delegated privkey you also specify the linkage block number, so the miners have to look at that older block to verify your (withdrawal-limited) signature. (earlier post on this).

In (6) I suppose you mean that it should be costly for attackers to vote in competing forks, because we shouldn't punish honest miners who saw the losing branch first and signed it. But with lucky-num schemes this scenario doesn't occur anyway (discussed in post #47).
PoA fails on point 6. As does every other PoS proposal except for my own. I'm an economist. Economists always assume profit-maximization. If you tell them that honest miners exist, they will say you're full of shit. Everyone is greedy according to economists. If you accept that (and I think the system should operate on that premise), proof-of-stake signing needs to involve opportunity cost in order for it to function as a branch selection mechanism. It needs to be more costly to sign two forks than it is to sign one fork. Otherwise, signing every fork you see is the strictly dominant strategy for miners. If all forks are signed, proof-of-stake will be completely useless as a security mechanism. To solve this, stake signatures need to be jointly submitted with proof-of-work.

I agreed earlier that we should assume that the majority is greedy rather than honest, but I'm less inclined to agree that stakeholders who participate in double-spending-bribes service are greedy rather than malicious. Also it might be risky because others could retaliate and blacklist your stake.
I agree that if stakeholders could provide their signatures to competing chains with impunity then the proof-of-stake scheme is worthless.
Any comments of my technical suggestion in post #47 for protocol behavior to deal with this issue? If the recommended safety length for double-spending protection is 6 confirms, and the protocol enforces that you cannot provide your proof-of-stake signature after 6 blocks, then you would select and sign only one branch (because signing multiple branches would be useless for the attacker).

I would like to add one very important property to your list (though it might be considered orthogonal to proof-of-stake), which is security against attackers with large hashpower who try to deny txns (link). Security from this kind of attack is arguably even more important than security from double-spending attacks. Any thoughts on the best ways to implement this?
Yes, I agree completely. In fact this is what I mean by persistent 51% attack, that is point (1). In my view, solving this is the whole point of proof-of-stake. Double spends are a side issue (albeit an important one).

Right, I now see that your point (1) meant to deal with this issue, apologies.
I also see that your next post #53 shows that this issue isn't necessarily unrelated to proof-of-stake, though it's still plausible that incorporating BDD could help too.
What would be the disadvantage of simply using pure-PoW for type A blocks?
259  Alternate cryptocurrencies / Altcoin Discussion / Re: PPCoin is NOT a decentralized cryptocurrency on: October 14, 2012, 10:27:20 PM
You are right I don't have a math analysis of how much coins are needed to attempt control of block chain.

Nevermind that you didn't analyse your protocol, I haven't even seen evidence that you know how the protocol works. Remind us again why you refuse to post the protocol specifications? Maybe someone else wrote parts of the code and disappeared, leaving you clueless? IMHO killerstorm is being far too respectful towards you than he should be.
260  Bitcoin / Development & Technical Discussion / Re: Proof of Activity Proposal on: October 14, 2012, 05:50:51 PM
We need to make a list of objectives and then identify a proposal which best satisfies them. It would be better to agree on objectives first and then try to find a framework which realizes them. Otherwise people will talk past one another. Everyone is biased towards their own ideas.

Here are my own objectives:

1) Very expensive to perform a persistent 51% attack even with low aggregate hash rate.
2) Selling voting power to a third party is costly/personally risky.
3) 6 conf txns can be trusted even if an attacker controls 51% of work but no stake.
4) Attacker cannot perform 6-block reorgs with monthly frequency without controlling at least 10% of work and 10% of stake.
5) Constant returns to scale. i.e. Returns you get from 2% of stake and 2% of hashing power are approximately double those of 1% of stake and 1% of hashing power.
6) Voting for a fork which is not the main chain is costly.
7) Protocol rules are simple and transparent.

Do these seem reasonable to everyone else? Is there something which should be added to the list?

I wish that we could come up with a protocol that is at least as secure as pure-PoW, with extra proof-of-stake properties that may enhance the security, but don't introduce new security risks when compared to pure-PoW.
If the proof-of-stake signatures become valid only after many more blocks compared to the default 6-conf double-spending safety length, then the proof-of-stake can be thought of just as replacing the need for hardcoded developers checkpoints.
With Litecoin we could have the luxury of switching from default 6-conf to default 24-conf, so there's room to play with the numbers.

If we agree that (2) is risky then signing-key delegation is probably a bad idea (mentioned in post #14 here). It also probably requires linkages on the blockchain (though one linkage per deterministic wallet can be done), so miners might reasonably expect fees for the extra work. I doubt it's possible without linkages, I tried to ask gmaxwell about his comments (link), but he hasn't replied.
So it'd mean that stakeholders should either use an unencrypted wallet, or maybe they could register their email address on some blockexplorer website and receive notification when they should provide their proof-of-stake signature (for lucky-num proof-of-stake schemes such as PoA).

There's a contradiction between allowing stakeholders who aren't running their client 24/7 with unencrypted wallet to participate (by having a long time/blocks limit to provide the proof-of-stake signature), and attack scenarios like killerstorm's double-spending bribes service (where we'd rather allow only a short time/blocks limit to provide the proof-of-stake signature).

In (6) I suppose you mean that it should be costly for attackers to vote in competing forks, because we shouldn't punish honest miners who saw the losing branch first and signed it. But with lucky-num schemes this scenario doesn't occur anyway (discussed in post #47).

Regarding (4), with PoA an attacker with 10% of hashpower and 10% of stake cannot do anything, he's actually in worse shape compared to an attacker on pure-PoW network with 10% hashpower. But killerstorm conjectures that the attacker can get >50% stake using bribes service because stakeholders aren't honest, so maybe we should brainstorm about external remedies to handle such non-honest stakeholders, like blacklisting their stake, because the bribes service cannot be anonymous.

I would like to add one very important property to your list (though it might be considered orthogonal to proof-of-stake), which is security against attackers with large hashpower who try to deny txns (link). Security from this kind of attack is arguably even more important than security from double-spending attacks. Any thoughts on the best ways to implement this?
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 [13] 14 15 16 17 18 »
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!