As promised, archetectural notes:

Gatekeeper:

Provides a mechanism for freenet to fetch content from other protocols in a 
distributed, anonymous manner and insert it into freenet. 

Architectural Notes:

The gatekeeper is a framework for allowing freenet to get data from other protocols 
and insert it when it can't find that data in freenet. It does this in a distributed 
anonymous manner. 

When a query runs out of hops to live, or when a DataPending request gets a Data Not 
Found message, freenet then asks the GateKeeper for the data. The GateKeeper checks if 
the request is in the insertion keyspace of any of its gateways, and if it is, asks 
that gateway to get the data. Once the data is returned from the gateway, it is 
inserted into freenet with a 1 day DBR. 

In order for gateways to have enough information to fetch data from another protocol, 
an extension has been made to the freenet protocol. A "GatewayHint" has been added to 
requests which contains the original freenet URI of the request. Unfortunatly, this 
hint makes freenet a bit more vulnerable to traffic analysis by a hostile node. A 
hostile node can see what was requested just by looking at the hint. Without the hint, 
the hostile node would have to do the extra work of actually looking up the data 
requested to see what it is. Because of this, whether or not the gateway hint is added 
to a request is configurable. If you don't want the hint added, set the addGatewayHint 
parameter to false. This also means that your requests will never proxy out to another 
protocol. 

Freenet documents are assumed to be static. This is not true of other protocols. For 
this reason, the GateKeeper inserts with a one day DBR. Functionally, this is 
equivilant to a 1 day cache of the other protocol. Because of the re-direct, this 
depends upon freenet's routing to be working well. The insert takes place several hops 
away from where the request originated and returns the re-direct. If routing is not 
working, the insert could put the actual data where it won't be found by the original 
requester when it follows the redirect. Thus, paradoxically, decreasing hops to live 
actually increases the reliability of the proxy gateway mechanism. 

Implimentation notes:

To proxy out to urls that have question marks in them, as many Wiki systems to, 
question marks and colons in urls are escaped. There is no support of the post. 

Gateway Developer Notes:

So, you're feeling ambitious and would like to create a gateway for freenet to slurp 
data from your favourite protocol in a distributed anonymous way. In order to create a 
gateway out to another protocol such as news or gnutella, what you have to do is to 
create a class that implements freenet.node.gatekeeper.Gateway. Your class must 
understands your protocal well enough to provide a freenet.node.gatekeeper.TypedBucket 
that gets data from your protocol. 

If you are looking for an example, freenet.node.gatekeeper.url.UrlGateway is a gateway 
to the protocols that java natively supports with a URL. 

Once you have implimented your gateway, add your gateway class to the list of gateway 
classes in the gatekeeper.gateways option. The GateKeeper will use reflection to 
instantiate your class and add it to its internal array of gateways. 

User Documentation:

Freenet can function as a distributed, anonymous, caching proxy/gateway out to other 
protocols. How your node participates as a gateway to other protocols is up to you. 
The following options control the behavior of all gateways. Note that there are 
additional options for individual gateways. 

addGatewayHint:

Controls whether your node generates queries that may gateway out to other protocols. 

gatekeeper.gateways :

A list of gateways that your node supports. Currently there is only a "url" gateway 
that proxies out to http and ftp. If you don't want your freenet node to ever proxy 
out to other protocols in response to requests, set this to an empty string. 

gatekeeper.insertHTL :

The hops to that the GateKeeper uses when it inserts data fetched from some gateway. 


Url gateway:

An example gateway that allows freenet to function as a caching, distributed, 
anonymous gateway to protocols that java can natively address as a URL. This lets 
freenet proxy out to http, https, and ftp. 

User Documentation:

The URL gateway allows freenet to function as a distributed, anonymous, caching proxy 
to the web, not entirely unlike peekabooty. By default, http is inserted at 
freenet:KSK@http/, https is inserted at KSK@https/, and ftp is inserted at 
freenet:KSK@ftp. Thus to get at http://www.foo.org/index.html, you would request 
KSK@http/www.foo.org/index.html. 

Because the UrlGateway inserts KSKs, it is easy to insert bogus material. You can't 
trust that what you fetch from freenet was pulled from the net rather than inserted 
manually by someone with a mischeivous streak. 

Authoritative mirrors of particular portions of the web may be set up by groups of 
people by using SSK keys. Let's walk through an example of how to do this. 

Suppose a group of people, are irritated because some prankster has inserted the 
complete works of William Shakespeare where the UrlGateway would normal put their 
favourite website, http://www.phreenet.org. The first thing these people have to do is 
to somehow distribute amongst themselves the private key for the SSK where they will 
be inserting the website. 

Once they have the private key, each person modifies their 
gatekeeper.urlGateway.insertionPoints and gatekeeper.urlGateway.proxyPoints options so 
their gateways will insert http://www.phreenet.org under the SSK, like this: 

gatekeeper.urlGateway.insertionPoints=SSK@SOMEPRIVATEKEY/phreenet/,KSK@http/,freenet:KSK@https/,freenet:KSK@ftp
 

gatekeeper.urlGateway.proxyPoints=http://www.phreenet.org/,http://,https://,ftp:// 

And that's all there is too it, with the following caveats: 

Since the private key sits in the freenet.conf file, this private key is vulnerable. 
If you are also inserting controverisal material, use a different private key. 
This method of mirroring is not as anonymous as just inserting data into freenet. 
It takes a number of freenet nodes to mirror a site this way reliably. The number of 
nodes is related to the chance of a query getting to one of the nodes during a random 
walk. This is related to the size of freenet itself. For papers on finding replicated 
items with a random walk in a network, see: 
http://parapet.ee.princeton.edu/~sigm2002/papers/p258-lv.pdf 

Storing Data Permanently:

Periodically, people complain about how freenet can't store data permanently. They 
would like their node to not forget particular things. Of course, there are two 
problems with a node that doesn't forget particular keys. First of all, it isn't very 
anonymous if your node is the "authoratiative node" for a particular key. Secondly, 
the freenet network will forget the route to the key even if your node does not forget 
the key itself. 

If you don't believe this, here is your chance to experiment and learn the hard way. 
Use the UriGateway and file: urls to proxy out to files on your hard-drive. You'll 
soon discover that while you can always get to them from your freenet node, the same 
will not be true of other nodes. 




Get your free encrypted email at https://www.hushmail.com

_______________________________________________
devl mailing list
[EMAIL PROTECTED]
http://hawk.freenetproject.org/cgi-bin/mailman/listinfo/devl

Reply via email to