Back to index
Authentication in Distributed Systems: Theory and Practice
Butler Lampson, Martin Abadi, Michael Burrows, Edward Wobber, DEC SRC
One-line summary:
Formal description of how to build the end-to-end-secure (e2es) OS,
based on notion of a "principal" (requesting agent), the relation that
one principal can "speak for" another, a few varieties of "speak-for"
that combine and limit authority in various ways,
and various formal proofs that
show how to securely generate and  "hand off" the different kinds of
speaks-for relation among principals.
Overview/Main Points
Concepts:
  -  "A speaks for B": if A says it, we can assume B would have said
       it (did say it), i.e. we can act as if B had said it.
  
 -  Roles: "A as B" means "A in the role of B", which may carry
       different authority than A by itself.
  
 -  Delegations: "A for B": B has delegated specific authority to A
       to do something on B's behalf.
  
 -  Handoff rule: If A' speaks for A, and A' says that B speaks for
       A, then we may assume that B speaks for A.  A' hands off A to B.
 
Techniques:
  -  Using a relay allows shared-key to simulate public-key.  A
       trusted relay R can accept a message from you, decrypt it, and
       (securely) send you the result.  Kerberos does this, even though
       it wasn't specifically designed that way.
  
 -  To set up a secure channel: A and B securely (i.e. using public
       keys) exchange random numbers; then they securely exchange the
       one-way hash K of the two random numbers.  Then A believes that K
       speaks for Kb, since only B could have constructed it.
  
 -  Principals with names: a secure certification authority that
       speaks for A can be trusted when it says certificate C speaks for
       A (by the handoff rule).
  
 -  Exceptions: Used for handling authentication in a hierarchy of
       certification authorities (or other resources).  E.g.: "((P except
       M) quoting N) speaks for (P quoting N)" allows P to access
       anything in subtree N except for M (authors explicitly add
       "except .." to RHS to prevent subversion by going back up the
       tree).
  
 -  Groups: Each group member is a principal that speaks for the
       group.  Membership can be verified by a CA (though this makes it
       impossible to prove that someone is not a member) or by
       having a group private key, so that an outside principal can
       verify group membership of a sender but cannot speak for the
       group.
  
 -  Roles and programs: "A as R" may not have the same authority as A
       acting on its own.  So handoff rule allows us to hand off "A as
       R" rather than handing off just "A", i.e. the recipient of the
       handoff cannot do something that is allowed for A but not alloed
       for "A as R" (or vice versa).  To load a program securely, 
       user U hands off to some process the right to speak for U as
       program P.
  
 -  Booting: goal is to assure that W (workstation) can speak for M
       (machine) as P (program or OS image booted).  The hardware is the
       base case for authentication; it stores a private key in NVRAM
       which is secretly chosen at installation time, and makes the
       public key available.  At boot, machine can invent key KN and
       make a certificate that says "KN speaks for KM as P".  Before
       doing this, M can check the digests of programs against read-only
       representations it knows, to gain assurance that P will be
       running trustworthy programs.
  
 -  To simplify the whole thing, all we need to do is have the boot
       ROM know a digest of a trusted boot program.
  
 -  Delegation: "A says (B quoting A) speaks for (B for A)".  A gives
       B the right to speak for it for specific operations.  Timeouts
       are used to revoke delegation.
  
 -  Secure RPC: encode A as an auth identifier (aid), which is
       integer-sized.  Receiver must verify that C_aid speaks for A.
       See derivation on p. 178 for how this is done.
  
 -  Revokable certificates: Login results initially in a
       long-term delegation by user U to KW^KL (KW is workstation's key,
       KL is temporary public key created by login program).  KL signs a
       short-term certificate that says KW speaks for KL.  By handoff we
       can get (KW|KU) speaks for (KL|KU), and by the "exercise of joint
       authority" theorem (P12 on p.168), we get (KW|KU) speaks for (KW
       for KU). This last delegation has a short lifetime, because the
       certificate saying that KW speaks for KL is short-lived, and
       therefore so is (KW|KU) speaks for (KL|KU).  Ugh.
 
Relevance
Formal discussion of how to build an OS that is end-to-end-secure, from
booting through running  programs in an untrusted
infrastructure while allowing secure transfer of authority from user to
hardware to program.  Some contributions include:
  -  (Probabilistically) secure RPC is lightweight--just pass an
       integer.
  
 -  Shows how to do secure booting and program loading.
  
 -  Delegation can combine or limit (through quoting mechanism)
       authority of the "compound principal" thus created.
  
 -  Long-lived certificates can be countersigned with short-lived
       refreshable ones.
  
 -  Since every decision whether to grant access can be derived from
       a fairly short proof, the proofs can be put in the audit log.
 
Flaws
Rambling, not well written, not tightly argued, a lot of effort to get
to the main points (which though relevant are not spelled out).
Terminology not consistent with earlier related papers (e.g. A Logic of
Authentication).
Back to index