[tahoe-lafs-trac-stream] [tahoe-lafs] #1010: use only 127.0.0.1 as local address
tahoe-lafs
trac at tahoe-lafs.org
Thu Aug 11 12:06:03 PDT 2011
#1010: use only 127.0.0.1 as local address
-------------------------+-------------------------------------------------
Reporter: duck | Owner: warner
Type: | Status: new
enhancement | Milestone: 1.9.0
Priority: minor | Version: 1.6.1
Component: code- | Keywords: privacy anonymity docs anti-
network | censorship
Resolution: |
Launchpad Bug: |
-------------------------+-------------------------------------------------
Changes (by zooko):
* keywords: privacy anonymity docs anti-censorship review-needed =>
privacy anonymity docs anti-censorship
Comment:
Okay, I've started reading the docs patch from
attachment:cleanup-1010.dpatch:
It helps to allay my confusion because it explicitly says "Note that this
is not the same as omitting ``tub.location``.". However, it doesn't help
all the way: what does it mean if you omit {{{tub.location}}}? (The
answer, I believe is, that it discovers your local IP addresses and
advertises them.) Does it mean anything if you say
{{{tub.location=None}}}, or is that an error?
I think there are four different use cases here, three of which are
currently supported, and our docs should be more explicit about
enumerating them.
1. Discover your local IP addresses and announce them.
2. Don't announce any routable IP address.
3. Announce a configured IP address instead of the dynamically discovered
one(s).
4. [not supported yet] Announce a configured IP address in addition to the
dynamically discovered one(s).
Also: is there a valid distinction between
* 2.a. Don't announce any routable IP address, but announce unrouteable
(LAN-scoped) IP addresses. Then nodes from out on the Internet cannot open
connection to you, but nodes on your LAN can. Also, people on your LAN can
use this to confirm your identity as a certain Tahoe-LAFS node, even if
nodes on the Internet can't. (Is this true? If you've for example,
configured all of your outgoing connections to go through a Tor or I2P
proxy, but you used this setting, then nodes within your LAN can open a
direct TCP connection to you, do foolscap negotiation with you, and thus
learn the mapping between your LAN-internal IP address and your foolscap
node ID.)
* 2.b. Don't announce any IP address except 127.0.0.1, meaning that nodes
off your own host can't open TCP connections to you but people on your own
host can. Again, does this mean you're vulnerable to an identity-revealing
attack, even if you use Tor, if the attacker can open TCP connections from
your own host? Is this a valid attack? It seems like it might be. What if
there is some sort of TCP proxy running on your host so that, even though
they can't execute arbitrary code on your host, they can open a TCP
connection which looks to you as though it comes from your own host?
* 2.c. Don't announce any IP address.
Now this patch currently lets the user express option 2 by setting
{{{tub.location=}}}, option 1 by setting no {{{tub.location}}}, and option
3 by setting {{{tub.location=207.7.145.194}}}. I'm -1 on this design:
* I find it confusing.
* The docs here mix this issue with issue #1086, by saying that
advertising an unrouteable IP puts you in "client only mode". In my
opinion (and I recognize that gdt, at least, disagrees), whether your
tahoe node initiates or accepts TCP connections should be independent of
whether it acts a storage server, storage client, or both. (Or introducer
or helper.)
* I'm not sure if it is sufficiently safe to protect the identities (by
which I mean IP-address-to-node-ID mappings) of Tor or I2P users. Perhaps
we need to support option 2.c., above, instead.
* I would prefer a design with an explicit {{{node.anonymous = True}}}, as
we discussed above.
* I would also prefer, I think, a design with option 2 being implemented
by setting {{{tub.location=127.0.0.1}}}.
We discussed one of those alternative designs above, and we said maybe we
can changed out minds later, but this may be a mistake because
* configuration file semantics are major backward-compatibility issues.
Do we have a plan for how to provide backwards compatibility if we were to
change to a different design in a future release? I guess we might need to
have a phase where the {{{tahoe}}} node understood both old and new
configuration formats, stopped with a fatal error if they were
inconsistent, and emitted a warning if the old one existed at all. Then
eventually we might go through another cycle like the one we just finished
with #1385 where we stop with a fatal error if the old style is present.
(By the way, #1385 turned out to be a lot more painful of a patch to
integrate and debug than I had anticipated.)
I'm willing to listen to counter-arguments, but at the moment I'm -1 on
this design. I haven't finished reviewing the actual patches in
attachment:cleanup-1010.dpatch, but I'm going to stop here and focus on
#393 instead. I'm sorry I didn't think about the backward-compatibility
issues earlier and that I didn't think about the specific configuration
format earlier so I would realize I was uncomfortable with it before this
late stage. (Also it is too bad I didn't think of the potential identity-
revealing weakness earlier so we could have time to think it through
before this late stage.)
--
Ticket URL: <http://tahoe-lafs.org/trac/tahoe-lafs/ticket/1010#comment:29>
tahoe-lafs <http://tahoe-lafs.org>
secure decentralized storage
More information about the tahoe-lafs-trac-stream
mailing list