[cap-talk] keyrings and bootstrapping capabilities

Peter Amstutz tetron at interreality.org
Thu May 24 13:31:07 EDT 2007


On Thu, May 24, 2007 at 12:33:45PM -0400, Kevin Reid wrote:

> > The best solution I have been able to come up with seems to provide  
> > the user a "keyring" of capabilities.  When some code acting on  
> > behalf of the user requires higher access than is available from  
> > the reference it currently holds, it would look up the object  
> > identifier in the keyring to get the best capability for that  
> > object that has been granted to that user.
>
> I think this is essentially the same as what I described above, but  
> the way you say it makes me think of ambient authority and/or over- 
> broad use of rights amplification.

How is it over-broad?  That is precisely what I am trying to avoid and 
why I'm looking for input from this list.  I understand that managing 
access to the "keyring" or other table of elevated capabilities is very 
sensitive, and presumably requires some kind of user agent that mediates 
access.  How has this been handled by other capability systems?
 
> > In following with the c-list implementation I described previously,  
> > each capability key that is distributed would be logged with a user  
> > id.  Revoking a user's access to part or all of the system would be  
> > a matter of revoking the capabilities granted to that user.
> 
> Such management need not be built into the core of the capability  
> system - it need not know anything about user IDs. Take a look at the  
> Horton system discussed recently.

Fair enough.  I skimmed the Horton paper and it looked fairly similar to 
what I had in mind in terms of providing a way of asking the object in 
question to issue a new capability that provides an audit trail noting 
that the capability had been transferred to the 3rd party.  I'll read it 
over again in depth.  Since I'm designing this from scratch, I'd like to 
follow the best design patterns for capabilities, but I am also not 
restricted by the requirements of fitting anything into an existing 
security design.

I should mention one thing I'm trying to avoid (or finesse) is the 
notion of "facets", at least in the E sense.  My understanding is that 
in E, if you want to grant read-only access to something, you have to 
actually instantiate a new object that wraps the original object and 
acts as a gatekeeper and only permits read-only operations.  This is 
inconvenient for me for a couple of reasons, the first being that this 
is being implemented in C++, which is not known for being a dynamic 
language, so all possible policies need to be known at compile time.  
The second problem is that if security is enforced by possibly arbitrary 
code, reflection (knowing completely what you can and cannot do) is 
impossible, and saving objects to orthogonal persistance or doing 
replication is difficult due to lack of a completely declarative 
security model.  Thus, I envision a security policy (a facet) as being 
essentially a list flagging which methods are callable and which are 
not.

On a side note, do capabilities offer any insight into building systems 
that include resource limits or quotas?

-- 
[   Peter Amstutz  ][ tetron at interreality.org ][ peter.amstutz at gdit.com ]
[Lead Programmer][Interreality Project][Virtual Reality for the Internet]
[ VOS: Next Generation Internet Communication][ http://interreality.org ]
[ http://interreality.org/~tetron ][ pgpkey:  pgpkeys.mit.edu  18C21DF7 ]

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://www.eros-os.org/pipermail/cap-talk/attachments/20070524/24591de6/attachment.bin 


More information about the cap-talk mailing list