Today seems like a pretty good day to rag on bitcoin, so I thought I’d post about something I’ve been thinking about ever since I experimented with writing my own miner. Since the goal of that project was educational, I went through it in a way that most other people probably don’t: I built a complete system (everything from the miner to the network interfaces) from scratch (no bitcoin-related libraries), which I think gave me some visibility into parts of Bitcoin that not many people see.
And what I discovered is how trivially hackable the system is right now. People talk about the security of the underlying crypto that’s used, but any security person worth their salt knows that the security of an entire system is way more than the sum of the individual components. And in this case, the vulnerability I saw has to do with how people use Bitcoin and how the Bitcoin ecosystem is not secure.
To give a sense of the level of exploitability, I think the attack could be pulled off by a motivated individual, provided they are willing to let it be detectable+traceable. Defeating the traceability is most likely within the means of any reasonable government or cybercriminal organization, and making the attack undetectable is beyond my understanding but seems certainly within the means of a large government. I’m not familiar enough with Bitcoin to know what the most valuable targets are, but the attack I have in mind can give a varying amount of control over the blockchain, which I assume is the holy grail.
The easiness of the attack boils down to the fact that most of the Bitcoin ecosystem players don’t use basic internet best practices, potentially due to an assumption that they are unnecessary because Bitcoin is “inherently secure”. Implementing something to be part of the ecosystem made it very clear that certain aspects were vulnerable, which makes me think that people haven’t paid too much attention to how everything is fitting together. Regardless, even if all ecosystem players adopted best practices, the security of the Bitcoin system would still rely on internet-level security measures, and thus is probably tamperable by the NSA.
The weakness stems from the fact that even though the underlying Bitcoin protocol is decentralized, the ecosystem services around it very much are not. I don’t think this is a solvable problem within the Bitcoin ecosystem, since these services are naturally more valuable the more centralized they are, and thus everyone’s incentive is to contribute to the centralization. It’s my belief that for a cryptocurrency to be truly secure, it has to be designed with the entire ecosystem in mind; I don’t think bolting on the necessary services is likely to be successful.
Edit [8/7/14]: someone did exactly this: http://www.wired.com/2014/08/isp-bitcoin-theft/. The idea behind my post is that mining pooling schemes have pretty laughable network security. Most of the traffic goes over HTTP — what you really need is certificate pinning so you make sure you are interacting with who you think you are. There’s no sensitive data being transmitted so the encryption aspect of HTTPS isn’t relevant here, but if you don’t verify who you’re talking to, it’s pretty easy to masquerade as the mining pool host and have people mine for you instead. I was anticipating a DNS hijack, but this guy used BGP.