The analogy would be scanning the block chain looking for tree firm's account numbers to verify all transactions are accounted for.
I don't know for the life of me why basic stuff like this isn't implemented. The crypto currency world is like a big joke.
There were one or two exchanges that did things "right" (e.g. TradeHill) and were immediately driven out of business by their own high costs.
It's pretty straightforward to compute the sum of all coins in your wallets, I would assume. It's also straightforward to compute the sum of all account deposits tracked by your database. Just knowing those two numbers is really simple stuff, like a single SQL query on the DB. All they need to do is calculate those numbers and report on it daily or weekly and they'd have detected the fraud the very first time coins were taken.
(Not physical cards traded online, mind you, these were virtual cards in the game Magic: The Gathering Online.)
They were simultaneously bit by an attack exploiting a fault in their wallet implementation in combination with transaction malleability. You can invert all the bits in a transaction id and if you also take the complement of the signature then the signature is still valid. The transaction still happens but you never see the transaction ID come over the network (it's actually the complement of the txid). After a while, most clients concluded that it wasn't broadcast successfully and either aborted or retry, so their wallet balance diverged. And yes they probably did not check it against the official client balance.
A significant number of frontend nodes participated in this transaction malleability attack over a sustained period of time, probably more than a lone-wolf attacker could access (although renting botnets isn't all that expensive, especially if you are sucking out bitcoin at the same time...)
The interesting question is whether they had someone on the inside, although it could also be explained by incompetence and an attacker probing for weaknesses who comes to realize that the bug wasn't being patched.
> It's pretty straightforward to compute the sum of all coins in your wallets, I would assume.
You assume incorrectly. It's a cold wallet. It's not connected to anything; that is its purpose. To monitor the balance, one would have to write software to watch the blockchain and calculate the balance of specific addresses. This is by no means impossible but in 2011 there were very very few engineers on Earth competent to do it and Mt Gox was trading bitcoins for pennies. Don't underestimate how fast Bitcoin went from a strange curious technology to being worth significant money.
Ultimately you are judging their actions through the lens of hindsight. Best practices weren't even established yet.
It's a fun piece of trivia one crypto currency guy told me and it seems to be true.
So either McCaleb built a brand new exchange from the ground up in one week, or he reused code from his Magic card trading service.
McCaleb sold the site to Karpeles 8 months later, and 3 months after that, it was breached for the first time. Allegedly, the hacker used McCaleb's old admin credentials to arbitrarily assign himself any amount of bitcoin, which he then started selling off to crash the price. Since the price crashed to $0.01, the dollar value of the withdrawal limit represented several thousand bitcoin, which the attacker promptly sent off-site.
No matter if the site was reused code from a Magic card exchange, or was written from the ground up, it never should have been within a thousand miles of anything of value.
Or he spent some time writing the new service while the previous one was still running.
The MtGox pivot from trading cards to Bitcoin was pretty dramatic.
ಠ_ಠ
https://web.archive.org/web/20100701145902/http://blog.magic...
How did they not at least perform a simple sum of coins held by their wallets and compare it against the amount expected by their databases? Or is the attack more sophisticated than this would detect?
If I were building a system like this, I'd want to run an auditing system continuously that looks for discrepancies, and then "shuts down everything" if they're detected.