DRKey usage #22
Replies: 2 comments 4 replies
-
Thank you for the detailed description of the problem and the possible solutions. I think it is very important to define clear use cases for LF, derive the requirements from them, and then further design the system accordingly. I have a few questions and comments. Terminology
I assume that you are using the same notation as in the SCION DRKey documentation. In particular, the term on the left identifies the key issuer (the fast side in the derivation), whereas the right term identifies the key subject (the slow side in the derivation). Is that right? What is the meaning of HOST'? Use Case
In your setup, LF provides protection for client-server communications, whereas the client and server are clearly separated. I am curious about your thoughts on the placement of LF in the network (close to the server, close to the border router, etc.). Do you consider LF as a network function that provides protection for the whole network of an AS? Or do you consider LF as a network function that provides protection for a small set of servers within an AS? The Issue
LF2 uses the HostS-HostC key (and not HostC-HostS) to authenticate to the forwarded client's request. Hence, LF1 can efficiently derive the key to authenticate the request efficiently. The issue is that LF1 cannot efficiently derive the key to authenticate the response. Or do I misunderstand something here? Solution: 1DITO as for the issue (it seems to be the wrong way around). Depending on the use case, a non-blocking LF implementation might be sufficient. In this case, LF would not buffer outgoing packets if the required key is not in the cache. Instead, LF would simply forward the packets and fetch the key from the control service in expectation of more packets that require the same key. On the receiving side, LF would forward the packet without an authenticator on a best-effort basis. In case of an attack, LF would eventually obtain the key from the control service for the current traffic. Solution: 2Summary: Only use the level 3 key from the responder side (HostS-HostC) to authenticate the traffic. This solution assumes a clearly asymmetric client-server setup, where only the server side needs to authenticate arbitrary traffic efficiently without keeping state. The client side can keep a state of active connections and can authenticate traffic with cached keys. I think we should clearly think about the implications of using the same keys for requests and responses. Alternatively to the modes, LF could also handle packets differently depending on the direction and some information available in the packet:
Solution: 2.bSummary: Use a second LF instance on the server side to authenticate the server's requests. I do not really like the idea of having two LF instances on the server side. This setup requires that traffic from the client C is routed through LF1, whereas traffic from the server S2 is routed through LF3, which might be more difficult in reality than expected. I think it is essential to keep the setup as simple as possible. Instead of having two LF instances, the server could add some indicators to the packets to differentiate between requests or responses. Setup 3: Applications that already use SPAOI think it is essential to consider the case where applications already use SPAO. In this case, LF does not need to buffer packets while waiting for the key from the control service, which I consider a significant advantage. However, it is not clear how LF would obtain the key for the authentication of the response (if this is actually something we are concerned with). Here are some ideas:
|
Beta Was this translation helpful? Give feedback.
-
Thank you for your comments. Terminology
Yes I tried to use the same notation as in the SCION DRKey documentation.
HOST' should just be some other host not equal to HOST. I just wanted to give it another name to differentiate it from HOST, since I also called what it protects the HOST. Use Case
I am currently thinking of LF as a network function that provides protection for a small set of servers within an AS. This mostly comes from the Hercules use case we are currently trying to achieve. (High speed file transfer using Hercules and LF in conjunction, so both sender and receiver are protected by LF instance.) However in a next step I also want to look at LF as a network function that provides protection for the whole network of an AS. There I assume the LF would have access to AS-AS keys. But the asymmetry we are discussing now still exists. Do you agree? Do you think of LF more as an AS protection? The Issue
I see. You would assume that LF takes the own (derivable HOST-HOST) key to authenticate incoming traffic and therefore has to use the destinations (non derivable) HOST-HOST key for outgoing traffic. My reasoning was that if the LF would only use its own HOST-HOST key, then we run into an issue. I was not thinking about which way around makes more sense. But to conclude, I think we are talking about the same thing. Solution: 1I agree this seems reasonable for some use cases. Thank you for forther expanding the solution. However for a service that serves a lot of clients the caching of the keys might not be feasable. In that case it could happen that most packets are forwarded without an authenticator. Do you think this is an issue to worry about? Do you see a solution for it without an asymmetric setup like "Solution 2". Solution: 2
Do you already see an issue here?
I like the idea. However that means that every service needs to explicitly differentiate between requests and respondses. (Or at least indicate that it is a response and use "request mode" per default.) Do you think this is doable? And I do not mean technically, I mean do you think that people are willing to use this? Solution: 2bAgree the setup is too complicated. Solution: 3
Agree. Not sure if this is relevant at this point. |
Beta Was this translation helpful? Give feedback.
-
The DRKey system enables to use symmetric keys within a SCION network.
How the keys are derived or distributed is asymmetric. This is especially beneficial for a client-server setup where the server can efficiently derive the key and the client can ask for it from a trusted authority.
We now need to decide how the Lightning Filter (LF) should use the DRKeys. Which key is used (for incoming and outgoing packets)? Do we use different modes? This issue tries to explain the problem and give possible solutions.
For the following I assume that the LF has access to the HOST-AS keys for the HOST that it protects. It can therefore derive HOST-HOST' keys.
The Issue
Assuming the following setup where a client talks to a server and both are behind a LF instance.
The LF2 has access to the HostC-AS key and can therefore derive a HostC-HostS key.
It forwards the clients request authenticated with that key.
The LF1 has access to the HostS-AS key. This however does not help to derive the HostC-HostS key since it is not equal to the HostS-HostC key.
It therefore has to ask the control service for the key.
The same would happen in the other direction with the response from the server to the client.
This is obviously inefficient since two different symmetric keys are used and both LFs have to contact the SCION control service.
Therefore, there is no real benefit for the server side being able to derive keys efficiently.
Solutions
1. Different keys for incoming and outgoing traffic
Setup
This "solution" is what is described above as the issue. I mention it here again since this is not yet implemented and should therefore also be considered as an option.
Keys
Use own derivable key for outgoing traffic.
Fetch key from scion control service for incoming traffic.
Pro
Contra
2. Client Server setup with two LF modes
Setup
We still consider the client-server setup but to solve the issue we introduce two different modes for the LF.
"Mode S" means the LF runs in server mode. It will only use its own HostS-AS key to derive symmetric keys.
"Mode C" means the LF runs in client mode. It will ask for HOST'-HostC keys from the control service.
It then uses them to authenticate a request and caches them to be able to efficiently authenticate the response.
(LF in "Mode C" could also accept traffic authenticated with own HostC-HOST' keys. Not sure if there would be any drawbacks with that.)
This setup would allow the LF to be very efficient for the server side. It would still be acceptable for the client side assuming that not too many different servers are accessed at once. Which I think is a fair assumption in most cases.
Keys
Server side HostS-HOST' keys are used.
Pro
Contra
2.b) Setup like 1. but using an additional LF for outgoing server requests.
Setup
We still have a client-server setup but now the server also performs requests but to a different server "Server2".
Therefore, the server has an additional LF "LF3" that works in client mode. The server can direct his own requests to be sent through LF3.
Keys
Same as with 1. Server side HostS-HOST' keys are used.
Pro
Contra
3. Consideration for applications already using SPAO
Setup
Client-Server setup from 2.
Applications that already add a SPAO header to the packets could be sent directly and not over the LF.
This could allow a server to make requests using a different symmetric key. However, the incoming traffic would still pass the LF and it therefore needs access to the key. This was just a thought but I wanted to at least write it down.
Beta Was this translation helpful? Give feedback.
All reactions