Since the subject of searching has come up again, I thought I'd throw out this 
idea that was discussed on #freenet then promptly forgotten about.  Briefly, 
it is a way of associating multiple documents to a key, so that multiple 
independent people can insert documents that can be retrieved as a group.  In 
its simplest form, this could be used with redirects for keyword searching.

A new keytype is used, which is routed by hash(guess), where guess is an 
inserter-selected value, concatenated with the CHK style hash of the 
document's content.  The value guess is included in the storables.

This provides tamperproof, plausibly deniable (encrypted end-to-end; 
determining what keyword a stored search entry refers to involves a dictionary 
attack against the routing key) exact string searching, and may have other 
uses as a one-to-many key-to-document system.

To select the 'inserter-selected value', the inserting client tries values 
until it finds one for which the routing key is sufficiently close (in the 
routing-table sense) to the target value, hash(keyword).  This creates a 
hash-cash effect, where the more CPU time invested, the higher the rank of the 
otherwise identical matches.  This reduces the effectiveness of flooding 
attacks, since a flooder would need many, many times the amount of CPU power a 
non-abusive user would need.

On the request side, the request would be routed by hash(keyword), and would 
need to collect from each node along the routing path, either every key (of 
this type) within a certain tolerance value of the target key, or the closest 
N keys to the target key.  Selecting the tolerance value would be probably be 
problematic, so I'd suggest the latter method.

The key is resistant to tampering; nodes need to check that the contents have 
not been modified (vs. the CHK in the guess value), and that the guess value 
hashes to the routing key.

The encryption key for the contents is a hash of the keyword (not the same 
hash 
function as used for routing, of course).

This would not solve all the problems associated with 'searching' for data in 
the network, but I think it's at least useful and I'm not aware of any fatal 
flaws.

Is this feasible?  Is there an attack or other problem with this I haven't 
noticed?

--
Benjamin Coates


_______________________________________________
Devl mailing list
Devl at freenetproject.org
http://lists.freenetproject.org/mailman/listinfo/devl

Reply via email to