Authentication and Delegation in Distributed Systems

CS 513 -- System Security -- March 11, 1999 -- Lecture 13
Lecturer: Professor Fred B. Schneider

Lecture notes by Borislav Deianov


In the last few lectures we discussed various ways of authenticating humans; we now turn our attention to the problem of authenticating machines.

We will find that authenticating machines is not an isolated problem - there is an interaction with the method we use for authorization. We will need to look again at ACLs and capabilities. We will also keep in mind the Principle of Least Privilege.

Let us first look at a stand-alone system. The typical scenario is:

Transferring rights to a process so it can act on behalf of a user is an instance of delegation. (We delegate all or some rights, in accordance with the principle of least privilege). More generally, delegation is concerned with allowing one subject to act on behalf of another.

We now consider the case of distributed systems. A reference monitor running on some server machine S receives a request made by some local process. The local process received the request from a workstation W.

What identity should the reference monitor attach to that request for determining authorization? Let us first consider some bad answers to that question:

  1. The reference monitor asks W to supply the identity of user originating the request. This solution would mean that the reference monitor trusts the remote system to properly authenticate the user -- a bad idea! The remote system may be just a PC pretending to be W.
  2. The reference monitor asks W to supply the user's password. However the user has no reason to trust the remote system S or the channel between W and S with his/her password.
  3. Create a secure channel from the user's smart card to the reference monitor and use one of the authentication schemes we discussed earlier. The drawback of this approach is that it only works while the user is logged in. The user is prevented from running background jobs when not physically present at the terminal. A better solution is obtained by postulating the following model: principals are both users and workstations and each has a global name. Each principal also has a well-known public key and a corresponding secret private key. Principals generate and respond to requests. Each host has a reference monitor (assume ACLs, although capabilities also enter the picture, in a way).

    Consider the following scenario:

    The user P with smart card SC makes a request "print A" to W1. Before W1 can complete the request it needs to read the object A, so W1 issues a request "read A" to the server WS. The request is processed by the reference monitor at the server (assume it contains an ACL that allows P to read A). Should the reference monitor approve the request from W1?

    It is time to put on our "paranoid" hats. We want to know whether the request is really made on behalf of P. We ensure this in the following way: we create a delegation certificate D1:[W1 for P]SC. This is certificate is just the bit string W1 for P which is prepared by W1 at login time and sent to the user who signs it with the smart card SC and returns it back to W1. The meaning of the certificate is that W1 can now make requests on behalf of P, or "speak for P".

    We use the certificate as follows:

    The user makes a request "print A" to W1 as before. When W1 makes its request to WS, D1 is forwarded along with the request. Now the reference monitor can verify the authenticity of the certificate using the user's well-known public key and approve the request. Note that:

    We can now extend this system with one more workstation W2:

    This leads to the need for the delegation certificate D2. It is just a bit string that W2 sends to W1 who signs it with its private key and sends it back to W2; W2 can then forward it along with the request. The reference monitor reasons as follows: a request is coming from W2 with a certificate D2:[W2 for P]W1 , signed by W1. The reference monitor honors this certificate if and only if W2 has the "delegate read" right and we can make sure that W1 speaks for P. The reference monitor then looks at D1 and since D1 is signed by the smart card and W1 has the "delegate read" right, it is satisfied that the request is legitimately coming from P. Since P has the "read" right, the request is approved.

    Note that instead of D2 we could have used D2´:[W2 for W1]W1. However, such a certificate is much less restrictive and therefore not a good idea.