Author Topic: What if BitShares could have perfect privacy?  (Read 17479 times)

0 Members and 1 Guest are viewing this topic.

Offline sudo

  • Hero Member
  • *****
  • Posts: 2255
    • View Profile
  • BitShares: ags

Offline puppies

  • Hero Member
  • *****
  • Posts: 1659
    • View Profile
  • BitShares: puppies
I think it depends on the expected payoff from exposing that balance and thus being allowed to vote.  If you can create an account completely anonymously, and then use it for unblinded transactions like market trades, you should be able to create a truly anonymous account and then vote with the stake.  If you are voting a popular slate you should be able to do this without giving up your privacy.  The issue I see with this is then any future transactions would likely leak at least the paying account and the receiving account.  Perhaps if you could unblind a portion of your stake, and this portion is recomputed daily depending upon a random number generator within a certain parameter.  Your voting stake would vary day to day, and it would be hard to determine if any transactions had been sent, and if so to who.  Especially because transactions would by default come out of the blinded portion and be sent to the blinded portion of the receiver.  This should be easy enough to set up in the wallet, and could be a standard feature that can be turned off. 

I really don't understand how the balances are going to be blinded though, so I may be way off base.
https://metaexchange.info | Bitcoin<->Altcoin exchange | Instant | Safe | Low spreads

Offline arhag

  • Hero Member
  • *****
  • Posts: 1214
    • View Profile
    • My posts on Steem
  • BitShares: arhag
  • GitHub: arhag
Arhag.  I am not going to pretend that I have spent the time to understand why your proposed method is provably fair.  With that said, I don't think it would work.  We already have a dearth of voting shareholders.  I don't think many at all would vote with their private stake if it took so many hoops, and reduced their privacy so much.  The only way to be sure that your private balance wasn't being leaked would be to designate your own account as the voting party, and that has obvious repercussions.  I know I wouldn't trust it.

Even if we could figure out a very good privacy solution and make it user friendly (which I still believe is possible, but it is hard), I think it would necessarily be more costly than public voting. Who would pay for the cost of that extra expense. I doubt the voter would since they would then have to sacrifice some cost and a minimal amount of privacy for the sake of a public good. But also having the cost subsidized by the blockchain is problematic because it would likely be exploited by the people who make revenue from these expenses (and we have no way of measuring what a good voter is anyway).

This seems like a big problem to me. Will there be enough people willing to expose their BTS stake publicly for the sake of the network?

Offline arhag

  • Hero Member
  • *****
  • Posts: 1214
    • View Profile
    • My posts on Steem
  • BitShares: arhag
  • GitHub: arhag
