[OpenAFS] afs authentication

Christopher A. Petro petro@boredom.org
Mon, 19 Aug 2002 14:17:19 -0400


I recall being pretty impressed with AFS authentication back in 1993.  It
doesn't seem quite as spiffy anymore, though.  The last few messages about
a 3DES key breaking it and my own recent hassles have got me thinking about
it quite a bit.  Now that I have AFS up and running on my machines (except
for XP where the client just flat out refuses to start, though it can
authenticate just fine), I'm thinking about doing something about it.

I see two real problems with the current authentication:

 * It's DES.  I can capture any two packets in a row from the client/AS
   handshake and brute-force the password hash in no time.  That's all
   I would need to get in using a modified klog, and getting the actual
   password from it wouldn't be difficult either.  I love the following
   bit from the Authentication Server Spec: "It is implicitly assumed
   that anyone prepared to do a serious cryptographic attack on DES
   encrypted data in this system can have whatever he or she can get.
   Any data so sensitive that this might be a problem should be subject
   to additonal safety measures.  No such data should be stored in the
   Andrew File System."  I don't know about you, but I think my _spam_
   deserves more protection than DES. :)

 * It's password-based.  A lot boredom.org users log on from untrusted
   machines such as .edu lab machines, public clusters, etc. where they
   have to assume that there's a keysniffer running.  In the past we have
   always solved this using S/KEY.  For now some of these people are using
   S/KEY to auth to one of the client machines and then having their
   login script klog them into AFS using a plaintext password stored
   on the local file system.  Clearly suboptimal.

The beauty of access being controlled by opaque tickets is that it
should be very, very easy to replace the initial authentication without
having to make modifications to parts of the code not related to
authentication.  Assuming the code related to verifying tickets is nicely
tucked away in a library and the tickets are handled opaquely everywhere
else, strengthening the protection on tickets should also be relatively
trivial.

Obviously I'm making a lot of assumptions about the code without having
really read it.  Before I start a project like this, is anyone else working
on improving the authentication in the system?  Am I incorrect in assuming
that the authentication code is well segregated and modular?  The original
AFS documentation all makes it sound like the system was designed to be
fairly agnostic about how this all worked internally, going as far to say
that any secret key-based encryption would be fine to use, so I don't
foresee any changes to authentication violating any fundamental design
principals.

Clearly the changes should be backwards-compatible.  If a cell doesn't
allow particular users to authenticate using DES, attempts to log in
using and old client making the original RPC calls should fail auth
gracefully.  What other concerns might there be?

Comments and thoughts are greatly appreciated.