Blocks: LOGO BLOCKS V0.17
A Prototype Distributed Anonymous File Server

Abstract | Important Info | News | Download | Screenshot | Description | Credits


Blocks is an anonymous distributed file transfer system designed for people with permanent 'always on' Internet connections like DSL lines or cable modems. It allows you to anonymously upload files from, and download files to the Blocks server 'network'. Blocks is cross-platform, open-source and free.


Choose one of these servers as your "Blocks Primary Server" to connect to the current testing network: (0.17 only)

Blocks needs your help to grow. Most importantly, we need people to host servers. We are also in need of developers, especially to port Blocks to different platforms. Any other help is appreciated and your comments, criticism and suggestions are most welcome. We can be reached here:


September 20, 2000 - Peter Gunn

V0.17 is out. Here's what's new:

  1. Long filename support (up to 132 chars)
  2. Upload files to remote servers.
  3. Routing tokens are now allocated randomly.

  1. Memory corruption crash bug.
  2. Files proxied into cache were not being readvertised correctly.
  3. Big files were still trampling small caches.

September 7, 2000 - Peter Gunn

V0.16.1 is out. It is mainly a bug fix release:

  1. Fixed slow downloads bug introduced in V0.16
  2. Fixed bug which allowed large files to trample small caches.
  3. Includes patch to allow compilation on Unixware 7. Supplied by
  4. Servers now remember the last 10 server ads and pass the lists to new servers when they connect. This allows servers without listening ports to build up a connection list much faster.
August 28, 2000 - Peter Gunn

V0.16 is out. Please download it now so that you can connect to the 0.16 network, which doesn't accept connections from older versions. Here's the list of changes:

  1. New protocol version message
    • V0.16 will not connect to previous versions of Blocks. This should stop the sort of interoperability problems we saw when moving from V0.14 to V0.15.
  2. Big Files
    • Support for files > 250Mb. New limit should be 2Gb.
    • Files which are larger than 10% of the cache size are not cached when routing. This stops large files from trampling intermediate servers with small caches.
  3. Readvertisements
    • Only non-local files are readvertised (same as V0.15)
    • Only servers with an uptime > 60secs readvertise files.
    • Readvertisements are never routed or broadcast.
    • Latest 512 adverts are immediately readvertised on connection, then one every 15 seconds per connection, for another 4096 ads (over some 17hours or so).
  4. Enhanced PRNG
    • Entropy from DH Keys fed back in much better
    • Fixed PRNG bug (to do with connection management logic)
    • PRNG now explicitly advanced after uploads, downloads, and connections.
  5. Faster Uploading
    • V0.15 had an artificial limit of ~20 blocks/sec for inserting into the cache. This limit has been removed and upload times should be bound by your disk speed.
  6. Builds on Linux
    • Should build clean on most Linux variants, as well as WIN32 and Solaris.
Stuff which didnt make it this time:
  • Resuming download from local cache
  • Automatic download route switching
  • Sticky files
August 9, 2000 - Peter Gunn

V0.15.1 has been released. Please download below. This is another fix release for some major bugs in 0.15:

  • It should now build cleanly on Linux as well as Solaris using gcc2.95 by doing a 'make clean; make depend; make'
  • Major routing and bad route problems fixed.
  • UNIX upload widgets now allows the uploading of files rather than just dropping cores.

This is just a patch, it will happily coexist with V0.15, but should be much more stable.

August 5, 2000 - Erik Moeller

V0.15 had a problem with very long filenames (> 86 chars). Please download the patched version below.

August 4, 2000 - Peter Gunn

V0.15 of Blocks has been released. This version is not backwards-compatible. All beta users, please upgrade.

News in this version:

  1. All whole now multiple uploads capability for bulk uploading.
  2. Add content hash to adverts and header blocks, and display this in the serach window.
  3. Fix timeouts and problems when uploading & downloading at the same time.
  4. Increase the smartness of the 'bad route' logic so that search results are much more accurate.
  5. Change readvertisement logic so that it now readvertises most recent 1024 non-local ads.
  6. Increase netcode efficiency (might reduce CPU, and increase throughput on unlimited connections).
  7. The automatic switching of routes on failed downloads hasnt been implemented in this release.
V0.15 is *not* backwardly compatible with V0.14. Although V0.14 clients may be able to connect and advertise files, the files will be corrupted while downloading. So, we all need to switch to V0.15 at near enough same time.

