Freenet 0.3 Released
A few folks noted that Freenet 0.3 has been released. You can read more at the project homepage. The software's description: "
Freenet is a peer-to-peer network designed to allow the distribution of information over the Internet in an efficient manner, without fear of censorship. It is completely decentralized (there is no person or computer essential to its operation), meaning that Freenet cannot be attacked like centralized peer-to-peer systems such as Napster. Freenet also employs intelligent routing and caching to learn to route requests more efficiently, automatically mirror popular data, make network flooding almost impossible, and move data to where it is in greatest demand.
Changes: This release includes dramatic architectural improvements, addition of internode and data encrpytion, subspaces, along with improved performance in a variety of other areas."
never broadcasting search queries (thank god).
Intelligently mirroring any and all data to a subset of the nodes that route the file to you
finding a file in the network is done in a chain, with the first node that knows where the data is directing the file request straight to that node
What this means is that, sure, in theory you could have to go through a hundred hops before you find your file. But next time you want that file, it'll be right next door (e.g. one hop away).
That, in my opinion, is leaps and bounds and orgasmically better than what Gnutella can do. Don't you think?
-=20
-=20
me doesn't live for do [DEPRECATED]
Freenet is good, it came up with some pretty neat ideas, but it would be better if it had been developped and thought out in advance in the context of an IETF working group, if the specifications had been released as a Request For Comments, and, in other words, if it had paid a little more attention to existing Internet standards instead of being Yet Another anti-censorship system.
For example, why did Freenet have to come up with their own key scheme instead of using the official standard of Uniform Resource Names (URNs) defined by RFC2141 (the previous link was an example of a URN)?
I have this dream of a true world-wide distributed database founded on recognized Internet standards. It would use URNs as keys. (In particular, it would allow arbitrary Unicode character data.) It would use the ubiquitous RDF format as "semantic sugar" (pardon the expression) of its communications. It would borrow ideas from HTTP (the best Internet communications protocol we have so far) for the protocol, and Usenet and Freenet for the distribution mechanisms, as well as the public key distribution system and trust web, and the everything system. It would use public-key cryptography as the basis for its trust graph, so as to make data authentification possible and tampering impossible. Certificates and signatures would be distributed along the network itself. It would employ secret sharing mechanisms to split the risks of carrying certain data. It would be impossible to tamper with, impossible to censor, and extremely difficult to break. It would replace the lousy and obsolete DNS system (and also alleviate somewhat the power of "root registrars" in the DNS), and possibly The Web itself. And, to make my dream even more of a dream, it would be simple to implement.
Hmmm.... Nice project, for the year 2100 or so. Anyone care to start an IETF working group?
Freenet takes this vulnerability into account in two ways:
First, you don't send out a query to a central server and get back an IP address, like you do with DNS or Napster. You send out a query to a neighbouring Freenet node and get back a document (or a failure notice). You can't tell whether the document came from the node to which you sent the request, or from one of your other neighbours, or from another node whose IP address you've never heard of. All you know is that it passed through the node to which you sent the request. But since it may be stored somewhere else, that knowledge doesn't help you to censor the document.
However, if every request was routed through dozens of nodes before the requested document was found, and if the document had to be passed back through as many nodes, Freenet would be extremely slow. Freenet has two clever properties to avoid this: "route compression" and "document clustering".
Route compression
When a node responds to a request by returning a document (call it document X), it can set the DataSource field of X's metadata to indicate the node from which X was obtained. (This may not be the actual source, but it cuts out some of the middlemen.) The requester uses this address when looking for documents with keys lexographically close to the key of X, so the intermediate nodes are skipped in any future requests. Effectively, a new edge in the Freenet graph is created, linking the requester to the node listed in the DataSource field.
Document clustering
This works almost like a neural network "learning" the fastest route to a document. If a node successfully obtains document X from node Y, it will forward subsequent requests with keys similar to the key of X to node Y. Over time, Y's cache will fill up with documents having similar keys, clustered around the key of X. This will increase the likelihood of success of requests for keys inside the cluster, and increase the likelihood of failure of requests for keys outside the cluster (as unrequested documents are squeezed out of the cache). The sets of documents cached by Y while serving requests for each of its neigbours will start to overlap, and the sets will eventually become identical - Y will become an "authority" on a particular part of the keyspace. Over the network as a whole, documents with lexicographically close keys (note that this has nothing to do with the contents of the documents) will tend to cluster together on the same node. Thus over time, requests will be routed more and more efficiently as the "guesses" made by nodes about which neighbour to forward a request to become more and more accurate.
The second way that Freenet avoids censorship is through replication. Every node involved in tunnelling a request caches the requested document as it passes through. This not only allows documents to cluster, it also ensures that popular documents are replicated across the network while unpopular documents eventually disappear. Any attempt to censor a document by taking advantage of route compression to discover the IP address of the node storing the document is bound to fail, because you have to request the document dozens of times to be sure you have found the true source of the document, and by that time you have succeeded in spreading the document all over Freenet. It's a very elegant self-balancing mechanism.
The question that pops into my head when I consider the ramifications of FreeNet:
How can I ensure that my machine is not involved in the trafficking of content that I don't support?
I think a lot of people who find FreeNet interesting immediately imagine all the victimless pilfering that can go on. "RIAA can't shut us down!" I'm not talking about free movies. I'm not talking about cracked Win2K warez. I'm not talking about the source code and inflammatory emails that were leaked from MegaCorp's development department the day before the stock price plunged.
Once you are a node, it seems you give up your right to have any control of what's hosted on your own computer. You become a member of the collective. You are a cog in a machine, without any ability to have any context.
John Doe may like kiddie porn, GHB date rape drug recipes, tips on how to spot vulnerable SUVs for car-jacking, Aryan Nation websites, and abortion clinic hit-lists. I don't. Look for it elsewhere.
If you want that sort of information, I don't want to be a party to it. I'm not talking about legalities. I'm not talking about censoring all of FreeNet from that information. I'm talking about my own ethic.
I don't want to have the feeling, that information resides somewhere on the server I've installed with my own time, money and energy, that could kill someone, or exploit someone against their will.
This isn't "cover my ass", this is "sleep well at night."
[