|
ABSTRACT
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.
IMPORTANT INFO Choose one of these servers as your "Blocks Primary Server" to connect to the current testing network:
mspencer.net:8017 (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:
- Blocks Mailing List
- EFNet IRC: #blocks
NEWS
September 20, 2000 - Peter Gunn V0.17 is out. Here's what's new:
Fixes:
- Long filename support (up to 132 chars)
- Upload files to remote servers.
- Routing tokens are now allocated randomly.
- Memory corruption crash bug.
- Files proxied into cache were not being readvertised correctly.
- Big files were still trampling small caches.
September 7, 2000 - Peter Gunn V0.16.1 is out. It is mainly a bug fix release:
- Fixed slow downloads bug introduced in V0.16
- Fixed bug which allowed large files to trample small caches.
- Includes patch to allow compilation on Unixware 7. Supplied by rr@sco.com
- 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:
Stuff which didnt make it this time:
- 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.
- 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.
- 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).
- 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.
- 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.
- Builds on Linux
- Should build clean on most Linux variants, as well as WIN32 and Solaris.
- 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:
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.
- All whole now multiple uploads capability for bulk uploading.
- Add content hash to adverts and header blocks, and display this in the serach window.
- Fix timeouts and problems when uploading & downloading at the same time.
- Increase the smartness of the 'bad route' logic so that search results are much more accurate.
- Change readvertisement logic so that it now readvertises most recent 1024 non-local ads.
- Increase netcode efficiency (might reduce CPU, and increase throughput on unlimited connections).
- The automatic switching of routes on failed downloads hasnt been implemented in this release.
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.
DOWNLOAD
- V0.17 WIN32 binary (309 KB)
- V0.17 zipped crossplatform source code (76 KB)
- V0.17 Linux binary (287 KB)
- V0.17 Solaris binary (426 KB)
SCREENSHOT
DESCRIPTION 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:
- All 'uploaded' files are split into small 64Kb blocks.
- 'File advertisements' are broadcast through out the network. Your Blocks application needs to be running to see them. When you do a 'search' you are actually searching the local list maintained by your Blocks application, searches are never broadcast.
- The data blocks are routed from server to server rather than from point to point, with content being replicated through out the 'network'. IP addresses are not associated with uploads or downloads in any way.
- Each Blocks application acts as a potential client, server, and caching proxy for data blocks.
- Blocks uses a large disk bound cache (1-64Gb) that is protected by a 128bit block cipher using a random key based on a strong Pseudo Random Number Generator (entropy provided by user), and the cache is deleted and recreated each time the Blocks server is stopped or started. Therefore, even after a crash or abnormal termination, the disk cache cannot be used to ascertain what data has been downloaded or was being served.
- All network connections are protected by a 128bit stream cipher using a session key created from a 512bit Diffie-Hellman key exchange. So, network logs cannot be used to identify what network passed through the system.
- You can easily set up your own separate Blocks network or join a public one. You can even participate in a public Blocks network when you are behind a firewall that stops incoming connections.
- Blocks uses very little resources so you can use your computer for other things while you are running your Blocks server. Blocks uses ~2Mb+(1Mb per 4Gb of cache) of memory and a tiny amount of CPU. You can configure how much of your bandwidth you want Blocks to use and even play Quake or Tribes online and still be running your Blocks server (128Kb/sec minimum is required).
- Blocks is completely public domain. There are no licensing restrictions on the code or the binaries... obviously there is no warranty either :-)
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 WorksSystem 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 serverHow Do I Compile It?
First get FLTK from http://www.fltk.org and compile that. My blocks source
has a structure like this...
fltk/ blocks/ blockd/ blockgui/ libblocks/ libsock/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.Linux/Solaris:
cd blocks
make clean; make depend; make
WIN32:
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.
Feedback?
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 petergunn@hotmail.com
or join the mailing list blocks-development@lists.sourceforge.net
CREDITS
- Peter: the boss ;-). initial concept, development
- Michael (ICQ #1276988): test server
- Luke: test server
- Benjamin: Linux binaries, kripto.org, first blocks logo
- Erik: web page maintenance, second (current) blocks logo
- Paul: comments and suggestions
Feel like you should be on this list but aren't? Mail Erik.