Anton Oussik :: Old GNU Thing

Wed, 15 Aug 2007

Freenet

Recently I have tried using Freenet, an anonymising encrypting p2p network.

Freenet entry point

Freenet is a network that has been in development for a number of years, but is still not very complete, despite having most of its core functionality implemented and working. In that respect the project is similar to Hurd. Freenet has one full-time paid developer working for the project, which means it is in constant development (and hence constant improvement?). Having not used real world anonymising p2p networks before this was a learning experience for me.

To get started with Freenet I needed to download the installer. The installer is a Java program that downloads the latest versions of various things that come with Freenet, decompresses everything into the place specified, and starts everything up. It requires Sun Java 1.5+ to work.

When configuring Freenet the default store size is set to 1GB. This is a very conservative value, since it pretty much defines how much you will be sharing with others or (when new data comes along old data gets discarded). Hard drive space is cheap, so setting the value higher, like 10GB or even 20GB is a good boost to the network. Of course, since the network is encrypted and anonymising you have no idea what is being shared in the 10GB or 20GB. However the algorithm used by Freenet means you will end up with the most commonly requested information, and over time your node will also specialise on content that is close to each other in the keyspace.

Another important configuration option is darknet vs. opennet. Darknet is the default setting, and it is the most secure setting. When configured to use darknet, the node will only connect to trusted peers, forming a F2F network. Opennet on the other hand is less secure, as it allows the node to connect to untrusted nodes, which can potentially surround you and hence work out what you transmit. Freenet also provides you with a third option: darknet where you go on IRC and ask people to be your friend. This is a great options since it combines the inconvenience of having no friends with inconvenience of not knowing the few friends you find. You also get the added disadvantage of revealing your IP address to the whole IRC channel, so now everyone who cares knows who you are and who your friends are. This is exactly what I did, and before long I had my 5 references, out of which 3 managed to connect.

Freenet friends list

Once connected to Freenet I could start browsing the Freesites. Freesites are very similar to normal websites, except they exist as resources on Freenet, and link to each other by resource addresses. Since all the data on Freenet is static, currently it is impossible to make dynamic pages, and so there are no search engines or any interactive sites, just static content. There is one "entry page", which indexes other pages, and by browsing it a person can explore the linked areas of Freenet. I suspect the majority of pages on Freenet are unlinked and are not reachable unless you know the resource address, which is a long random string, so hiding information on Freenet is very easy.

So, my first impression of Freenet was "web of 20 years ago". There is basic html on websites, it is slow, small, one page indexes all other pages, Usenet is still alive, it is completely cut off from the rest of the world, only used by geeks and social outcasts, and is generally a group of masochists trying to pass messages to each other making it as difficult for themselves as they can manage.

Content-wise there did not seem to be very much to browse on the indexed Freeweb. The index contained some religious sites, links to sites that claimed to contain pornography, both legal and morally dubious, guides to terrorism, and some Flogs (blogs on Freenet). It took me all of 15 minutes to browse through the entirety of Freeweb avoiding links to anything I did not have any intention of seeing. This is in part due to all pages predating version 1010 of Freenet not being accessible any more, due to weak encryption they use.

Next I decided to create my own Freesite. There is a tool for Freenet called jSite made just for that purpose. Uploading a site to Freenet turned out as easy as putting together a small html page, together with any images and CSS files it wanted to use, adding it to a jSite project, and clicking "Upload". Few seconds later it was up and accessible from Firefox. Considering how easy it is to put up websites I am surprised there are so few up there.

Freenet jSite tool

Another program that works with Freenet is Frost. Frost is a newsgroups-like program, with message boards and discussions on a range of topics. People can also post files to message boards, which can be searched and downloaded using a built-in download manager. I found the messages to propagate rather slowly, but that may be more to do with my slowish Internet connection.

Frost program for Freenet

The range of Frost boards in use reflects the wide user base of Freenet. There are boards for a wide range of dubious topics, from assassination boards to several boards that claim to specialise in discussion and distribution of illegal images of child abuse. Side by side there are boards for animal rights activists and boards claiming to contain animal pornography. Here you will also find your usual boards dealing with more traditional topics such as politics, movies, music, and computer cracking.

Freenet boards list

Unfortunately Freenet makes it very hard to prevent spam, and spammers use that to spam all the public message boards. Frost allows users to rate different identities, ignoring messages from "bad" identities, but that does not work, as spammers can just use a new identity for each message. Since it is impossible (or very hard) to track down the source of spam, or to tell the difference between spam and legit newbies, there is currently no good solution to the problem. The spam itself does not offer anything or advertise anything. It is simply an AI trying to waste time and annoy users away from Freenet. This problem will definitely need to be addressed before they make a 1.0 release.

Considering the algorithm used to transmit information the throughput is surprisingly good. Of course it does not come close to direct download networks, but then performance and ease of use are not design goals of the project. Some sort of event subscription mechanism would be beneficial on the network, as it would allow things like dynamic sites and live chat to be implemented.

Overall Freenet seems like a good tool if you want to transmit information anonymously and securely, not caring much about performance. Friends who know each other can form their own darknets, or if they want they can merely create their own keyed message boards, and keep their conversations secret and private. UDP NAT traversal seems to be working well too, and I have noticed next to no disruption to any other Internet activities; my ping time to google went up from 32ms to 45ms whilst running a node. As long as you are using Sun Java VM the node stays up very well, but it may be a good idea to adjust the size of memory available to the VM to 512MB.