I already discussed this elsewhere but I think it is important to allow some semi-trusted third party to claim vote tallies from the blinded BTS balances of some selection of accounts. But it has to be done in a way that prevents the third party from changing the votes (they could only choose to exclude accounts from the vote tally, but not use their stake to vote for someone the stakeholder didn't vote for). So let's say some subset of accounts with blinded BTS balances decide to elect a particular third party to see their BTS balance (by privately sharing the blinding factor with the third party) and aggregate their vote. The third party would specify the account IDs of all the account's vote it will be aggregating. It will also specify a blacklist of delegates/witnesses/workers that it will not aggregate votes for because not enough of the specified accounts are voting for that delegate/witness/worker (which would compromise privacy for the few accounts in the selection that were voting for that delegate/witness/worker). Then for each member in the union of the delegates/witnesses/workers that were included in the votes of the selected accounts, the third party provides a plain-text stake tally and proof that the sum is valid. This proof is a commitment of the tally and a signature proving that fact, where the blinding factor of the commitment is selected so that the sum of commitments of the BTS balances for all accounts voting for the specific delegate/witness/worker (subtracted by the sum of the commitments of the BTS balances for all accounts voting against the specified worker, in the specific case of workers since they can be downvoted) equals the commitment of the tally provided as part of the proof. In other words, for each member X (delegate/witness/worker) add all the blinding factors of accounts approving of X and, if X is a worker, subtract all the blinding factors of accounts disapproving of X to get the blinding factor for the commitment to the tally. This transaction only needs to be provided to the blockchain once per maintenance period to save costs (it is okay if there is even a 1 day delay in incorporating all the votes).

Damn. I just thought of a complication to the above that can compromise privacy. If one account changes their vote from one maintenance period to another and they are the only one to do so, the public could compare the differences in the aggregated votes to determine the stake of the account. Even if a few accounts do this each maintenance period, it may still be possible to over time figure out their stakes as long as the members from that set change their votes in different unrelated sets in other future maintenance periods. Basically, unless you have a very large fraction of voters all changing their votes in the same maintenance period, you will likely leak  information over time. Extending the maintenance period for voting can help with privacy but at the cost of increasing the delay of incorporating the updates to votes by blinded stake.

Privacy is damn hard.

Offline puppies

  • Hero Member
  • *****
  • Posts: 1659
    • View Profile
  • BitShares: puppies
Thanks Thom.  I sometimes feel as if I am speaking a different language than everyone else on this board.

Arhag.  I am not going to pretend that I have spent the time to understand why your proposed method is provably fair.  With that said, I don't think it would work.  We already have a dearth of voting shareholders.  I don't think many at all would vote with their private stake if it took so many hoops, and reduced their privacy so much.  The only way to be sure that your private balance wasn't being leaked would be to designate your own account as the voting party, and that has obvious repercussions.  I know I wouldn't trust it.
https://metaexchange.info | Bitcoin<->Altcoin exchange | Instant | Safe | Low spreads

Offline Thom

Yes, a list of other proposals and the community voting on which one(s) to implement makes sense.

And, I too would also like further clarification regarding "implementing at the protocol level" only. Why not in the gui as well? it'll be useless from a practical standpoint if it does not make it to the gui.

Most early adopters of this feature could probably get by with the CLI (no GUI) implementation initially. Besides, I think the CNX team has shown they're far more innovative in the backend than the UI / UX.

It's not about a whether there is a counterargument or not, its about whether this is the the most important use of funds once 2.0 is launched and there are potentially many competing proposals. I guess the sentiment I was trying to express is that, given the breadth of the recent announcement, you need to allow time now for other proposals to emerge and develop before trying to establish any sort of consensus. Maybe we should even encourage a competition for the first set of proposals, with a bounty prize to the community's top choice.

I agree with you.  I think.

To me it seems as if you accepted my assumptions as valid.  And offered the counter argument that we should wait until we have more proposals to decide which is most important.  Bravo.  I accept your counter argument as true, and await all the proposals we will hopefully see.  While I am still really excited by the idea of privacy on the blockchain I am very open to the idea that something more important could come up.

I really am attempting to communicate and realize that my style of writing is not always conducive to that.  Please forgive me for my writing deficiencies.  Writing takes so much longer than thinking or speaking and I often feel as if iI have lost my point by the time I am done.

I think you express yourself quite well puppies, and I can actually get through your posts in one sitting unlike other TL;DR posts in this thread (no offense intended arhag :) )
Injustice anywhere is a threat to justice everywhere - MLK |  Verbaltech2 Witness Reports: https://bitsharestalk.org/index.php/topic,23902.0.html

Offline arhag

  • Hero Member
  • *****
  • Posts: 1214
    • View Profile
    • My posts on Steem
  • BitShares: arhag
  • GitHub: arhag
I have voting turned off as I realize that's a dead giveaway.

I think we really need a solution to this that could work with blinded values without compromising privacy much. Otherwise, people who really care about privacy won't vote to the detriment of the network.

