Author Topic: Confidential / Stealth Transfer Support Implemented and Passing Tests  (Read 15489 times)

0 Members and 1 Guest are viewing this topic.

Offline Method-X

  • Hero Member
  • *****
  • Posts: 1131
  • VIRAL
    • View Profile
    • Learn to code
  • BitShares: methodx
Could somebody add some info about this on the technology page on the website? This is so important that this absolutely should be promoted in there.

Anybody?

If it's not sure yet that this will be implemented when 2.0 comes out, a blog post might be better than technology page. But anyway, some kind of "official" statement/explanation would be great. There are lot of people who want anonymous cryptocurrencies so we need to get their attention.

I'd love to have site/post that I can link anytime there's discussion about anonymous cryptos.

As soon as there is a GUI implementation, this should be added to bitshares.org/technology/. There are always conversations going on about anonymous coins and having a page to link to that explains our implementation would be very helpful.

Offline kenCode

  • Hero Member
  • *****
  • Posts: 2283
    • View Profile
    • Agorise
https://github.com/cryptonomex/graphene/commit/be65c277c96b96cfa6e31773cce9805d3d51be87

No wallet support yet, but that is relatively easy.

yay!  +5%

 
It would be nice to see that topic covered here:
https://bitshares.org/technology/
 
in a nice, bold typeset too:
Stealth Transfers with Blinded Amounts via Confidential Transactions
kenCode - Decentraliser @ Agorise
Matrix/Keybase/Hive/Commun/Github: @Agorise
www.PalmPay.chat


Offline CLains

  • Hero Member
  • *****
  • Posts: 2606
    • View Profile
  • BitShares: clains
Could somebody add some info about this on the technology page on the website? This is so important that this absolutely should be promoted in there.

Anybody?

If it's not sure yet that this will be implemented when 2.0 comes out, a blog post might be better than technology page. But anyway, some kind of "official" statement/explanation would be great. There are lot of people who want anonymous cryptocurrencies so we need to get their attention.

I'd love to have site/post that I can link anytime there's discussion about anonymous cryptos.

Yes!

https://bitshares.org/

Now we can finally fill in the missing square :-*

Offline Samupaha

  • Sr. Member
  • ****
  • Posts: 479
    • View Profile
  • BitShares: samupaha
Could somebody add some info about this on the technology page on the website? This is so important that this absolutely should be promoted in there.

Anybody?

If it's not sure yet that this will be implemented when 2.0 comes out, a blog post might be better than technology page. But anyway, some kind of "official" statement/explanation would be great. There are lot of people who want anonymous cryptocurrencies so we need to get their attention.

I'd love to have site/post that I can link anytime there's discussion about anonymous cryptos.

Offline Samupaha

  • Sr. Member
  • ****
  • Posts: 479
    • View Profile
  • BitShares: samupaha
Could somebody add some info about this on the technology page on the website? This is so important that this absolutely should be promoted in there.

Offline arhag

  • Hero Member
  • *****
  • Posts: 1214
    • View Profile
    • My posts on Steem
  • BitShares: arhag
  • GitHub: arhag
Adding stealth transfers on top of blinded amounts allows both the amount and the recipient to be hidden from the public (for asset transfers only)

So, you're saying that we will be at least as dark as DASH, Bytecoin/Monero, and Shadowcash?

Bytecoin/Monero and Shadowcash all use the CryptoNote mechanism I described above. So they protect sender/receiver metadata better than BitShares will but come with disadvantages I listed in my previous post.

DASH is frankly not very interesting. Their main feature are stealth transfers that BitShares already has (TITAN) and will reimplement in BitShares 2.0 but in a better way (stealth transfer with blinded amounts via Confidential Transactions). They also conveniently integrate a CoinJoin protocol into the network with their Masternodes (I briefly discussed Masternodes in a different context in this thread). I'm not sure if it makes sense to integrate the CoinJoin protocol so closely with the blockchain protocol or just have that be a separate service provided by wallet hosts, but if it does make sense and there aren't better ways of doing it, it is something that can easily also be implemented in BitShares. Plus thanks to blinded amounts, the CoinJoin protocol would be even more private.

Offline bytemaster

Wow that was great.  Someone should give you BROWNS.  Is this method Bitshares pursuing the best option out there right now?

The best that I know of that has a working implementation and has been vetted by top Bitcoin cryptographers.   
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 topcandle

