I was telling a friend about the Free Network Project the other day, which I’d read about a few years ago. I still haven’t tried it, but after refreshing my knowledge on it, here’s a little overview.
“Freenet” is basically a completely decentralized and anonymous peer-to-peer internet. It has files, websites, hyperlinks, etc. but all content is published and requested truly anonymously; the design of the system puts this above all other issues like delivery speed and latency, so while Freenet is a p2p app, it’s much more effective at disseminating censored information under “evil” governments than, say, getting you “warez”. All Freenet users run a small server (“node”) on the network that helps push data and requests around and holds a cache of data on disk called the “data store”.
How it works: Reaching for an analogy
You can think of the combined data stores of every node as a big pool. As new content is poured in it washes across the pool (preventing the source from being known) and the oldest, least requested content drain outs (there’s no guaranteed permanence of content, but popular stuff sticks around). Each new document gets a unique “key” (kind of a Freenet URL) and is then chopped up intelligently so that pieces can be distributed across many nodes and reassembled later (similar to BitTorrent). This is evidently also done with a bit of crypto magic so that the network can reassemble complete (or at least usable partial) files without all the original pieces.
Requests for keys duplicate into closer nodes, generating pockets of lower pressure (to obscure the original source of the request) that pull content toward an area. In that area, the most popular content is given precedence for available space, so that its delivery is more efficient there.
What’s out there
There’s no way to “search” the content of keys, but there are systems in place to publish keys in various ways, and documents can include keys to “hyperlink” to other documents. You can always publish a key on the web, but neither you nor those who view the key there will be anonymous as within Freenet. There are also kinds of time-based keys that point to different keys depending on the time of the request, so, eg. if you plan to publish a document monthly you can give a subscription key that will always point this month’s edition. What I don’t know is how to keep user EvilGuy from from posting content using the key of GoodGuy’s next edition.. I don’t know really enough about the system to know if this is even possible, but the following shows why you’d know it wasn’t posted by GoodGuy:
Since content lacks a source, how do you trust the info? On the web, SSL certificates allow you to trust that each page you receive from https://example.com/ comes from the same machine at the very least (as for who owns the machine, you have to trust that Thawte or the certificate source made sure they were who they said they were). Anyway, using similar cryptographic techniques, a publisher may sign documents so you can always verify that two documents came from the same user. By supplying good content signed with her crypto tools, she can build trust within Freenet under a psuedonym.
Truly private messaging
While encryption technology like PGP has allowed private message content to be delivered, the delivery system (email, the web, IM) still reveals the source and destination IP address of the messages. This alone could allow an “evil” government track you down or keep an eye on you. If they can get to you, it may not matter if they can read your message or not! Using PGP over Freenet, a government would theoretically not be able to determine the source of a document, or who’s requesting it.
Not designed to be impossibly secure
I’d told my friend that there was no way of knowing what data was in a particular node’s data store. This isn’t quite true. With much energy involved it is possible for a node’s owner to determine if chunks of a particular key are present; the goal of freenet is to make this reasonably difficult as to prevent “sane societies” from prosecuting an owner based on the notion that “he knew what he had”. Also, connecting to other nodes cannot be a truly anonymous task (due to the delivery system of TCP/IP), but at least someone can’t single any user out as a content creator or reader.
Freenet boils down to an all-or-nothing investment in free speech. That is, with no control over what speech you help distribute. You can only limit how much space and bandwidth you provide it, but this will limits your own ability to disseminate content and have requests delivered.
The Wikipedia article on Freenet looks to be a great resource of info that’s not immediately made clear on Freenet’s site. I was wondering how Freenet users can protect themselves in areas where even using it would be illegal. Evidently the next version will allow users to explicitly decide which nodes they connect to (maybe known-in-real-life users) and for the data transferred to somehow not look like Freenet data.