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:
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.