Wow that was great.  Someone should give you BROWNS.  Is this method Bitshares pursuing the best option out there right now?
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
Is there a difference between privacy use here vs zerocoin?  Is this implementation better for exchange and market type transactions and zerocoin is better for uniform type currency transacting?  I guess the root of my question is why are we going for this, rather than zerocoin?

Zerocoin hides sender/receiver but does not hide amounts. The ring signatures of CryptoNote also hide sender/receiver but not amounts. (Technically, when I say doesn't hide amounts, I mean that these work on fixed-denomination assets. You could have a collection of related assets of different denominations, e.g. a $1 bill, $5 bill, $10 bill, etc., and send an appropriate combination of them privately to the receiver to effectively hide the amount. There is then the added complication of converting one asset to a combination of other ones and vice versa  to implement "getting change".)

The ring signatures of CryptoNote grow in size proportional to the number of balances the user wants to hide in. (Technically, Chandran signatures can be used to have the signature grow with the square root of the number of balances. However, their applicability for cryptocurrency has been contested. And apparently they require a trusted setup, so that makes me immediately consider it a non-starter.) For that reason, users need to compromise privacy a little and choose a small set of balances to hide in for the sake of reducing transaction size. (This compromise is also beneficial in making it easier on lightweight clients. But they would still need to request from a full node the balances of a few candidate blocks, one of which holds the balance they want to spend, to then filter down to the handful of balances, one of which must include their spending balance, that they wish to generate the ring signature on.)

On the other hand, I believe Zerocoin's spend signatures (really just the serial number and the zero-knowledge proof) are fixed size regardless of the privacy level wanted. (Zerocoin uses a one-way accumulator that needs to be computed by all nodes in the network. This can be done incrementally by the nodes for each new stealth transfer transaction. However, to generate a signature, the spender needs access to the accumulator by the end of the block just prior to the block in which their spending balance exists and the commitments of all balances in blocks that come after the block just prior to the block containing the spending balance, which seems to me to be a major problem for lightweight clients.) Despite being fixed size, the zero-knowledge proofs of Zerocoin are pretty large and take a while to verify.

Besides not hiding the amounts, the CryptoNote and Zerocoin methods suffer from the fact that they make full blockchain pruning impossible. (Actually, I may be wrong about this. Blockchain pruning might be possible, I just haven't yet figured out the details of how it would work. In any case, I would imagine blockchain pruning would require some time limit for users to redeem/update their balances before they are lost forever.) The blockchain needs to store all serial numbers that have been used to redeem the tokens to prevent double-spends. So it grows in size without bound over time.

Zerocash hides both the sender/receiver and the amounts. It uses a special zero-knowledge proof called Succinct Non-interactive ARguments of Knowledge (zk-SNARK), which allows for a much smaller proof than Zerocoin. It would seem to be the ideal system, but the problem is that zk-SNARK are very new cryptography so there is some uncertainty regarding whether it is appropriate to trust it yet for this purpose, and more importantly it requires a trusted entity to setup the initial parameters needed to make the proofs work. If this entity cannot be trusted, they could produce free tokens out of thin air. I also don't know what limitations it poses on lightweight clients.

Confidential transactions allows the amount to be blinded but by itself not the sender/receiver. This blinding process is really efficient: it is easy to compute the blinded values and to verify that sums add up, and even the range proof construction/verification isn't too bad; since it doesn't hide metadata of sender and receiver, it is easy on the lightweight clients since they don't need any other information from the blockchain that isn't relevant to their balances/transactions; the cryptography is mostly straightforward and better understood than zk-SNARKs, and doesn't require any trusted setup; and even though the size of the range proofs are somewhat large, they aren't too bad (an order of magnitude better than size of Zerocoin's zero-knowledge proofs) and with this new Compact Confidential Transactions, the size of the range proofs become very small (approximately the same size of zk-SNARKs of Zerocash and smaller than a CryptoNote ring signature that hides within at least 8 balances). Adding stealth transfers on top of blinded amounts allows both the amount and the recipient to be hidden from the public (although for the recipient to remain hidden they need to not do things with the received balance that links it to their real account). Tumblers and CoinJoin (which have augmented privacy because of blinded amounts) can then provide users with the added privacy they need to move tokens from one account to another without linking the together.

Finally, I should mention that all of these techniques are to provide privacy for simple transfer operations. Market operations and smart contracts (generally) require knowing the plain-text amounts.
« Last Edit: July 27, 2015, 07:43:47 pm by arhag »

Offline topcandle

Is there a difference between privacy use here vs zerocoin?  Is this implementation better for exchange and market type transactions and zerocoin is better for uniform type currency transacting?  I guess the root of my question is why are we going for this, rather than zerocoin?

https://metaexchange.info | Bitcoin<->Altcoin exchange | Instant | Safe | Low spreads

clout

  • Guest
So this means that anyone can see that I sent or received a transaction, but not now much or what it was?
That's what I understood .. yep ..

Hmm, the original post seems to be deleted for some reason. But I just want to clarify that you can still tell what asset it was just not the amount. For example if account A sends 100 BTS to account B, the public will be able to tell that account A sent some unknown amount of BTS to some account (if it is a blinded but not stealth transacton then the public can also know with certainty that the receiving account is account B). On the other hand if account A sends 100 BitUSD to account B, the public will be able to tell that account A sent some unknown amount of BitUSD to some account.

Edit: You could in theory obfuscate the asset sent as well by simply sending a wide variety of assets with each transaction, where all but one are of a zero amount. But  first you would need to have plausibly received that asset as a blinded transaction to the account that will be doing the sending. Also, you need to make sure that the receiver merges in all the assets (including the zero amount ones) into their account to not leak information about which was the non-zero one. Also, the transaction size (and thus fees) scales with the number of assets you want to hide in. So because of that and the added complexity on both sender and receiver to avoid leaking information, I think it quickly become not worth the added privacy.

Is there no way to make the sender and receiver unknown while still preserving the public record of the asset and amount transacted?

Offline xeroc

  • Board Moderator
  • Hero Member
  • *****
  • Posts: 12922
  • ChainSquad GmbH
    • View Profile
    • ChainSquad GmbH
  • BitShares: xeroc
  • GitHub: xeroc
Hmm, the original post seems to be deleted for some reason. But I just want to clarify that you can still tell what asset it was just not the amount. For example if account A sends 100 BTS to account B, the public will be able to tell that account A sent some unknown amount of BTS to some account (if it is a blinded but not stealth transacton then the public can also know with certainty that the receiving account is account B). On the other hand if account A sends 100 BitUSD to account B, the public will be able to tell that account A sent some unknown amount of BitUSD to some account.

Edit: You could in theory obfuscate the asset sent as well by simply sending a wide variety of assets with each transaction, where all but one are of a zero amount. But  first you would need to have plausibly received that asset as a blinded transaction to the account that will be doing the sending. Also, you need to make sure that the receiver merges in all the assets (including the zero amount ones) into their account to not leak information about which was the non-zero one. Also, the transaction size (and thus fees) scales with the number of assets you want to hide in. So because of that and the added complexity on both sender and receiver to avoid leaking information, I think it quickly become not worth the added privacy.
Thanks you very much for the explanation ..

Offline hodor

  • Jr. Member
  • **
  • Posts: 46
    • View Profile
  • BitShares: hodor
Hodor hodor hodor hodor hodor, hodor hodor.

Offline arhag

  • Hero Member
  • *****
  • Posts: 1214
    • View Profile
    • My posts on Steem
  • BitShares: arhag
  • GitHub: arhag
So this means that anyone can see that I sent or received a transaction, but not now much or what it was?
That's what I understood .. yep ..

Hmm, the original post seems to be deleted for some reason. But I just want to clarify that you can still tell what asset it was just not the amount. For example if account A sends 100 BTS to account B, the public will be able to tell that account A sent some unknown amount of BTS to some account (if it is a blinded but not stealth transacton then the public can also know with certainty that the receiving account is account B). On the other hand if account A sends 100 BitUSD to account B, the public will be able to tell that account A sent some unknown amount of BitUSD to some account.

Edit: You could in theory obfuscate the asset sent as well by simply sending a wide variety of assets with each transaction, where all but one are of a zero amount. But  first you would need to have plausibly received that asset as a blinded transaction to the account that will be doing the sending. Also, you need to make sure that the receiver merges in all the assets (including the zero amount ones) into their account to not leak information about which was the non-zero one. Also, the transaction size (and thus fees) scales with the number of assets you want to hide in. So because of that and the added complexity on both sender and receiver to avoid leaking information, I think it quickly become not worth the added privacy.
« Last Edit: July 27, 2015, 12:08:27 am by arhag »