[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Shim6 proxies



Iljitsch van Beijnum wrote:

Unless I'm mistaken, if you go to an HTTPS website, what happens is that your browser gets a certificate from the server that proves that the holder of the certificate has a certain identity, such as www.example.com. The browser checks whether the server has the private key for the certificate by sending it a challenge and checks if the identity in question matches the URL, which, I imagine, requires some DNS lookups.
shim6 security could work much the same way by tying a certificate to a 
ULID, either with or without the intermediate step of an FQDN. Such a 
certificate allows a host to prove that it holds a certain identity, 
irrespective of the address it's actually using. Once you know who 
you're talking with you can mostly believe them when they say what their 
locators are, you just need to send a packet to those locators to make 
sure the same host is present there to avoid the possibility of someone 
dumping shim6 traffic on an unrelated third party.
As for the PKI, yes, you need some kind of infrastructure, but it's 
already there so I don't see the problem, especially for enterprises and 
content hosters. Most home users don't have a certificate, but they can 
still use HBA. (Note that in the above scenario only one side (usually 
the server) needs a certificate.)
I can see this working, but it can't securely recover a context after a 
failure failure! This is because there is no trusted relationship 
between the certificate for the server and the alternate locators of the 
server. (And I have only thought about end-to-end use of this - not 
proxy use - so I don't know if that would add some further complications.)
The host (which doesn't have a cert) uses HBA. Looks up www.example.com 
and gets some IP addresses. The shim6 layer on the host is told the FQDN 
for the peer.
During the shim6 context establishment TLS is used, which verifies the 
server's cert. If the server needs to use a different locator it can use 
TLS to tell the client the new locator; the shim6 layer needs to verify 
that the same cert is used for the locator update as was used for the 
context establishment.
But that happens if the client looses the context and the server needs 
to send it some data? One would have to fall back on essentially return 
routability, since the client's shim doesn't remember the FQDN of the 
server any more (perhaps the application remembers the FQDN but that 
doesn't help unless we redo all the socket APIs from scratch).
The worst case is when the client has lost the context and the server 
needs to contact the client but using a locator that is different than 
its ULID; in this case even return routability can't be used.
Thus it would allow the server to say "my FQDN is www.foo.com and this 
is my cert, and even though I'm using locator X, I also have ULID=Y - 
trust me".
You could argue that the bulk of these problems occur when the "server" 
needs to contact the "client" and that this case isn't important. But if 
we'd want to add this, I think "server" is really "host that has a cert" 
thus we'd want this security scheme to work independently of the 
application layer roles (server vs. client) of the host that has the 
certificate.
So I don't see how the certificate helps, unless there is a global PKI 
which can assertively state the IP addresses of the holder of the 
certificate (and have this somehow be updated when the site/host 
renumbers). Without this, all we seem to get is something analogous to 
anonymous diffie-hellman, and that doesn't help prevent time-shifted 
redirection attacks.
I think one can try to do things using DNS forward+reverse lookups for 
verification of relationships between ULIDs and locators. The old NOID 
draft explored this space. But my personal conclusion was that such an 
approach would be expensive, since to be reasonably secure, the hosts 
would have to do forward+reverse lookup (or reverse+forward) even before 
establishing the shim context. There was also the issue that NOID 
assumed that all communicating parties had correct forward+reverse DNS 
entries.
But it might make sense to look at the possibility of using DNS 
verification for one end and HBA for the other.
   Erik