InterPlanetary File System
This article may be too technical for most readers to understand. Please help improve it to make it understandable to non-experts, without removing the technical details. (May 2016) (Learn how and when to remove this template message)
InterPlanetary File System (IPFS) is a protocol and network designed to create a content-addressable, peer-to-peer method of storing and sharing hypermedia in a distributed file system. IPFS was initially designed by Juan Benet, and is now an open-source project developed with help from the community.
0.4.17 / 27 July 2018
|Operating system||FreeBSD, Linux, macOS, Windows|
|Type||Protocol, distributed file system, content delivery network|
In 2014, the IPFS protocol took advantage of the Bitcoin blockchain protocol and network infrastructure in order to store unalterable data, remove duplicated files across the network, and obtain address information for accessing storage nodes to search for files in the network.
IPFS is a peer-to-peer distributed file system that seeks to connect all computing devices with the same system of files. In some ways, IPFS is similar to the World Wide Web, but IPFS could be seen as a single BitTorrent swarm, exchanging objects within one Git repository. In other words, IPFS provides a high-throughput, content-addressed block storage model, with content-addressed hyperlinks. This forms a generalized Merkle directed acyclic graph (DAG). IPFS combines a distributed hash table, an incentivized block exchange, and a self-certifying namespace. IPFS has no single point of failure, and nodes do not need to trust each other not to tamper with data in transit. Distributed Content Delivery saves bandwidth and prevents DDoS attacks, which HTTP struggles with.
The filesystem can be accessed in a variety of ways, including via FUSE and over HTTP. A local file can be added to the IPFS filesystem, making it available to the world. Files are identified by their hashes, so it's caching-friendly. They are distributed using a BitTorrent-based protocol. Other users viewing the content aid in serving the content to others on the network. IPFS has a name service called IPNS, a global namespace based on PKI, serves to build trust chains, is compatible with other NSes and can map DNS, .onion, .bit, etc. to IPNS.
Merkle data formatEdit
Every Merkle tree is a directed acyclic graph (DAG) because each node is accessed via its name. Each branch of Merkle is the hash of its local contents, naming children by their hash instead of their full contents. So after creation there is no way to edit a node. This prevents cycles (assuming there are no hash collisions), since one cannot link the first created node to the last node to create the last reference.
In general, for any Merkle to create a new branch or verify an existing branch, a hash algorithm is used on some combination of the local contents, such as a list of child hashes and other bytes. A few different hash algorithms are available in IPFS.
The data input to any of those hash algorithms is documented.
The Catalan independence referendum, taking place in September–October 2017, was deemed illegal by the Constitutional Court of Spain and many related websites were blocked. Subsequently, the Catalan Pirate Party mirrored the website on IPFS to bypass the High Court of Justice of Catalonia order of blocking.
IPFS is being used to create a mirror of Wikipedia, which allows people living in jurisdictions where Wikipedia is blocked to access the content of Wikipedia.
UltraNote, a cryptocurrency which supports encrypted messaging with file transfers of up to 100MB with "self-destruct" feature utilizes IPFS to store files.
- Agorise (23 October 2017). "c-ipfs: IPFS implementation in C. Why C? Think Bitshares' Stealth backups, OpenWrt routers (decentralize the internet/meshnet!), Android TV, decentralized Media, decentralized websites, decent." Github.com. Retrieved 25 October 2017.
- Finley, Kurt (June 20, 2016). "The Inventors of the Internet Are Trying to Build a Truly Permanent Web". Wired.
- "The IPFS Project". Ipfs.io. Retrieved 11 September 2015.
- "IPFS README - Who designed it?". Github.io. Retrieved 11 September 2015.
- "IPFS Protocol Selects Ethereum Over Bitcoin, Prefers Ethereum Dev Community". Cointelegraph.com. Retrieved 25 October 2017.
- "ipfs/go-ipfs". GitHub. Retrieved 2017-02-13.
- "ipfs/js-ipfs". GitHub. Retrieved 2017-02-13.
- "ipfs/py-ipfs". GitHub. Retrieved 2017-02-13.
- "IPFS Docs". ipfs.io. Retrieved 2017-02-13.
- "ipfs/specs". GitHub. Retrieved 2017-02-13.
- Allison, Ian (13 October 2016). "Juan Benet of IPFS talks about Filecoin". Ibtimes.co.uk. Retrieved 25 October 2017.
- "IPFS is the Distributed Web". Ipfs.io. Retrieved 27 March 2018.
- "IPFS README". Github.com. Retrieved 11 September 2015.
- "go-ipfs: IPFS implementation in go". GitHub.com. 25 October 2017. Retrieved 25 October 2017.
- Balcell, Marta Poblet (5 October 2017). "Inside Catalonia's cypherpunk referendum". Eureka Street.
- Hill, Paul (30 September 2017). "Catalan referendum app removed from Google Play Store". Neowin. Retrieved 2017-10-06.
- Dale, Brady (10 May 2017). "Turkey Can't Block This Copy of Wikipedia". Observer Media. Archived from the original on 18 Oct 2017. Retrieved 20 December 2017.
- "Attachment feature added to GUI wallet | UltraNote XUN Blog". blog.ultranote.org. Retrieved 2018-04-07.