One of the problems of
distributed non-anonymous
networks like
Gnutella is that you give your
IP address away once you upload or download a file. It would be possible to put
proxy or
SOCKS server(s)
in between, but who would want to give their bandwidth away so that you can download the new
Metallica MP3? Especially since they would run out of bandwidth quickly.
I think a distributed network where users can exchange bandwidth for proxying would be a viable
solution.
It would work like this: You have a small client program that works in the background. You configure it as the
proxy server ("localhost") in the applications you want to anonymize. Upon start, it connects to a distributed
Gnutella-like network. You can choose a certain amount of bandwidth to share (which you can choose only in
blocks of 16, 32, 64, 128, 256, 512 ... kbps). You could set how much bandwidth you would like to use in return
(usually the same amount, but possibly 0 as well if you're just idling anyway).
Now, the program would, within regular time intervals, search for users who share a definable amount of
bandwidth. If it finds one, it checks how much they want. If it is smaller or equal than what we're offering, it
connects to them. If we've paid less than we're offering, our offered amount of bandwidth is reduced by the
amount we paid. If we've paid exactly the same as we're offering, we disconnect from the distributed network until
our connection to the proxy is lost.
All data is then proxied through this "servant", thereby anonymizing the IP address. In turn, all their data is proxied
through us using the amount of bandwidth that we have offered.
Possible additions:
1) Chaining several proxies. You could make a request for several blocks of identical bandwidth and chain the
resulting proxies together, thereby increasing anonymity.
2) The proxy would "see" all the files that go through it. Since that is the case anyway, it might as well cache
them within a definable amount of disk size. Users would be able to view the content of their cache and maybe
find files of interest to them. Of course that could be seen as a violation of privacy, but the alternative would be
security through obscurity. Encryption seems to be no option if we're proxying unencrypted content (WWW for
example). Otherwise, it should be optional.
Possible problems:
1) High-Low exchanges. I request 16 kbps and offer 512 kbps. Someone else offers 512 kbps and requests 512
kbps. I connect to them and now they only offer 496 kbps. This, however, is a "bad number": It cannot be
searched for. Possible solution: Deny exchanges that lead to bad numbers.
2) Users lying about their offered or requested speed. In both cases, the average bandwidth used would have to
checked by the other user's client, and react accordingly (disconnect/scale down).