BitGo bug reveals patterns in Bitstamp transactions
blog.blocktrail.com
blog.blocktrail.com
I kept a running tally of coins in/out per hour, 6 hours, and day. I could with fairly high certainty predict most large dumps 5-30 minutes before they occurred (delay before deposit is confirmed) and then immediately sell myself while placing a buy order for 5-10% lower depending on the size of the deposit.
I also started tracking the exact deposit addresses being used - and more importantly, which ones get reused (a crazy high percent) - which let me correlate market behavior to an individual's actions. For example, address X just had a very large deposit. 6 blocks later, there is a market sell order placed for the exact amount deposited and this same behavior happens every time coins are deposited to the given address.
I can then basically add a trigger to automatically pre-empt the likely incoming dump with one of my own and then buy back for 5% less.
The biggest problem was the market cap and transaction volume was just too small to make much money relative to the risk. However if one could do this same analysis with bitcoin, it could be extremely profitable.
The primary reason we haven't changed it sooner is that BitGoD (which Bitstamp uses), currently relies on the change output being last to determine which output of a transaction is change when listing transactions. This was needed due to missing functionality in our back-end transaction indexer which has been remedied in the last few weeks.
The other reason we don't consider it a huge deal is that, until there is much more adoption of multi-sig, it's still going to be relatively easy to determine which output is change (it's likely the only one that starts with a "3").
Most people call known issues that they plan to fix bugs.
Known limitations are not bugs and fixing them is enhancing the program. Bugs must not be known to exist at the time of creation.
I'm not sure that you understand what the impact is. It's revealing that a group of transactions all use the same software. Finding out which one is a change address isn't really important.
https://github.com/BitGo/BitGoJS/pull/12/files
A change address is designed to enhance anonymity on the blockchain (to anyone who says this doesn't exist, prove it and tell me which bitcoin transactions I've done). With a change address, whenever Alices makes a payment from address X, during a single transaction part of the money goes to Bob's bitcoin address Y and the rest of the money goes to another address Z under Alice's control. The idea is that people should not be able to tell whether Alice controls Y or Z, so it should make it more difficult to know exactly how much money Alice and Bob ended up with.
Of course, if you always know that Alice's change address Z is last, this whole exercise is futile.
Don't think that's actually true. A change address may help for anonymity, but the design of bitcoin (specifically, "outputs"), means that change addresses must be used. I doubt the idea was specifically to help anonymity.
https://en.bitcoin.it/wiki/Transaction#Principle_example_of_...
And yes, their purpose is very explicitly extra anonymity. Gavin named a branch without change addresses a "noprivacy" branch:
http://bitcoin.stackexchange.com/questions/1629/why-does-bit...
I'm aware of that, it's part of what I was trying to say.
>Gavin named a branch without change addresses a "noprivacy" branch:
That branch apparently just sends it to the sending address.
There are other reasons not to reuse addresses unrelated to anonymity, see https://en.bitcoin.it/wiki/Address_reuse.
So I still don't see a design choice that is specifically for anonymity.
Then, an opportunity pops up to take a shot at a competitor and they jump on it. Sure, Blocktrail submitted a pull request, 48 hours ago.
This doesn't look very genuine.
The data is in the blockchain. You can identify and fix the bug but this is still giving an advantage to the people who are going to compile this data for themselves.
These privacy bugs are well known to the people who put them to use.