[cap-talk] Another "core" principle - Brinkmann

Marcus Brinkmann marcus.brinkmann at ruhr-uni-bochum.de
Fri Dec 22 22:32:11 CST 2006


Hi,

I think I see now what you want to achieve.  I think you can achieve
all of this in a pure capability model, assuming revocable delegation
(without any identity tracking) and a MyCap? operation.  No extension
to the capability model seems to be necessary.  Here is a very rough
sketch of what needs to happen, I can expand on this if necessary,
although it seems rather standard to me.

I will pick up on your scenario that there is a system service S, an
administrator R, and users Alice, Bob and Carol.

Access to S by means of a capability P is delegated initially to R
(initial configuration), then to Alice as P_A.

1. Step: Revocable delegation with identity binding.

Alice creates a new capability P_B, derived from P_A, which is bound
to an identity "Bob".  The quotes indicate that this is a name for Bob
which is now shared between Alice and S.  A name can be a fingerprint,
a capability, whatever.  If this name should be good enough for R to
know who "Bob" is, Alice and S and R need to agree on a common name
service.  Weakening this requirement seems useful in the case where
arbitrary users want to introduce new identifiers for their own sake.

P_A->Bind_Identity ("Bob") => P_B

The binding is stored in the server S for later reference.

The capability P_B is then delegated to Bob by Alice.  Bob can repeat
this step for a delegation to Carol, yielding a capability P_C, bound
to "Carol", delegated to Carol.


2. Step: Emergency capabilities

Presumably, Carol wants to be able to use the capability even if Bob
revokes it, assuming that Alice or R will agree.  To establish this
possibility, she needs to retain a communication channel with S (or
some equivalent service) that has a lifetime beyond Bob's delegations.
You assumed such a channel when describing the example to me, where
Carol gets a message to some effect like: "Go ask Alice".

So Carol requests an "emergency capability" from S by means of her
capability P_C, for example:

P_C->GetEmergencyCap () -> E_P_C

This capability will be directly delegated from S to C.  It will be
associated with the same internal object as P_C, but as a weak
reference and providing a different interface (more details below).

Now bad things happen, and "Bob" is revoked (the identity, not the
person :)


3. Step: Revocation of identities

Somehow "Bob" is removed from the equation, and all capabilities
delegated by Bob are lost.  This affects Carol, and only Carol, at
this point.  P_C is now a dead capability.


4. Step: Appeal for Resurrection

Carol notices that P_C is dead, for example by invoking it.  Now she
can use the emergency capability E_P_C to query the object status, for
example the delegation chain as in your example interface output.

C can now appeal at R or Alice, or whatever.

E_P_C->WhatsGoingOn () => "Bob's identity was lost..."

E_P_C->Resurrect () => New P_C     ; (*) Returns later, see below.

Note that the last call may not return yet.  First, something else
needs to happen:


5. Step: Bypass and Reclamation

Say Alice complies with Carols request.  Then she makes a call to S,
granting Carol access.  While she is at it, she can also clean up the
resources occupied by the identity "Bob":

P_A->Bypass (P_B, "Carol") => void  ; SIDE-EFFECT: (*) above returns

P_B->Destroy ();


Many details are wrong with this, but probably none you care about
(resource management, etc).  Also, again we ignored matters of how to
establish identities across parties.  Apart from a ton of other
problems I see with this scenario I think it (or some variation of it)
achieves roughly what you asked for.

Thanks,
Marcus



More information about the cap-talk mailing list