Jonathan sez:
>Once again, we need to be clear about who the actor is. Non-transferable
>powers do not exist in the human sense. You cannot be prevented from
>telling me a secret if we can communicate. Ownership (i.e. title) is a
>social abstraction, and quite another matter it is useful not to confuse
>the two.
>
>However, we *can* specify and enforce policies in which *programs* are not
>permitted to transfer powers. In this sense the ACL mechanism is not
>fraudulent.
>
>I think that the philosophical problem with ACLs is not that they describe
>unenforceable policies (they do not), but rather that tagging programs with
>something called a "user id" conveys a deeply misleading intuition about
>what policy and protections are actually being enforced by the mechanism;
>the reality has nothing to do with users. Also, all of the commodity ACL
>implementations are broken.
This problem is easy enough to deal with if Carol is simply an instance of access to some abstract, fungible resource ("please give me 5 megabytes of RAM") but trickier if Carol represents something more concrete and specific ("please give me control over the lights in this room"). Requests of the latter sort practically beg for the response of "well, who are you?", and off we go down the road to perdition. However, the question Alice really wants to ask Bob is not "who are you?" but "why should I do that?" Alice does not really care what Bob's name is, but does want to be sure that Bob carries the Good Lightswitchkeeping Magazine Seal Of Approval.
Historically, identity has been the basis of credentialing because credentials are definitely not transferable -- if I hand you my college diploma it does not confer upon you a college education, and any attempt on your part to use my diploma to assert that you do would be considered fraud. But in order to maintain the non-transferability of something, you need to have something else for it to be non-transferable it *from*. In our world this is the individual (whether human or corporate) and individuals are distinguished from one another by identity.
Capabilities and credentials can be combined, to create a something like a non-transferable capability, in the sense of a capability that is of no use unless its holder can also simultaneously engage in a credential verification protocol as me. In particular, I can give this capability to someone else to hold onto and then forget about it myself, knowing that (A) they won't be able to do anything with it, and (B) if they give it back to me at some future time, I will still be able to use it. All of this hinges, of course, on my keeping some secret that I never disclose to anyone which is the secret I use in the credential verification protocol. This secret, in essence, is my identity.
This is an odd sort of non-transferability, however, because it depends on my cooperation for it to work. As always, I can "transfer" one of these capabilities to someone else simply by proxying it for them. I could also, of course, reveal my secret to them, though in practice I can imagine things being arranged so that I have a substantial incentive not to do this (I can also imagine I might be running on top of a TCB which, perhaps with clever hardware, did not actually permit me to reveal my secret because I wouldn't actually know it myself).