BitTorrent

The genius of BitTorrent lies in its clever resource optimisation (Cohen 2003): if many clients want to download the same content from a user, it gives them each different parts in the first phase. In the second phase, they can swap the parts between each other in a tit-for-tat fashion until everyone has all the parts. This way, the upstream bandwidth cost for a user hosting content (the seeder in BitTorrent parlance) remains roughly the same, regardless of how many clients download the content simultaneously. This solves the most problematic, ingrained issue of the ancient, centralised, master-and-slave design of Hypertext Transfer Protocol (HTTP), the protocol underpinning the World Wide Web. Cheating (i.e. feeding your peers with garbage data) is discouraged by the use of hierarchical, piece-wise hashing. Each package offered for download is identified by a single short hash, and any part of it can be cryptographically verified to be a specific component of the package without requiring knowledge of other parts, and incurring only a very small computational overhead.

But this beautifully simple approach has five consequential shortcoings, all somewhat related (see Locher et al. 2006, Piatek et al. 2007): 1. Lack of Incentives 1. Initial Latency 1. Lack of Fine-grained content addressing 1. No incentive to Keep Sharing 1. No Privacy or Ambiguity