I already discussed this elsewhere but I think it is important to allow some semi-trusted third party to claim vote tallies from the blinded BTS balances of some selection of accounts. But it has to be done in a way that prevents the third party from changing the votes (they could only choose to exclude accounts from the vote tally, but not use their stake to vote for someone the stakeholder didn't vote for). So let's say some subset of accounts with blinded BTS balances decide to elect a particular third party to see their BTS balance (by privately sharing the blinding factor with the third party) and aggregate their vote. The third party would specify the account IDs of all the account's vote it will be aggregating. It will also specify a blacklist of delegates/witnesses/workers that it will not aggregate votes for because not enough of the specified accounts are voting for that delegate/witness/worker (which would compromise privacy for the few accounts in the selection that were voting for that delegate/witness/worker). Then for each member in the union of the delegates/witnesses/workers that were included in the votes of the selected accounts, the third party provides a plain-text stake tally and proof that the sum is valid. This proof is a commitment of the tally and a signature proving that fact, where the blinding factor of the commitment is selected so that the sum of commitments of the BTS balances for all accounts voting for the specific delegate/witness/worker (subtracted by the sum of the commitments of the BTS balances for all accounts voting against the specified worker, in the specific case of workers since they can be downvoted) equals the commitment of the tally provided as part of the proof. In other words, for each member X (delegate/witness/worker) add all the blinding factors of accounts approving of X and, if X is a worker, subtract all the blinding factors of accounts disapproving of X to get the blinding factor for the commitment to the tally. This transaction only needs to be provided to the blockchain once per maintenance period to save costs (it is okay if there is even a 1 day delay in incorporating all the votes).

The good thing about this approach is that the third-party cannot lie about the votes (only exclude them). Aggregating the vote results from different third-parties is problematic for the blockchain if the selections of accounts for each of the aggregates have some overlap. The blockchain can always ignore valid vote tally transactions for the same maintenance period from third parties if their account selections are a subset of that of a valid vote tally transaction of the same maintenance period from another third party. But when neither account selection of two different valid tally transactions are a subset of the other but yet do still overlap, the blockchain is forced to ignore at least one of them. To avoid this, each account should only choose one third party to aggregate their vote at any given time. This selection by each account could be recorded on the blockchain, so that any vote tally transaction by a third party trying to include the votes of an account that has not specified them as the third party that is allowed to aggregate their vote is automatically dismissed as invalid. Furthermore, the accounts could publicly put some money in a fund specifically to economically motivate the third party to include them into the vote tally. The third party including an account into the aggregation of a vote tally transaction could withdraw a specific amount of funds from that account. The account may automatically pay the third party some small fee from the fund each day for each delegate/witness/worker that they voted for and that was included (meaning not blacklisted) into the vote tally for the day by the designated third party.

One way to make this better would be if the cryptography could allow each account to publish information on the blockchain that proves that they publicly provide enough information for someone who knows the private key corresponding to some specified public key (the public key of the third party in this case) to be able to derive the blinding factor for the account's BTS balance commitment (but without actually revealing the blinding factor to anyone else who doesn't possess that private key). If the cryptography could be designed this way (some kind of zero knowledge proof), then the blockchain could assume that the owner of that private key (the third party) would include all accounts which provide such valid proofs in their vote tally transaction and had set a maximum pay per day per voting item that was more than or equal to the minimum threshold defined by the third party (and of course had enough funds set aside to pay for that cost of including their votes in the vote tally transaction for that day). This would mean that the third party would not need to specify a long list of account IDs as part of the daily vote tally transactions (meaning smaller transaction size and lower costs). Obviously in that situation the third party would be forced to include the votes (with the exception of blacklisted delegate/witness/worker votes that hardly anyone voted for) of every account that elected them to aggregate the vote and provided the valid proof and had enough funds designated for the purpose of paying the necessary costs, since that is what the blockchain protocol would expect from the vote tally transaction submitted by the third party.

Offline bytemaster

One thing that has been bothering me: Properly used, TITAN appears to have done the job well.

Now, that was unilaterally stripped out, (shareholders were not consulted on the matter) and what is being proposed is moneis to essentially re-implement something we already had.

Anybody else sees a potential issue with this ?

The titan part isn't what you would be paying for.  It is the confidential transactions part.   TITAN didn't do the job well.

So the thing was/is fully broken? Sending funds between accounts and then from the account to itself several times over days/weeks is not enough to clear the trail?

I have voting turned off as I realize that's a dead giveaway.

