Here is how to make unobtanium routing resistant against specialization
probing attacks:

With each (data or insert) request a node also sends the closest key for that it
knows that the recieving node declared itself the data source of. In classic
routing this key would be the routing table entry that made it route the request
to that particular node. However we choose the node according to the NGR algorithm
first and lookup the closest key afterwards.

The other node verifies that it really is the data source of this attached key. Then
it calculates the difference between this key and the requested key. Higher distance
of keys means lower priority for the request. The requests with lower priority can
either be queued or rejected. I prefer rejecting with a query reject message that
declares overload as the reason. This allows the requesting node to forecast, that
other queries with a higher distance will be rejected, too. In these cases it will skip
the overloaded node.

Unfortunately this modification introduces quite some overhead:
The attached key in the requests requires bandwidth. And the routing table for keeping
the data sources that one otherwise would not need in NGR requires memory.

Nodes may disagree on which keys they are data source of, because the data source node
has dropped the key or some other node declared it as the data source. The straight
forward solution is to sign the key, when the node resets the data source to
itself. But the signatures and public key crypto then introduce even more overhead.

New nodes do not know any keys of other nodes yet and may get locked out of a busy
network. This can be solved by configuring the nodes that are published as seed nodes
not to reset the data source to themselfs. New nodes will rarely contact them anymore
after they have learned about other nodes.

--
 Thomas Leske

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

Reply via email to