Pre-issue discussion: Key-caching and Key Request interactions
From: Bernard Aboba (abobainternaut.com)
Date: Fri, 18 Feb 2005 02:20:13 -0500 (EST)
In going over Section 4, I came across an area which we have not discussed
very much:  key caching on the backend server.

Some proposals seem to assume that the keys exported by EAP methods remain
on the AAA server for some time after their creation.  For example, the
pre-emptive handoff proposals appear to assume that the exported keys
remain on the AAA server, where they can be used to generate additional
AMSKs, based on the EMSK.

It also seems that proposals for "Key Request" functionality
assume the existence of a key cache on the backend server.  After all, for
a "Key Request" to be honored, there has to be keying material present on
the AAA server that can generate the requested key.

One question about such a cache, if it exists, is what exactly is cached.
Since the AAA server does not produce TSKs directly, and does not have
access to EAP method internal state, TSKs and TEKs cannot be cached on the
AAA server.

Since keys transported by the AAA server are deleted, such a key cache
cannot include the AAA-Key.  Once the AAA-Key is sent, it is deleted from
the AAA server, in order to prevent the transported key from being
replayed.  If the AAA-Key was based on the MSK, the MSK is gone too.
However, since the EMSK is never transported, this can be cached, and
serves as the root of the hierarchy of AMSKs.

Based on this, my conclusion is that the AAA-Key cache, if it exists,
consists of EMSKs.  AMSKs are not cached because they are created
on demand and are deleted once they are transported.

The next question is:  how long do the cached EMSKs live?  My answer is
that they are kept by the AAA server until Session-Time after the EAP
authentication that generated them.  Once the EAP authentication completes and 
the
AAA-Key is sent a timer is set to Session-Time, and after it runs out, the
EMSK and all derived keys are deleted.  The timer does not stop if the
session ends.  Also, the timer starts when the AAA-Key is sent, not when the
session starts, because in some cases the session might start considerably
after the AAA-Key is sent (e.g. pre-authentication).

However, the value of Session-Time is not communicated to the peer either
by AAA or EAP.  So how does the EAP peer know when an EMSK/AMSK has
expired?  I think the answer is that the EAP peer needs to be informed by
the lower layer, otherwise its key cache cannot be synchronized with the
authenticator and backend server.

So we've talked about how the key cache on the AAA server might work, and
what is in it (EMSKs).  Given this, how does a "Key Request" work?

As I understand it, a peer uses a protocol other than EAP (e.g. a lower
layer) to request that the authenticator retrieve a key, naming that key
according to the EAP Key Naming scheme.  Since we've already said that the 
backend
server does not cache MSKs (since they're deleted after transport), and
the EMSK is not transportable, the key name must be the name of an AMSK.

That's well and good, but how does the authenticator know which backend
server to request the key from?  Typically an authenticator is configured
with multiple AAA servers, or sometimes with one or more proxies which can
route to multiple home AAA servers.  So there may be quite a few choices.

Some ideas come to mind:

a. The peer may know the name of the AAA server with which it completed
the EAP exchange (deriving the MSK and EMSK), and can tell the
authenticator using a lower layer protocol.  The authenticator can then
send an Access-Request containing a Key-Request attribute to the AAA
server named by the peer.

However, there are problems with this.  While some EAP methods provide
the server name, some methods do not.  Thus, such an approach is not
method independent.  Also, some reflection on the operation of a
directed "Key Request" attribute discloses that it introduces
operational issues.  The problem is that a directed "Key Request"
attribute must cause the authenticator to direct an Access-Request to a
specific AAA server.  However in practice this is very difficult.

The authenticator may not be set up to speak to the AAA server, it may
only talk to a AAA agent who will route the request.  This implies that a "Key
Request" attribute needs to be placed in the Access-Request that can be
interpretted by a proxy so as to cause the message to be routed
appropriately.  No proxies do this today, so there is a backwards
compatibilty issue.  Plus, what happens if the proxy isn't set up to talk
to the requested destination?  What error message is sent back?

b. Proxies along the path route the Key Request based on the NAI in some
way that guarantees that the request goes to the same server as the one
that generated the exported keys, without explicitly naming it.  For
example, if the EAP session-id space were partitioned, then it might be
possible to route the key request appropriately based on that alone.

However, I don't think this works either because the Session-Id has no
hierarchy, being based on nonces or counters.  Also, this approach again
assumes that proxies interpret the Key Request attribute in order to route
packets.

c. The AAA servers share a unified key cache.  This allow for proxies to
operate normally, since all they have to do is route the Access-Request
based on the NAI.  Since any server within a realm can access the unified
key cache, it doesn't matter which server receives it.


  • (no other messages in thread)

Results generated by Tiger Technologies using MHonArc.