Perhaps it would work if you sent random amounts to yourself over time but it wouldn't be perfect.
For the latest updates checkout my blog: http://bytemaster.bitshares.org
Anything said on these forums does not constitute an intent to create a legal obligation or contract between myself and anyone else.   These are merely my opinions and I reserve the right to change them at any time.

Offline karnal

  • Hero Member
  • *****
  • Posts: 1068
    • View Profile
One thing that has been bothering me: Properly used, TITAN appears to have done the job well.

Now, that was unilaterally stripped out, (shareholders were not consulted on the matter) and what is being proposed is moneis to essentially re-implement something we already had.

Anybody else sees a potential issue with this ?

The titan part isn't what you would be paying for.  It is the confidential transactions part.   TITAN didn't do the job well.

So the thing was/is fully broken? Sending funds between accounts and then from the account to itself several times over days/weeks is not enough to clear the trail?

I have voting turned off as I realize that's a dead giveaway.

Offline bytemaster

One thing that has been bothering me: Properly used, TITAN appears to have done the job well.

Now, that was unilaterally stripped out, (shareholders were not consulted on the matter) and what is being proposed is moneis to essentially re-implement something we already had.

Anybody else sees a potential issue with this ?

The titan part isn't what you would be paying for.  It is the confidential transactions part.   TITAN didn't do the job well.
For the latest updates checkout my blog: http://bytemaster.bitshares.org
Anything said on these forums does not constitute an intent to create a legal obligation or contract between myself and anyone else.   These are merely my opinions and I reserve the right to change them at any time.

Offline karnal

  • Hero Member
  • *****
  • Posts: 1068
    • View Profile
One thing that has been bothering me: Properly used, TITAN appears to have done the job well.

Now, that was unilaterally stripped out, (shareholders were not consulted on the matter) and what is being proposed is moneis to essentially re-implement something we already had.

Anybody else sees a potential issue with this ?

Offline Erlich Bachman

  • Sr. Member
  • ****
  • Posts: 287
  • I'm a pro
    • View Profile
I for one can't think of a better option, especially if we can get this to market first, like BM said is possible.

The lure of being the first mover in this space is well worth the risk, IMVO.
You own the network, but who pays for development?

Offline puppies

  • Hero Member
  • *****
  • Posts: 1659
    • View Profile
  • BitShares: puppies
It's not about a whether there is a counterargument or not, its about whether this is the the most important use of funds once 2.0 is launched and there are potentially many competing proposals. I guess the sentiment I was trying to express is that, given the breadth of the recent announcement, you need to allow time now for other proposals to emerge and develop before trying to establish any sort of consensus. Maybe we should even encourage a competition for the first set of proposals, with a bounty prize to the community's top choice.

I agree with you.  I think.

To me it seems as if you accepted my assumptions as valid.  And offered the counter argument that we should wait until we have more proposals to decide which is most important.  Bravo.  I accept your counter argument as true, and await all the proposals we will hopefully see.  While I am still really excited by the idea of privacy on the blockchain I am very open to the idea that something more important could come up.

I really am attempting to communicate and realize that my style of writing is not always conducive to that.  Please forgive me for my writing deficiencies.  Writing takes so much longer than thinking or speaking and I often feel as if iI have lost my point by the time I am done. 
https://metaexchange.info | Bitcoin<->Altcoin exchange | Instant | Safe | Low spreads

Offline bytemaster

GUI would require JavaScript implementation of crypto used for blinded trx.   I bet that is a lot more work than just using the library produced by blockstream

Couldn't emscripten help with that?

Thats pretty cool. 
For the latest updates checkout my blog: http://bytemaster.bitshares.org
Anything said on these forums does not constitute an intent to create a legal obligation or contract between myself and anyone else.   These are merely my opinions and I reserve the right to change them at any time.

Offline arhag

  • Hero Member
  • *****
  • Posts: 1214
    • View Profile
    • My posts on Steem
  • BitShares: arhag
  • GitHub: arhag
GUI would require JavaScript implementation of crypto used for blinded trx.   I bet that is a lot more work than just using the library produced by blockstream

Couldn't emscripten help with that?