AnonymityHow is your coin balance being tracked and what blockchain properties are responsible for this?As you all know one can always check coins balance directly from the blockchain using block explorer. In most cases, users prefer to use single wallet address multiple times - to receive money from other users, from pools etc. In theory you could, of course generate a brand new address for each transaction, however this is not particularly convenient. Imagine how it would be if you had to update your payout address in your pool settings every time you want to get your coins out there.
Besides that, using multiple addresses may bring a lot of confusion when your coins are all spread between different addresses and you need to execute single big transaction. For example, you need to pay someone 100 coins and you have 120 coins evenly spread between 3 different addresses. Now your simple 100 coins transaction will require to create at least 4 different transactions: 3 transactions of 40 coins and one return transaction with change.
http://i.imgur.com/oPnlMUD.pngAnyone who happens to throw a glance on the blockchain after your transaction will clearly see that all three address obviously belong to a single person, and how much money this person have. With pretty simple observation anyone can track and analyze blockchain to see major coin holders and accurately estimate your coin balance no matter of how much work you put in mixing your coins between your addresses.
How to change this?To better understand the idea lets look at the simple example of how the new address generation and further address usage occurs:
At first private key "A" is being generated. Basically "A" is simply a big and random number.
After that your public key "B" is being calculated from your private key using a hash function. An algorithm that creates "B" from "A" is irreversible, which means that even if everyone knows your public key "B", there is no way to find out what was original "A" that gave birth to it. That "B" will be transformed to "C" in order to represent it as a familiar 34 digit string that will be from now on used as your wallet address. You will give your "C" key (address) to everyone to receive your coins. Your secret "A" key will stay unused until you will need to send some coins to other users. At this point it will be used as a signature that tells everyone that your transaction is in fact valid.
The simple logic of address generation will now look like that:
http://i.imgur.com/0qYnEEM.pngWhat happens if another variable is introduced between A and B? It is known that A - is a random number. Imagine that instead of directly calculating B from A an interim Z variable is introduced. Z will be calculated using the irreversible function from A as was previously B. Now from Z multiple B arguments can be generated (all Bs will now be generated from Z instead of A). In order to receive a transaction you will provide your "Z" address instead of your "B", and every time a transaction to you is originated your counterpart will generate new "B" address for every transaction. This it equivalent to generating new wallet address every single time someone sends you a transaction.
When you need to originate a transaction - any of newly generated B arguments will be used and signed by your private key "A" (not Z). Therefore the new logic will look like this:
http://i.imgur.com/ViTpOGm.pngUsing this simple change in logic, common analyses of blockchain will become almost impossible. Because blockchain doesn't know of the existence of "Z" and all new Bs are generated every time you receive coins.
However there is still a possibility to analyze the blockchain!That's correct. And there is a way make it impossible. The only thing that gives away that several wallets belong to a single person is a transactions with multiple inputs. Let's get back to our previous example where you had 3 wallets with 40 coins in each one of them. Suppose you would like to transfer 100 coins to the recipient. To do that, the recipient gives you her Z address. Knowing her Z you will generate 3 different Bs (B1, B2, and B3). Then you will go ahead and create 3 separate transactions. The first and the second transactions will be one-way transactions of 40 coins. For the third transaction the current logic is to send 40 coins and receive 20 coins in change from the recipient. However, instead of doing this you would receive the change to a unique wallet that will be generated from your Z by the recipient - therefore in the blockchain it will be impossible to deduce that all of your wallets are connected.
http://i.imgur.com/rxtjgX8.pngWhat are the real benefits?Obfuscation of blockchain analysis is achieved and it provides another tool in the box for the path toward true anonymity. By no means this approach provides the ultimate solution for the anonymity and it should be coupled with other available solutions.