Remember, V0.15 hasnt been well tested so there is a small possibility we need to roll back to V0.14 if something major is broken that cant be fixed quickly, so let me know if you notice anything odd.

August 4, 2000 - Erik Moeller

I have redesigned the webpage completely. There's more structure and a unique "look and feel" now. These news are currently handwritten, but I will develop a small news engine for this site as soon as I get CGI access.



Blocks in action


What is Blocks?

Blocks is an anonymous distributed file transfer system designed for people with permanent 'always on' Internet connections like DSL lines or cable modems. It allows you to anonymously upload files from, and download files to the Blocks server 'network'.

Blocks differs from other anonymous file transfer utilities in the following ways:

How does Blocks Work?

When you run a Blocks server it finds and connects to a number of other Blocks servers, creating an interconnected 'network' of servers. All Blocks servers have a disk bound cache of data that is used to store data in the form of fixed size binary blocks of 64Kb.

When you 'upload' a file to your blocks server, the file is split into 64Kb blocks and each is inserted into the cache. A 'header' block containing a list of identifiers for all the data blocks, as well as basic information such as the filename and size, is also inserted into the cache, and the file is advertised to the blocks network. The server also uses the cache to store data as it is routed and downloaded so eventually your uploaded file data will be overwritten.

Your blocks server is always listening for file advertisements from the blocks network that it keeps a local list of. The blocks network offers no distributed search capability, so when you do a file search you are only searching the local list built up since you started your server. So don't expect a huge list of files if you've only been running your server for a couple of hours.

Once you choose a file to 'download' the server requests the 'header' block and all the data blocks sequentially from the blocks network then reconstructs the file locally once all the blocks have been received.

So what anonymity features does it have?

When you start your blocks server it connects to the blocks network and broadcasts your IP address as being that of a server looking for connections. This is the only time your IP is advertised to the network, and it is never associated with any other messages.

All other messages use a simple routing mechanism using an alphabetic list of connection identifiers. Only the small number of servers you are immediately adjacent to can associate your IP with file advertisements, and even they cannot tell if you uploaded the file or it simply migrated automatically from another server.

All network traffic is encrypted using a 128Bit stream cipher using a key derived from a 512bit Diffie-Hellman key exchange.

All data in the disk bound cache is encrypted using a 128bit block cipher using a key derived from a strong Pseudo Random Number Generator (entropy provided by user). The cache is completely destroyed and an empty one recreated each time the server is started or stopped, and the key is different each time. No information about the origin of the data blocks is stored in the cache.

The blocks Protocol

A short description of How blocks Works

System Requirements?

You need a 128+K permanent internet connection (ADSL, cable, or better).
3Mb RAM (+1Mb per Gb of cache).
1Gb of disk space (of the cache).

How Do I Run It?

To run your own blocks network, run the binary, clear the 'Primary Server' field, disable the 'Random Port' check box, and hit online. Tell your friends the hostname:port of your server so they can connect.

To connect to an existing blocks network, run the binary, fill in the hostname:port of the blocks network you want to connect to in the 'Primary Server' field, and hit online.

NOTE: If you want to run multiple instances of blocks make sure to use different copies of the binary which are in different directories, and that you start each from within their own directory. This is because blocks will create a cache directory in the directory it is started from (or the binary is in on WIN32) and you really dont want multiple blocks servers using the same cache structure.

Optional comand line arguements :-

-server <host:port> Sets the Primary Server value.
-port <number> Sets the listening port
-cache <1-64> Sets the cache size in Gb
-throttle <number> Sets the bandwidth throttle (max bytes per sec, >=16384)
-dont_route_ads Stop the server routing file adverts
-online Starts the server

How Do I Compile It?

First get FLTK from and compile that. My blocks source
has a structure like this...


so you might want to move/rename the fltk-1.0.9 directory to be fltk/ so you
dont have to change the fltk entries in the Makefiles.


cd blocks
make clean; make depend; make


Use Visual C++ load up the workspace... fix the library paths for fltk and hit build.

Volunteers wanting to port to other systems should get in touch.


Anyone with a dedicated internet connection who is willing to run a public test
server, please get in contact! You can set it so that it acts only as a name server
and never serves data.

Please send any comments to
or join the mailing list


Feel like you should be on this list but aren't? Mail Erik.