[OpenAFS-devel] rx + kerberos5 + !des
Jeffrey Hutzelman
jhutz@cmu.edu
Tue, 17 May 2005 23:09:57 -0400
On Monday, May 16, 2005 07:13:52 PM -0400 Jeffrey Altman
<jaltman@columbia.edu> wrote:
> The Kitten PRF drafts ... are not public yet.
By which he actually means "they are active work items of the IETF kitten
working group, on which you are welcome to comment. I expect to issue a
last call on these documents sometime this week".
For reference, the documents in question are
draft-ietf-kitten-gssapi-prf-03.txt
draft-ietf-kitten-krb5-gssapi-prf-03.txt
For what it's worth, Jeff and Love haven't shed a whole lot of light on how
this is all expected to work, so I'll try to do so. While I was involved
in some of the basic design, it's been a while since I've touched this
stuff, so hopefully Love will correct me on the bits that have changed.
rxgk is an Rx security class module, like rxkad. It is designed to provide
strong security for Rx using modern cryptographic algorithms and design
techniques, which are areas in which rxkad is sorely lacking (even if you
replace DES with a modern cipher, it's still pretty bad). While the rxgk
builds on the Kerberos crypto framework (RFC3961), the security class
itself is designed to be authentication-mechanism-agnostic; it does not
require the use of Kerberos or GSSAPI.
What rxgk proper does require is some means of authenticating and securing
an exchange with the server which is done prior to connection setup. This
exchange results in an rxgk token and an encryption key, which can then be
used for establishing multiple connections between the same client and
server (or multiple servers, if they are configured to use the same private
key for encrypting rxgk tokens). Note that unlike rxkad, rxgk never uses
this key for encrypting actual connection data, does not reuse keys across
connections, and has strong protection against replays even within a
connection.
The token-based design has several major benefits. First, it decouples the
authentication mechanism from the protocol used to protect actual
connection data, allowing the former to be swapped out at-will (unlike
rxkad, which works only with single-DES Kerberos tickets). There are some
parallels to gssklog in this approach, but in the case of rxgk the tokens
were designed expressly for the needs of the security class, rather than
being based on the design of some particular authentication mechanism. In
fact, the original intent was to initially build an implementation directly
around Kerberos V, with the ability later to drop in GSSAPI when that
became a viable option. Of course, at this point there is no longer any
intent to build authentication for rxgk on raw krb5.
Second, the token-based approach keeps authentication out of the core of
the security class, which in the case of the AFS cache manager means it can
also be kept out of the kernel. Because the rxgk token key can be shared
between servers, it is possible to perform the initial authentication
exchange up front, as is done now, and pass the rxgk token and key to the
kernel in the same way that Kerberos tickets are currently passed. Down
the line, this will probably be replaced with a richer interface allowing
for separate per-server keys and/or automatic aquisition and renewal of
tokens as needed.
Finally, the token-based approach allows authentication and parameter
negotiation to take place outside the context of an Rx security class,
before the first protected packet is ever transmitted. This allows for
things like enctype negotiation, level negotiation, and the use of
authentication mechanisms requiring multiple round trips, all of which
would otherwise be impossible due to the limitations of the Rx security
model.
Obviously, an actual useful implementation will require a means to carry
out the initial authentication exchange and, for implementations involving
kernel code, a way to get an rxgk token out of the aklog-alike process and
into the kernel. In the case of GSSAPI-rxgk, I expect the former will be
done using unauthenticated RPC's made to a special "universal" Rx service
running on the same port as the main server. While servers will need to
provide certain components, as they do today with rxkad, the majority of
the details at both ends will be handled entirely inside the library.
And yes, I expect rxgk to be fully workable for rx-based services which are
not part of AFS. I have several of those myself.
-- Jeff