diff options
author | Bryan Bishop <kanzure@gmail.com> | 2017-05-03 09:00:03 -0500 |
---|---|---|
committer | Bryan Bishop <kanzure@gmail.com> | 2017-05-03 09:00:03 -0500 |
commit | f4a3555727d199fbbb9a203cabff18d3acef3f85 (patch) | |
tree | eee92585ec745730214b927c128de96adc1f0fab | |
parent | 247407754b9e9f11639ef81eee4c18f9bd7a3118 (diff) | |
download | diyhpluswiki-f4a3555727d199fbbb9a203cabff18d3acef3f85.tar.gz diyhpluswiki-f4a3555727d199fbbb9a203cabff18d3acef3f85.zip |
more links everywhere
-rw-r--r-- | transcripts/gmaxwell-confidential-transactions.mdwn | 14 | ||||
-rw-r--r-- | transcripts/scalingbitcoin/milan/mimblewimble.mdwn | 2 |
2 files changed, 8 insertions, 8 deletions
diff --git a/transcripts/gmaxwell-confidential-transactions.mdwn b/transcripts/gmaxwell-confidential-transactions.mdwn index 1bf7d23..f65ad52 100644 --- a/transcripts/gmaxwell-confidential-transactions.mdwn +++ b/transcripts/gmaxwell-confidential-transactions.mdwn @@ -20,11 +20,11 @@ So I want to talk a little bit about in detail about what motivates me in on wor # Why confidential transactions? -CT is a tool for improving privacy and fungibility in a system like bitcoin. Why is this important? If you look at traditional systems, like banking systems, they provide a level of privacy in their systems. And when you usually use your bank account, your neighbors don't know what you're doing with your bank account. Your bank might know, but your neighbors don't. Your counterparties know, other people generally don't know. This is important to people, both for personal reasons as well as for commercial reasons. In a business, you don't want your competition to know who is supplying your parts. You don't want to necessarily share who is getting paid what. You don't want your competition to have insight into your big sales or who your customers are and all that. There is a long list of commercial reasons as to why this kind of privacy is important. +CT is a tool for improving privacy and <a href="http://diyhpl.us/wiki/transcripts/scalingbitcoin/milan/fungibility-overview/">fungibility</a> in a system like bitcoin. Why is this important? If you look at traditional systems, like banking systems, they provide a level of privacy in their systems. And when you usually use your bank account, your neighbors don't know what you're doing with your bank account. Your bank might know, but your neighbors don't. Your counterparties know, other people generally don't know. This is important to people, both for personal reasons as well as for commercial reasons. In a business, you don't want your competition to know who is supplying your parts. You don't want to necessarily share who is getting paid what. You don't want your competition to have insight into your big sales or who your customers are and all that. There is a long list of commercial reasons as to why this kind of privacy is important. Personally as well-- if you think about it, in order to speak as a person to speak up in the political sphere, to have an effect on the world, you need to spend some money to do it... so this is basically you have the case that you're spending of money is intricately tied to your ability to have free speech in the world. If someone is able to surveil and monitor and control your use of money all the time, they are also controlling your ability to speak. This is also the opinion of the U.S. Supreme Court in Citizens United and a lot of people on the more liberal end of the spectrum don't like this conflation of money and free speech but it cuts both ways. People should have a high degree of financial privacy, and they can't have that if they are using a system that doesn't provide that. -In bitcoin, we have this fundamental conflict where we have built this decentralized distributed network, and it's security is based on this concept of public verification: you know bitcoin is correct because your own computer running software that you or someone you trust has audited, has verified all of this history of it, and has verified that it all adds up. That all the signatures match, that all the values match and it's all good to go. It uses conspicuous transparency in order to obtain security. Many people look at this and say ah there's a conflict we can't both have strong privacy and have this public verification needed for a decentralized system. But this apparent conflict is not true. If you think about the idea of a digital signature, that is a scheme that lets you sign a message and show that a person who knows the private key knows the message, we use this every day in bitcoin, you can use this to verify a digital signature without ever knowing your private key but they can verify that you knew it. So a digital signature showing that, you can build a system that can be publicly verified but without giving up your secrets. This shows that it is possible. +In bitcoin, we have this fundamental conflict where we have built this decentralized distributed network, and it's security is based on this concept of public verification: you know bitcoin is correct because your own computer running software that you or someone you trust has audited, has verified all of this history of it, and has verified that it all adds up. That all the signatures match, that all the values match and it's all good to go. It uses conspicuous transparency in order to obtain security. Many people look at this and say ah there's a conflict we can't both have strong privacy and have this public verification needed for a decentralized system. But this apparent conflict is not true. If you think about the idea of a <a href="https://en.wikipedia.org/wiki/Digital_signature">digital signature</a>, that is a scheme that lets you sign a message and show that a person who knows the private key knows the message, we use this every day in bitcoin, you can use this to verify a digital signature without ever knowing your private key but they can verify that you knew it. So a digital signature showing that, you can build a system that can be publicly verified but without giving up your secrets. This shows that it is possible. This whole idea of a system of money needed some kind of privacy-- that's not a new one. It's discussed in the bitcoin whitepaper, where it says that you can basically use pseudonyms, one use addresses, in order to have privacy in the system. The challenge that we found is that this is very fragile. In practice, the pseudonymity in bitcoin doesn't actually provide a whole lot of privacy. People reuse addresses and then it's really easy to trace the transaction graph through the history. The way that the earliest bitcoin software was written, you didn't usually pay to an address directly, you would provide an IP address, then your node would go to the other node and get an address from it, and then every payment would use a new fresh address on the blockchain. That was a much more private way of using things, but it required that to receive payments you had to run a node exposed to the internet not running behind NAT. So not very usable. And that whole protocol in fact was completely unauthenticated, so it was very vulnerable to man-in-the-middle attacks as well. That wasn't a good way to transaction, and as a result people started using bitcoin addresses for everything, and the address model ends up causing lots of reuse and things that really degrades privacy. @@ -34,7 +34,7 @@ And a key point that I don't have in the slide here that I should mention is tha <https://www.youtube.com/watch?v=LHPYNZ8i1cU&t=10m24s> -There have been many past proposals to improve privacy in the bitcoin space. Many people have recognized there's a problem here. People have done things like, proposals to combine <a href="https://bitcointalk.org/index.php?topic=279249.0">coinjoin</a> and <a href="https://bitcointalk.org/index.php?topic=321228.0">coinswap</a>, which are completely compatible with the existing bitcoin system and use some smart contracting protocol trickery to increase user privacy. People have also used things like centralized servers where you trust a third-party, you give them the money, they make the payments for you, and that can at times improve your privacy except at the central server which usually destroys your privacy along the way. There have been cryptographic proposals, there's a proposal called zerocoin which is distinct from the zerocash stuff that exists today, which had poor scalability but interesting privacy properties. There's an interesting not-well-known proposal called <a href="https://bitcointalk.org/index.php?topic=290971.0">one-way aggregatable signatures (OWAS)</a> which showed up on bitcointalk from an anonymous author who vanished (<a href="https://bitcointalk.org/index.php?topic=1377298.0">follow-up</a>). It's a pretty interesting approach. There's the traceable ring signatures that were used in bytecoin, monero and more recently in zerocash system which is now showing up as an altcoin. The compatible things-- like coinjoin-- have mostly suffered from not having as much privacy as you would expect, due to transaction amount tracing. The idea behind coinjoin is that multiple parties come together and they jointly author a single transaction that spends all of their money and pays out to a set of addresses, and by doing that, an observer can't determine which outputs match with which inputs so that the users gain privacy from doing this, but if all the users are putting in and taking out different amounts then you can easily unravel the coinjoin and the requirement to make the amounts match to prevent the unraveling would make coinjoin hard to be usable. And then, prior to confidential transactions as a proposal, the cryptographic solutions that people proposed have broken the pruning process in bitcoin. They really have harmed the scalability of the system causing the state to balloon up forever. Today you can run a bitcoin node with something like 2 GB of space on a system, and that's all it needs in order to validate new incoming blocks and that's with all the validation and all the rules no trusting third parties. And if not for pruning, then that number would be 120 gigabytes and rapidly growing. Many of these cryptographic privacy tools have basically broken this pruning and have hurt scaling... the exception being the more recent <a href="http://diyhpl.us/~bryan/papers2/bitcoin/TumbleBit:%20An%20untrusted%20bitcoin-compatible%20anonymous%20payment%20hub%20-%202016.pdf">tumblebit</a> proposal, and tumblebit is a proposal like coinswap that allows two users to swap ownership of coins in a secure way without network observer being able to tell that they did this. Tumblebit improves the privacy of that by making the users themselves not able to tell who the other users were, and tumblebit doesn't break scalability, but because it only does these swaps and a few other things, it's not as flexible as many of the other options. +There have been many past proposals to improve privacy in the bitcoin space. Many people have recognized there's a problem here. People have done things like, proposals to combine <a href="https://bitcointalk.org/index.php?topic=279249.0">coinjoin</a> and <a href="https://bitcointalk.org/index.php?topic=321228.0">coinswap</a>, which are completely compatible with the existing bitcoin system and use some smart contracting protocol trickery to increase user privacy. People have also used things like centralized servers where you trust a third-party, you give them the money, they make the payments for you, and that can at times improve your privacy except at the central server which usually destroys your privacy along the way. There have been cryptographic proposals, there's a proposal called zerocoin which is distinct from the zerocash stuff that exists today, which had poor scalability but interesting privacy properties. There's an interesting not-well-known proposal called <a href="https://bitcointalk.org/index.php?topic=290971.0">one-way aggregatable signatures (OWAS)</a> which showed up on bitcointalk from an anonymous author who vanished (<a href="https://bitcointalk.org/index.php?topic=1377298.0">follow-up</a>). It's a pretty interesting approach. There's the traceable ring signatures that were used in bytecoin, monero and more recently in zerocash system which is now showing up as an altcoin. The compatible things-- like coinjoin-- have mostly suffered from not having as much privacy as you would expect, due to transaction amount tracing. The idea behind coinjoin is that multiple parties come together and they jointly author a single transaction that spends all of their money and pays out to a set of addresses, and by doing that, an observer can't determine which outputs match with which inputs so that the users gain privacy from doing this, but if all the users are putting in and taking out different amounts then you can easily unravel the coinjoin and the requirement to make the amounts match to prevent the unraveling would make coinjoin hard to be usable. And then, prior to confidential transactions as a proposal, the cryptographic solutions that people proposed have broken the pruning process in bitcoin. They really have harmed the scalability of the system causing the state to balloon up forever. Today you can run a bitcoin node with something like 2 GB of space on a system, and that's all it needs in order to validate new incoming blocks and that's with all the validation and all the rules no trusting third parties. And if not for pruning, then that number would be 120 gigabytes and rapidly growing. Many of these cryptographic privacy tools have basically broken this pruning and have hurt scaling... the exception being the more recent <a href="http://diyhpl.us/~bryan/papers2/bitcoin/TumbleBit:%20An%20untrusted%20bitcoin-compatible%20anonymous%20payment%20hub%20-%202016.pdf">tumblebit</a> proposal, and <a href="http://diyhpl.us/wiki/transcripts/scalingbitcoin/milan/tumblebit/">tumblebit</a> is a proposal like coinswap that allows two users to swap ownership of coins in a secure way without network observer being able to tell that they did this. Tumblebit improves the privacy of that by making the users themselves not able to tell who the other users were, and tumblebit doesn't break scalability, but because it only does these swaps and a few other things, it's not as flexible as many of the other options. # Confidential transactions @@ -122,7 +122,7 @@ Monero is another kind of altcoin that uses privacy technique that was first in More modern monero as of a few months ago is using CT, they have adapted ring signatures with CT for something called <a href="http://diyhpl.us/~bryan/papers2/bitcoin/Ring%20CT%20for%20Monero.pdf">ringCT</a> and it's sort of like how CT can be combined with coinjoin. -So this system has the benefits of CT but it also has the disadvantages of the ring signature and there's a forever-growing spent coins list. Monero today isn't unconditionally sound, but it could be, just like CT it could be upgraded to unconditional soundness. The crypto assumptions are the same as CT but they use the ed25519 curve but otherwise it's the same crypto assumptions. +So this system has the benefits of CT but it also has the disadvantages of the ring signature and there's a forever-growing spent coins list. Monero today isn't unconditionally sound, but it could be, just like CT it could be upgraded to unconditional soundness. The crypto assumptions are the same as CT but they use the <a href="https://ed25519.cr.yp.to/">ed25519 curve</a> but otherwise it's the same crypto assumptions. The other cryptographically-private altcoin that people talk about is Dash... but it's not cryptographically private at all. I had a slide about this that was just "Dash LOL". It's snakeoil. I'm beside myself about it, personally. What they have is a system like coinjoin, they nominate nodes based on proof of stake to be coinjoin masters, and then they have done this insecurely many times in the past I have no idea if the current version is secure. It's not on the same level as zcash or monero maybe it's better than doing nothing I don't know. LOL, right? @@ -130,7 +130,7 @@ The other cryptographically-private altcoin that people talk about is Dash... bu There are other risks with this technology. I guess I was talking about one of them right now. It's difficult to distinguish snakeoil from real stuff and vet claims. Maybe some of the stuff I said today was crap, like maybe someone will claim that I said CT is unconditionally private (which is something I said) but maybe because of the way it gets used it's not actually unconditionally private.... right, like it's hard to work out this stuff and figure out which complaints are legitimate, not too many experts, new area, many people that try to sound like experts, etc. -A big risk is that if you look at any of these other cryptosystems that the consensus part of it is itself a cryptosystem just like RSA or AES or whatever. The whole thing has to work exactly right, and if one part is wrong then it doesn't give the properties you think, and if you get it wrong, everything breaks. Complexity is the enemy of integrity, it's hard to verify it. It makes the system more complex. I'm currently aware of three and a half devastating failures in privacy improvement attempts... There's an altcoin based on the original zcoin proposal, where they had an inflation incident where it had more or less like a typo made it possible for people to mint coins out of nothing. They let their system keep running, the coins inflated, then they said well OK now there's more coins. The loss was effectively socialized. Because this was caught fortunately due to some of the privacy limitations in the approach of exploiting it, the loss was found to be sort of small and it was possible to socialize it, but if they (the attacker) had printed billions and billions of coins, then that might not have been salvageable. +A big risk is that if you look at any of these other cryptosystems that the consensus part of it is itself a cryptosystem just like RSA or AES or whatever. The whole thing has to work exactly right, and if one part is wrong then it doesn't give the properties you think, and if you get it wrong, everything breaks. Complexity is the enemy of integrity, it's hard to verify it. It makes the system more complex. I'm currently aware of three and a half devastating failures in privacy improvement attempts... There's an altcoin based on the original zcoin proposal, where they had an <a href="http://www.businessinsider.com/typo-bitcoin-rival-zcoin-attacker-steals-400000-2017-2">inflation incident</a> where it had more or less like a typo made it possible for people to mint coins out of nothing. They let their system keep running, the coins inflated, then they said well OK now there's more coins. The loss was effectively socialized. Because this was caught fortunately due to some of the privacy limitations in the approach of exploiting it, the loss was found to be sort of small and it was possible to socialize it, but if they (the attacker) had printed billions and billions of coins, then that might not have been salvageable. There's a system called Shadowcash which is a clone of the bytecoin-like monero-like ring signatures with no CT based on the bitcoin code base. And, it had no privacy at all. I don't know if the person building it was a complete fool or utter genius, but they managed to make a really subtle mistake that made it have no privacy. @@ -170,7 +170,7 @@ The area where I have been focusing the most on CT is efficiency. The costs are # Patent status -So I should mention about patents. I have patented many of the techniques and optimizations in confidential transactions with the explicit intention and very loudly stated goal of using these patents to prevent other people from patent this stuff, and to commit to a patent nonaggression licensing scheme where anyone can use my patents as long as they commit not to sue each other into oblivion. +So I should mention about patents. I have <a href="http://diyhpl.us/~bryan/papers2/bitcoin/patent%20-%20WO2016200885%20-%20Cryptographically%20concealing%20amounts%20transacted%20on%20a%20ledger%20while%20preserving%20a%20network's%20ability%20to%20verify%20the%20transaction%20-%202016.pdf">patented</a> many of the techniques and optimizations in confidential transactions with the explicit intention and very loudly stated goal of using these patents to prevent other people from patent this stuff, and to commit to a patent nonaggression licensing scheme where anyone can use my patents as long as they commit not to sue each other into oblivion. Blockstream has a very open patent policy that is purely defensive. It has been applauded by many groups, including the <a href="https://www.eff.org/deeplinks/2016/07/blockstream-commits-patent-nonaggression">EFF</a>. If it's not good enough for somebody, let me know and we can figure out how to make it better. We can't make the patent system go away, and it's a risk to any deployment of any complex technology. I previously worked on royalty-free multimedia codecs. I am one of the authors of Vorbis, the Opus audio codec, WebRTC and like anyone using Signal is using Opus. We used patents strategically in Opus to get other patents opened. Trying to do the same thing with CT. I don't think anyone needs to worry about patents in CT. However, if someone is worried, then I would be happy to work with them to make the situation better for everyone. @@ -218,7 +218,7 @@ A: I think that argument has a lot of merit. Just look at the zcash case. But I Q: How excited are you about segwit activating on litecoin? -A: It'll be interesting. You know, I think it's cool that it gets used more, but I already knew it would get used somewhere-- maybe I'm deluded. In litecoin there's some interesting challenges with miners and there's some large vested interest in making segwit have problems. The size and scale in litecoin, it will get over the problems, it might be bumpy, I'll be happy to help out. I pointed out on litecoin's subreddit the other day about potential turbulence and there's some good things to know about and to mitigate. It would be cool. I am happy about it. You are going to have bitcoin developers working on litecoin eventually, because nobody really doing protocol development in bitcoin wants to do script enhancement without segwit because it makes it so much easier. The idea of trying to do script enhancement without it is just not interesting... +A: It'll be interesting. You know, I think it's cool that it gets used more, but I already knew it would get used somewhere-- maybe I'm deluded. In litecoin there's some interesting challenges with miners and there's some large vested interest in making segwit have problems. The size and scale in litecoin, it will get over the problems, it might be bumpy, I'll be happy to help out. I <a href="https://www.reddit.com/r/litecoin/comments/67rqqf/buckle_your_seatbelts_there_may_be_some_minor/">pointed out on litecoin's subreddit the other day</a> about potential turbulence and there's some good things to know about and to mitigate. It would be cool to get segwit activated on litecoin. I am happy about it. You are going to have bitcoin developers working on litecoin eventually, because nobody really doing protocol development in bitcoin wants to do script enhancement without segwit because it makes it so much easier. The idea of trying to do script enhancement without it is just not interesting... Q: What do you think is preventing or how would you accelerate mainstream adoption of digital currency like bitcoin? diff --git a/transcripts/scalingbitcoin/milan/mimblewimble.mdwn b/transcripts/scalingbitcoin/milan/mimblewimble.mdwn index af7eeab..b2ff347 100644 --- a/transcripts/scalingbitcoin/milan/mimblewimble.mdwn +++ b/transcripts/scalingbitcoin/milan/mimblewimble.mdwn @@ -24,7 +24,7 @@ It was a paper, neat name, in the Harry Potter books it's a tongue-tying curse t In bitcoin, the way that bitcoin transactions work, you have a pile of inputs and a pile of outputs. Every input is an output from a previous transaction. Every input has to sign the entire transaction. This proves that the person who owns those inputs intends to send the transaction and authorizes this. In mimblewimble, rather than having a complex script system and allowing arbitrary scripts, mimblewimble just has EC keys. You can add and subtract any two EC keys and add and subtract and get another elliptic curve key. If I have some coins attached to some key, and someone wants to move the coins from my key to their key, we can take the difference between the two keys, and create a multisig of that difference, and that's almost as good as any. So we take a sum of all input keys and all output keys, and we can get a single key, and sign it with that. So it's really just operations on keys. It's bitcoin and remove script-- well no, it's designed from the ground-up to be different. I'll mention later that we can get locktime, and we can definitely get multisignatures and locktime. You can use this to get unidirectional payment channels. So in principle you can have lightning on top of mimblewimble, although not in an elegant way. I think this is very cool. -So mimblewimble transactions have inputs just like in bitcoin transactions. The inputs are confidential transactions, rather than bitcoin inputs. They are homomorphically-encrypted vaues. What you can do with confidential transactions is you can add up all the output values, subtract the input values as elliptic curve points. You can check whether they add up to zero. You can't check anything else. There's a priviledged zeropoint in elliptic curve groups. Everything else looks as a uniformly random elliptic curve points. There are no features to these. As far as fungibility is concerned, this is pretty cool that every output looks like a random number. There's an annoying feature of confidential transactions where it's in principle possible to encrypt negative values, so I can create an output with a positive million bitcoins and a negative million bitcoins... I might throw that away and have a million bitcoin. The way that confidential transactions solves this is with a range proof. In elements alpha, we use a range proof developed by Greg Maxwell, which proves that.... you can make it whatever range you wat. As long as it is much less than 2^256, you can have any value you want, and it proves it's in the range. It's proofs of knowledge of the blinding key of the output. +So mimblewimble transactions have inputs just like in bitcoin transactions. The inputs are <a href="http://diyhpl.us/wiki/transcripts/gmaxwell-confidential-transactions/">confidential transactions</a>, rather than bitcoin inputs. They are homomorphically-encrypted vaues. What you can do with confidential transactions is you can add up all the output values, subtract the input values as elliptic curve points. You can check whether they add up to zero. You can't check anything else. There's a priviledged zeropoint in elliptic curve groups. Everything else looks as a uniformly random elliptic curve points. There are no features to these. As far as fungibility is concerned, this is pretty cool that every output looks like a random number. There's an annoying feature of confidential transactions where it's in principle possible to encrypt negative values, so I can create an output with a positive million bitcoins and a negative million bitcoins... I might throw that away and have a million bitcoin. The way that confidential transactions solves this is with a range proof. In elements alpha, we use a range proof developed by Greg Maxwell, which proves that.... you can make it whatever range you wat. As long as it is much less than 2^256, you can have any value you want, and it proves it's in the range. It's proofs of knowledge of the blinding key of the output. Confidential transactions use homomorphic encryption. Mimblewimble uses this as a signing key and a blinding key. It uses range proofs to show that the key is known. In confidential transactions, you add up points, you show they all addu p to zero, you show that all the input values equal the output values. So you have to show that they add up to some other random curve point. That curve point has a key, it proves that it's an encrption of the value zero. We can exploit this in mimblewimble to allow handing over hte key without the recipient learning the sender's keys. We can hand-off keys by signing with their difference, and mimbewimble solves this with an .... |