For several reasons I think we need to discuss the dubious security
assumption of "it's hard to probe your peers' datastores", and the
performance tradeoffs that go with it ...

Why is this important now?
- Darknet bloom filters. Okay, it's darknet; there's more trust; so
that's okay then? Maybe.
- Opennet bloom filters (for long-lived peers). We'll need to identify
long-lived peers anyway for tunnels and security (MAST countermeasures).
So it'd be good to do bloom filter sharing with them.
- Opportunistic data exchange (possibly with CBR) (on both darknet and
opennet).
- Broadcast probes at low HTL. Same effect as bloom filter sharing but
work with low uptime nodes. Can be made cheap; we don't have to wait for
them before forwarding, and we because latency isn't a big deal we can
aggregate them and make them cheap. (We might want to wait for them,
with timeouts, before finishing with DNF) Would probably have to be
non-forwardable, to cut costs ... so it's a true probe. But then the
security model is the same for bloom filter sharing - except for the
bandwidth cost, which makes probing bloom filters a bit more costly...

What is the model?
- Censorship: We want it to be hard for bad guys to identify nodes
containing a specific key and eliminate them. Classically, fetching a
key tells you where it's stored (the data source, used for path
folding), but in fetching it you have propagated it. The problem with
this theory is you've only propagated it to *caches*, not stores.
-- Does this mean we need to give more protection to the store than the
cache? E.g. only do bloom filter sharing for stores, only read store for
broadcast probes?
-- Possibly we could avoid path folding if we served it from the store?
However this might make path folding less effective...
- Plausible deniability: The bad guys request a key from you. You return
it. It might be in your store or it might not be; you might have
forwarded the request, and the attacker can't tell. This is IMHO
legalistic bull****. It's easy to tell with a timing attack (and
whatever randomisation we add won't make it much harder, as long as you
are fetching multiple keys). Also, RejectedOverload{local=false} implies
it came from downstream, though probing would use minimal HTL so might
not see that... (But at least *that* is fixable; it is planned to
generate RejectedOverload{local=false} locally when we are over some
fraction of our capacity, as part of load management reforms).

The security issues are doubtful IMHO. So it really comes down to
censorship attacks... The problem with censorship attacks is inserts
store the key on ~ 3 nodes; it's cached on lots of nodes, but the CHK
cache turnover is very high; if you take out those 3 nodes, the data
goes away very quickly. So the classic attack of "fetch it and kill the
data source" may actually work - if you care about blocking single keys,
or can kill lots of nodes (e.g. all elements of a splitfile middle layer
etc).

Do we need even more "put it back where it should be" mechanisms? E.g.
if a sink node finds the data from a store probe it should store it?
Would this help with censorship attacks?

The average store turnover is unknown but guesswork suggests it's around
2 weeks ...

Possibly we need to know the average turnover times of the store, cache,
for SSKs and CHKs. Do we have a probe for that?
(Might be a good reason for people to insert as SSK!)

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Devl mailing list
Devl@freenetproject.org
https://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl

Reply via email to