Subject: [karp] Comments on Framework Document: KMP role, peer keys

From: Sam Hartman <[email-masked]>
Date: Wed, 19 May 2010 15:53:07 -0400

I was surprised to see the concept of a peer key in the framework
document.  It seems to sit somewhere between an operator-provisioned
long-term key used for authentication and a traffic key.  Another
related term, called a session key, is also used but never really
defined.

There seem to be a number of issues tangled together in the framework
and design documents; I think we would benefit from spending some
significant time trying to untangle these.  It might be worth actually
holding a conference call or jabber session on some of this.

1) Unicast focus.  There is a lot of text in the current framework that
seems to be assuming that unicast or one-to-one connections are
involved.  A lot of the key protocols we are dealing with involve group
keying.  I want to bring this up because I think that group keying
significantly influences the other issues.

2) How is freshness handled?  In order to handle replay prevention you
typically use both a sequence number along side fresh keys.  For
example, you can use a KDF to establish fresh keys from a PSK or KMP
output.  It's my understanding that TCP-AO uses a KDF even when (as
today) no KMP is used.  Some text in the framework document implies that
we're going to be using this best practice; part of what we eventually
happen will be that  on each new connection/association/whatever, we
generate fresh keys using a KDF.  However there's very little discussion
of where that happens.  In some of the protocols we're talking about,
that would be an RP function, *not* a KMP function.  However other text
implies that the KMP produces the per-packet traffic keys.  

3) What is the peer key?  Is the peer key the output of the KMP that
later gets KDFed into a fresh traffic key?

4) How do peer keys relate to group keying?  If my guess at what peer
keys  are in the point above is correct, then something like them is
definitely needed for group keying.  Howeve, you definitely don't have
peers outside the context of the KMP itself in a group keying situation.

5) Does session key have any meaning in our context or should we replace
session key with peer key?

6) What is the lifespan of a connection for something not using TCP?