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
