Lecture notes by
Borislav Deianov
Gasser, Morrie and Ellen McDermott. An architecture for practical delegation in a distributed system. Proceedings of the 1990 IEEE Symposium on Security and Privacy (Oakland, CA., May 1990) pp. 20-30.
Consider a stand-alone system. The typical scenario is:
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:
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:
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.
Typically, each workstation involved in implementing a service will keep cached copies of all delegation certificates for client systems, so it can forward these copies along with requests to any servers that it must contact in order to satisfy a request for service.
When a delegation certificate is no longer needed (e.g. the user logs out), the system should no longer have the right to represent the user. But how do we revoke these certificates?
Let us start with some simple (almost) solutions:
More concretely, in our example, the scheme changes as follows: